From ae218a5cf9e8a80a440f35cc0fd2e112575d31ad Mon Sep 17 00:00:00 2001 From: Mike DeAngelo Date: Tue, 22 Sep 2026 18:54:24 +0000 Subject: [PATCH 1/6] feat: generate SDKs for Looker 26.18 Release-As: 26.18.0 --- csharp/rtl/Constants.cs | 2 +- csharp/sdk/4.0/methods.cs | 1261 +- csharp/sdk/4.0/models.cs | 886 +- go/sdk/v4/methods.go | 936 +- go/sdk/v4/models.go | 797 +- kotlin/src/main/com/looker/sdk/4.0/methods.kt | 1276 +- kotlin/src/main/com/looker/sdk/4.0/models.kt | 949 +- kotlin/src/main/com/looker/sdk/4.0/streams.kt | 1268 +- kotlin/src/main/com/looker/sdk/Constants.kt | 2 +- packages/sdk/src/4.0/funcs.ts | 1720 +- packages/sdk/src/4.0/methods.ts | 1438 +- packages/sdk/src/4.0/methodsInterface.ts | 961 +- packages/sdk/src/4.0/models.ts | 1805 +- packages/sdk/src/4.0/streams.ts | 1666 +- packages/sdk/src/constants.ts | 2 +- python/looker_sdk/sdk/api40/methods.py | 1677 +- python/looker_sdk/sdk/api40/models.py | 2020 +- python/looker_sdk/sdk/constants.py | 2 +- spec/Looker.4.0.json | 22426 +++++++------ spec/Looker.4.0.oas.json | 27498 ++++++++-------- swift/looker/rtl/constants.swift | 2 +- swift/looker/sdk/methods.swift | 1591 +- swift/looker/sdk/models.swift | 3903 ++- swift/looker/sdk/streams.swift | 1521 +- yarn.lock | 6 +- 25 files changed, 40532 insertions(+), 35083 deletions(-) diff --git a/csharp/rtl/Constants.cs b/csharp/rtl/Constants.cs index 57937e041..331346b39 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.12"; + public const string LookerVersion = "26.18"; 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 56030aae3..17e467068 100644 --- a/csharp/sdk/4.0/methods.cs +++ b/csharp/sdk/4.0/methods.cs @@ -21,7 +21,7 @@ /// SOFTWARE. /// -/// 518 API methods +/// 529 API methods #nullable enable using System; @@ -2524,6 +2524,7 @@ public async Task> mobile_settings( /// - host_url /// - email_domain_allowlist /// - embed_cookieless_v2 + /// - embed_vis_modernization_default /// - embed_enabled /// - embed_config /// - mcp_tools @@ -2569,6 +2570,7 @@ public async Task> get_setting( /// - host_url /// - email_domain_allowlist /// - embed_cookieless_v2 + /// - embed_vis_modernization_default /// - embed_enabled /// - embed_config /// - mcp_tools @@ -3141,6 +3143,58 @@ public async Task> ssh_public_key( return await AuthRequest(HttpMethod.Get, "/ssh_public_key", null,null,options); } + /// ### Get All User DB Connections + /// + /// Returns a list of user DB connections. + /// + /// GET /user_db_connections -> UserDbConnection[] + /// + /// UserDbConnection[] User DB Connections (application/json) + /// + /// Requested fields. + public async Task> all_user_db_connections( + string? fields = null, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Get, "/user_db_connections", new Values { + { "fields", fields }},null,options); + } + + /// ### Update User DB Connection + /// + /// Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + /// + /// PATCH /user_db_connections/{user_db_connection_id} -> UserDbConnection + /// + /// UserDbConnection User DB Connection (application/json) + /// + /// Id of user DB connection + public async Task> update_user_db_connection( + string user_db_connection_id, + WriteUserDbConnection body, + ITransportSettings? options = null) +{ + user_db_connection_id = SdkUtils.EncodeParam(user_db_connection_id); + return await AuthRequest(HttpMethod.Patch, $"/user_db_connections/{user_db_connection_id}", null,body,options); + } + + /// ### Delete User DB Connection + /// + /// Deletes an existing user DB connection. + /// + /// DELETE /user_db_connections/{user_db_connection_id} -> void + /// + /// void Successfully deleted. () + /// + /// Id of user DB connection + public async Task> delete_user_db_connection( + string user_db_connection_id, + ITransportSettings? options = null) +{ + user_db_connection_id = SdkUtils.EncodeParam(user_db_connection_id); + return await AuthRequest(HttpMethod.Delete, $"/user_db_connections/{user_db_connection_id}", null,null,options); + } + #endregion Connection: Manage Database Connections #region Content: Manage Content @@ -3762,6 +3816,23 @@ public async Task> update_agent( { "fields", fields }},body,options); } + /// ### Get LookML of a UDD Agent + /// + /// Returns the LookML representation of a user-defined (UDD) agent. + /// + /// GET /agents/lookml/{agent_id} -> AgentLookml + /// + /// AgentLookml lookml of agent (application/json) + /// + /// Id of agent + public async Task> agent_lookml( + string agent_id, + ITransportSettings? options = null) +{ + agent_id = SdkUtils.EncodeParam(agent_id); + return await AuthRequest(HttpMethod.Get, $"/agents/lookml/{agent_id}", null,null,options); + } + /// ### Get All Conversation Messages /// /// Get all conversation messages. @@ -3877,6 +3948,33 @@ public async Task> update_conversati { "fields", fields }},body,options); } + /// ### Get Agent Responses for User Message + /// + /// Get all agent response messages generated for a specific user prompt. + /// + /// An agent response often consists of multiple message blocks (such as text explanations, + /// visualizations, and follow-up suggestions). This endpoint returns all response messages + /// following the specified user message up to the next user prompt. + /// + /// GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> ConversationMessage[] + /// + /// ConversationMessage[] agent response messages (application/json) + /// + /// Conversation ID + /// User Conversation Message ID + /// Requested fields + public async Task> get_conversation_message_responses( + string conversation_id, + string user_message_id, + string? fields = null, + ITransportSettings? options = null) +{ + conversation_id = SdkUtils.EncodeParam(conversation_id); + user_message_id = SdkUtils.EncodeParam(user_message_id); + return await AuthRequest(HttpMethod.Get, $"/conversations/{conversation_id}/messages/{user_message_id}/responses", new Values { + { "fields", fields }},null,options); + } + /// ### Search Conversations /// /// Returns an array of conversation objects that match the specified search criteria. @@ -4354,6 +4452,33 @@ public async Task> delete_dashboard( return await AuthRequest(HttpMethod.Delete, $"/dashboards/{dashboard_id}", null,null,options); } + /// ### Get Dashboard Image + /// + /// Returns the image content for a dashboard element. + /// + /// GET /dashboards/{dashboard_id}/images/{image_slug} -> binary + /// + /// **Note**: Binary content may be returned by this method. + /// + /// + /// binary Image content (image/svg+xml) + /// binary Image content (image/png) + /// binary Image content (image/jpeg) + /// binary Image content (image/gif) + /// + /// + /// Id of dashboard + /// Slug of image + public async Task> get_dashboard_image( + string dashboard_id, + string image_slug, + ITransportSettings? options = null) where TSuccess : class +{ + dashboard_id = SdkUtils.EncodeParam(dashboard_id); + image_slug = SdkUtils.EncodeParam(image_slug); + return await AuthRequest(HttpMethod.Get, $"/dashboards/{dashboard_id}/images/{image_slug}", null,null,options); + } + /// ### Get Aggregate Table LookML for Each Query on a Dashboard /// /// Returns a JSON object that contains the dashboard id and Aggregate Table lookml @@ -4398,6 +4523,8 @@ public async Task> dashboa /// Boolean search params accept only "true" and "false" as values. /// /// + /// **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + /// /// The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. /// /// Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -4407,12 +4534,12 @@ public async Task> dashboa /// DashboardLookml dashboards (application/json) /// /// Filter on a particular folder. - /// Match LookML Dashboard title. + /// Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title. /// Filter on a content favorite id. /// Requested fields. /// Number of results to return. (used with offset and takes priority over page and per_page) /// Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - /// One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status] + /// One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title. public async Task> search_lookml_dashboards( string? folder_id = null, string? title = null, @@ -4463,14 +4590,17 @@ public async Task> dashboard_lookml( /// /// Dashboard id to move. /// Folder id to move to. + /// LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. public async Task> move_dashboard( string dashboard_id, string folder_id, + string? project_name = null, ITransportSettings? options = null) { dashboard_id = SdkUtils.EncodeParam(dashboard_id); return await AuthRequest(HttpMethod.Patch, $"/dashboards/{dashboard_id}/move", new Values { - { "folder_id", folder_id }},null,options); + { "folder_id", folder_id }, + { "project_name", project_name }},null,options); } /// ### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard. @@ -6385,6 +6515,8 @@ public async Task> delete_look( /// | png | A PNG image of the visualization of the query /// | jpg | A JPG image of the visualization of the query /// + /// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + /// /// GET /looks/{look_id}/run/{result_format} -> string /// /// **Note**: Binary content may be returned by this method. @@ -6882,52 +7014,157 @@ public async Task> connection_cost_estimate #region Project: Manage Projects - /// ### Fetches a CI Run. + /// ### Search Continuous Integration Runs for a project. /// - /// This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + /// Returns an array of Continuous Integration Run objects that match the specified search criteria. /// - /// GET /projects/{project_id}/ci/runs/{run_id} -> ProjectRun + /// GET /projects/{project_id}/continuous_integration/runs/search -> CIRun[] /// - /// ProjectRun CI Run (application/json) + /// CIRun[] Continuous Integration Runs (application/json) /// /// Project Id - /// Run Id /// Requested fields - [Obsolete("Deprecated")] - public async Task> get_ci_run( + /// Filter by suite id. Can be a comma-separated list of ids. + /// Filter by status. Can be a comma-separated list of statuses. + /// Filter by user id. Can be a comma-separated list of ids. + /// Filter by trigger type. Can be a comma-separated list of types. + /// Number of results to return (min 1, max 100, default 50, used with offset) + /// Number of results to skip before returning. (used with limit) + /// One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at + public async Task> search_continuous_integration_runs( string project_id, - string run_id, string? fields = null, + string? suite_id = null, + string? status = null, + string? user_id = null, + string? trigger_type = null, + long? limit = null, + long? offset = null, + string? sorts = null, ITransportSettings? options = null) { project_id = SdkUtils.EncodeParam(project_id); - run_id = SdkUtils.EncodeParam(run_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/ci/runs/{run_id}", new Values { - { "fields", fields }},null,options); + return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/continuous_integration/runs/search", new Values { + { "fields", fields }, + { "suite_id", suite_id }, + { "status", status }, + { "user_id", user_id }, + { "trigger_type", trigger_type }, + { "limit", limit }, + { "offset", offset }, + { "sorts", sorts }},null,options); + } + + /// ### Fetches Multiple CI Suite Configurations for Project. + /// + /// GET /projects/{project_id}/continuous_integration/suites -> ProjectCISuite[] + /// + /// ProjectCISuite[] Continuous Integration Suite (application/json) + /// + /// Project Id + /// Requested fields + /// Number of suites to return (min 1, max 100, default 50) + /// Row offset at which to fetch suites + /// Time at which to fetch suites + public async Task> get_continuous_integration_suites( + string project_id, + string? fields = null, + long? limit = null, + long? offset = null, + DateTime? created_at = null, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/continuous_integration/suites", new Values { + { "fields", fields }, + { "limit", limit }, + { "offset", offset }, + { "created_at", created_at }},null,options); } - /// ### Creates a CI Run. + /// ### Fetches a CI Suite Configuration. + /// + /// POST /projects/{project_id}/continuous_integration/suites -> ProjectCISuite /// - /// This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + /// ProjectCISuite Continuous Integration Suite (application/json) + /// + /// Project Id + /// Requested fields + public async Task> create_continuous_integration_suite( + string project_id, + WriteProjectCISuite body, + string? fields = null, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/continuous_integration/suites", new Values { + { "fields", fields }},body,options); + } + + /// ### Fetches a CI Suite Configuration. /// - /// POST /projects/{project_id}/ci/run -> CreateCIRunResponse + /// GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite /// - /// CreateCIRunResponse CI Run (application/json) + /// ProjectCISuite Continuous Integration Suite (application/json) /// /// Project Id + /// Suite Id /// Requested fields - [Obsolete("Deprecated")] - public async Task> create_ci_run( + public async Task> get_continuous_integration_suite( + string project_id, + string suite_id, + string? fields = null, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + suite_id = SdkUtils.EncodeParam(suite_id); + return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/continuous_integration/suites/{suite_id}", new Values { + { "fields", fields }},null,options); + } + + /// ### Updates a Continuous Integration Suite. + /// + /// PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite + /// + /// ProjectCISuite Continuous Integration Suite (application/json) + /// + /// Project Id + /// Suite Id + /// Requested fields + public async Task> update_continuous_integration_suite( string project_id, - CreateCIRunRequest body, + string suite_id, + WriteProjectCISuite body, string? fields = null, ITransportSettings? options = null) { project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/ci/run", new Values { + suite_id = SdkUtils.EncodeParam(suite_id); + return await AuthRequest(HttpMethod.Patch, $"/projects/{project_id}/continuous_integration/suites/{suite_id}", new Values { { "fields", fields }},body,options); } + /// ### Deletes a Continuous Integration Suite. + /// + /// DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> string + /// + /// string Successfully deleted. (application/json) + /// + /// Project Id + /// Suite Id + /// Requested fields + public async Task> delete_continuous_integration_suite( + string project_id, + string suite_id, + string? fields = null, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + suite_id = SdkUtils.EncodeParam(suite_id); + return await AuthRequest(HttpMethod.Delete, $"/projects/{project_id}/continuous_integration/suites/{suite_id}", new Values { + { "fields", fields }},null,options); + } + /// ### Creates and queues a Continuous Integration Run. /// /// POST /projects/{project_id}/continuous_integration/runs -> CIRun @@ -6947,6 +7184,27 @@ public async Task> create_continuous_integration_r { "fields", fields }},body,options); } + /// ### Duplicates and queues a Continuous Integration Run. + /// + /// POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> CIRun + /// + /// CIRun Duplicate Continuous Integration Run (application/json) + /// + /// Project Id + /// Run ID to duplicate and re-run + /// Requested fields + public async Task> duplicate_continuous_integration_run( + string project_id, + string run_id, + string? fields = null, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + run_id = SdkUtils.EncodeParam(run_id); + return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/continuous_integration/runs/{run_id}/duplicate", new Values { + { "fields", fields }},null,options); + } + /// ### Gets a Continuous Integration run. /// /// GET /projects/{project_id}/continuous_integration/runs/{run_id} -> CIRun @@ -6968,6 +7226,24 @@ public async Task> get_continuous_integration_run( { "fields", fields }},null,options); } + /// ### Cancels a Continuous Integration Run. + /// + /// DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> string + /// + /// string Successfully deleted. (application/json) + /// + /// Project Id + /// Run Id + public async Task> cancel_continuous_integration_run( + string project_id, + string run_id, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + run_id = SdkUtils.EncodeParam(run_id); + return await AuthRequest(HttpMethod.Delete, $"/projects/{project_id}/continuous_integration/runs/{run_id}", null,null,options); + } + /// ### Generate Lockfile for All LookML Dependencies /// /// Git must have been configured, must be in dev mode and deploy permission required @@ -7261,6 +7537,38 @@ public async Task> reset_project_to_remote(HttpMethod.Post, $"/projects/{project_id}/reset_to_remote", null,null,options); } + /// ### Pull from Production + /// Pulls changes from the remote production branch into the current development workspace. + /// + /// POST /projects/{project_id}/pull_from_production -> string + /// + /// string Returns git output message if pull was successful, otherwise 400 with an error message (application/json) + /// + /// Id of project + public async Task> pull_project_from_production( + string project_id, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/pull_from_production", null,null,options); + } + + /// ### Pull from Remote + /// Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + /// + /// POST /projects/{project_id}/pull_from_remote -> string + /// + /// string Returns git output message if pull was successful, otherwise 400 with an error message (application/json) + /// + /// Id of project + public async Task> pull_project_from_remote( + string project_id, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/pull_from_remote", null,null,options); + } + /// ### Get All Projects /// /// Returns all projects visible to the current user @@ -7669,59 +7977,6 @@ public async Task> tag_ref( { "tag_message", tag_message }},body,options); } - /// ### Initiate Git Diagnosis Suite - /// - /// POST /projects/{project_id}/git_diagnostic_report -> GitDiagnosticReport - /// - /// GitDiagnosticReport GitDiagnosticReport (application/json) - /// - /// Looker Project ID - public async Task> create_git_diagnostic_report( - string project_id, - WriteGitDiagnosticReport body, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/git_diagnostic_report", null,body,options); - } - - /// ### Retrieve Live Git Diagnostic Suite Execution Status - /// - /// GET /projects/{project_id}/git_diagnostic_report/{report_id} -> GitDiagnosticReport - /// - /// GitDiagnosticReport GitDiagnosticReport (application/json) - /// - /// Looker Project ID - /// Report ID - public async Task> get_git_diagnostic_report( - string project_id, - string report_id, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - report_id = SdkUtils.EncodeParam(report_id); - return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/git_diagnostic_report/{report_id}", null,null,options); - } - - /// ### Repair Git Configuration Issues - /// - /// POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> GitDiagnosticReport - /// - /// GitDiagnosticReport GitDiagnosticReport (application/json) - /// - /// Looker Project ID - /// Report ID - public async Task> repair_git_diagnostic_report( - string project_id, - string report_id, - WriteGitDiagnosticReport body, - ITransportSettings? options = null) -{ - project_id = SdkUtils.EncodeParam(project_id); - report_id = SdkUtils.EncodeParam(report_id); - return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/git_diagnostic_report/{report_id}/repair", null,body,options); - } - /// ### Configure Repository Credential for a remote dependency /// /// Admin required. @@ -7797,6 +8052,8 @@ public async Task> get_all_reposi /// Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. /// After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. /// + /// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + /// /// POST /query_tasks -> QueryTask /// /// QueryTask query_task (application/json) @@ -8040,6 +8297,8 @@ public async Task> create_query( /// | png | A PNG image of the visualization of the query /// | jpg | A JPG image of the visualization of the query /// + /// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + /// /// GET /queries/{query_id}/run/{result_format} -> string /// /// **Note**: Binary content may be returned by this method. @@ -8151,6 +8410,8 @@ public async Task> run_query( /// | png | A PNG image of the visualization of the query /// | jpg | A JPG image of the visualization of the query /// + /// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + /// /// POST /queries/run/{result_format} -> string /// /// **Note**: Binary content may be returned by this method. @@ -8262,6 +8523,8 @@ public async Task> run_inline_query( /// | png | A PNG image of the visualization of the query /// | jpg | A JPG image of the visualization of the query /// + /// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + /// /// GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> string /// /// **Note**: Binary content may be returned by this method. @@ -9564,6 +9827,10 @@ public async Task> scheduled_plan_run_once /// Match recipient address. /// Match scheduled plan's destination type. /// Match scheduled plan's delivery format. + /// Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag). + /// Match Scheduled plan's run_once. + /// Match Scheduled plan's enabled status. + /// Match scheduled plan's last run status. /// Combine given search criteria in a boolean OR expression public async Task> search_scheduled_plans( string? user_id = null, @@ -9581,6 +9848,10 @@ public async Task> search_scheduled_plan string? recipient = null, string? destination_type = null, string? delivery_format = null, + bool? all_states = null, + bool? run_once = null, + bool? enabled = null, + string? last_run_status = null, bool? filter_or = null, ITransportSettings? options = null) { @@ -9600,6 +9871,10 @@ public async Task> search_scheduled_plan { "recipient", recipient }, { "destination_type", destination_type }, { "delivery_format", delivery_format }, + { "all_states", all_states }, + { "run_once", run_once }, + { "enabled", enabled }, + { "last_run_status", last_run_status }, { "filter_or", filter_or }},null,options); } @@ -10382,37 +10657,334 @@ public async Task> search_crede { "filter_or", filter_or }},null,options); } - /// ### Get information about the current user; i.e. the user account currently calling the API. + /// ### Email/password login information for the specified user. /// - /// GET /user -> User + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). /// - /// User Current user. (application/json) + /// GET /users/{user_id}/credentials_email -> CredentialsEmail + /// + /// CredentialsEmail Email/Password Credential (application/json) /// + /// Id of user /// Requested fields. - public async Task> me( + public async Task> user_credentials_email( + string user_id, string? fields = null, ITransportSettings? options = null) { - return await AuthRequest(HttpMethod.Get, "/user", new Values { + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_email", new Values { { "fields", fields }},null,options); } - /// ### Get information about all users. + /// ### Email/password login information for the specified user. /// - /// GET /users -> User[] + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). /// - /// User[] All users. (application/json) + /// POST /users/{user_id}/credentials_email -> CredentialsEmail /// + /// CredentialsEmail Email/Password Credential (application/json) + /// + /// Id of user /// Requested fields. - /// DEPRECATED. Use limit and offset instead. Return only page N of paginated results - /// DEPRECATED. Use limit and offset instead. Return N rows of data per page - /// Number of results to return. (used with offset and takes priority over page and per_page) - /// Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - /// Fields to sort by. - /// Optional list of ids to get specific users. - public async Task> all_users( - string? fields = null, - long? page = null, + public async Task> create_user_credentials_email( + string user_id, + WriteCredentialsEmail body, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_email", new Values { + { "fields", fields }},body,options); + } + + /// ### Email/password login information for the specified user. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// PATCH /users/{user_id}/credentials_email -> CredentialsEmail + /// + /// CredentialsEmail Email/Password Credential (application/json) + /// + /// Id of user + /// Requested fields. + public async Task> update_user_credentials_email( + string user_id, + WriteCredentialsEmail body, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Patch, $"/users/{user_id}/credentials_email", new Values { + { "fields", fields }},body,options); + } + + /// ### Email/password login information for the specified user. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// DELETE /users/{user_id}/credentials_email -> string + /// + /// string Successfully deleted. (application/json) + /// + /// Id of user + public async Task> delete_user_credentials_email( + string user_id, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_email", null,null,options); + } + + /// ### Create a password reset token. + /// This will create a cryptographically secure random password reset token for the user. + /// If the user already has a password reset token then this invalidates the old token and creates a new one. + /// The token is expressed as the 'password_reset_url' of the user's email/password credential object. + /// This takes an optional 'expires' param to indicate if the new token should be an expiring token. + /// Tokens that expire are typically used for self-service password resets for existing users. + /// Invitation emails for new users typically are not set to expire. + /// The expire period is always 60 minutes when expires is enabled. + /// This method can be called with an empty body. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail + /// + /// CredentialsEmail email/password credential (application/json) + /// + /// Id of user + /// Expiring token. + /// Requested fields. + public async Task> create_user_credentials_email_password_reset( + string user_id, + bool? expires = null, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_email/password_reset", new Values { + { "expires", expires }, + { "fields", fields }},null,options); + } + + /// ### Send a password reset token. + /// This will send a password reset email to the user. If a password reset token does not already exist + /// for this user, it will create one and then send it. + /// If the user has not yet set up their account, it will send a setup email to the user. + /// The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + /// Password reset URLs will expire in 60 minutes. + /// This method can be called with an empty body. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail + /// + /// CredentialsEmail email/password credential (application/json) + /// + /// Id of user + /// Requested fields. + public async Task> send_user_credentials_email_password_reset( + string user_id, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_email/send_password_reset", new Values { + { "fields", fields }},null,options); + } + + /// ### Google authentication login information for the specified user. + /// + /// GET /users/{user_id}/credentials_google -> CredentialsGoogle + /// + /// CredentialsGoogle Google Auth Credential (application/json) + /// + /// Id of user + /// Requested fields. + public async Task> user_credentials_google( + string user_id, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_google", new Values { + { "fields", fields }},null,options); + } + + /// ### Delete Google authentication login information for the specified user. + /// + /// DELETE /users/{user_id}/credentials_google -> string + /// + /// string Successfully deleted. (application/json) + /// + /// Id of user + public async Task> delete_user_credentials_google( + string user_id, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_google", null,null,options); + } + + /// ### Looker Openid login information for the specified user. Used by Looker Analysts. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid + /// + /// CredentialsLookerOpenid Looker OpenId Credential (application/json) + /// + /// Id of user + /// Requested fields. + public async Task> user_credentials_looker_openid( + string user_id, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_looker_openid", new Values { + { "fields", fields }},null,options); + } + + /// ### Looker Openid login information for the specified user. Used by Looker Analysts. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// DELETE /users/{user_id}/credentials_looker_openid -> string + /// + /// string Successfully deleted. (application/json) + /// + /// Id of user + public async Task> delete_user_credentials_looker_openid( + string user_id, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_looker_openid", null,null,options); + } + + /// ### Saml authentication login information for the specified user. + /// + /// GET /users/{user_id}/credentials_saml -> CredentialsSaml + /// + /// CredentialsSaml Saml Auth Credential (application/json) + /// + /// Id of user + /// Requested fields. + public async Task> user_credentials_saml( + string user_id, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_saml", new Values { + { "fields", fields }},null,options); + } + + /// ### Delete Saml authentication login information for the specified user. + /// + /// DELETE /users/{user_id}/credentials_saml -> string + /// + /// string Successfully deleted. (application/json) + /// + /// Id of user + public async Task> delete_user_credentials_saml( + string user_id, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_saml", null,null,options); + } + + /// ### Get two-factor login information for the specified user. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// GET /users/{user_id}/credentials_totp -> CredentialsTotp + /// + /// CredentialsTotp Two-Factor Credential (application/json) + /// + /// Id of user + /// Requested fields. + public async Task> user_credentials_totp( + string user_id, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_totp", new Values { + { "fields", fields }},null,options); + } + + /// ### Create two-factor login information for the specified user. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// POST /users/{user_id}/credentials_totp -> CredentialsTotp + /// + /// CredentialsTotp Two-Factor Credential (application/json) + /// + /// Id of user + /// Requested fields. + public async Task> create_user_credentials_totp( + string user_id, + CredentialsTotp? body, + string? fields = null, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_totp", new Values { + { "fields", fields }},body,options); + } + + /// ### Delete two-factor login information for the specified user. + /// + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// DELETE /users/{user_id}/credentials_totp -> string + /// + /// string Successfully deleted. (application/json) + /// + /// Id of user + public async Task> delete_user_credentials_totp( + string user_id, + ITransportSettings? options = null) +{ + user_id = SdkUtils.EncodeParam(user_id); + return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_totp", null,null,options); + } + + /// ### Get information about the current user; i.e. the user account currently calling the API. + /// + /// GET /user -> User + /// + /// User Current user. (application/json) + /// + /// Requested fields. + public async Task> me( + string? fields = null, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Get, "/user", new Values { + { "fields", fields }},null,options); + } + + /// ### Get information about all users. + /// + /// GET /users -> User[] + /// + /// User[] All users. (application/json) + /// + /// Requested fields. + /// DEPRECATED. Use limit and offset instead. Return only page N of paginated results + /// DEPRECATED. Use limit and offset instead. Return N rows of data per page + /// Number of results to return. (used with offset and takes priority over page and per_page) + /// Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + /// Fields to sort by. + /// Optional list of ids to get specific users. + public async Task> all_users( + string? fields = null, + long? page = null, long? per_page = null, long? limit = null, long? offset = null, @@ -10606,404 +11178,201 @@ public async Task> search_users_names( /// be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains /// The user name and avatar url, but no sensitive information. /// - /// GET /users/{user_id} -> User - /// - /// User Specified user. (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user( - string user_id, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update information about the user with a specific id. - /// - /// PATCH /users/{user_id} -> User - /// - /// User New state for specified user. (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> update_user( - string user_id, - WriteUser body, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Patch, $"/users/{user_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete the user with a specific id. - /// - /// **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. - /// - /// Deletion will have the following impact: - /// * Their reports, Looks and dashboards will be moved to Trash. - /// * Any public URLs owned by them will no longer work. - /// * Schedules created by the users or that use their content will be deleted. - /// * Alerts will continue to run, but will not be visible or editable from the dashboard. - /// - /// The user cannot delete themselves. - /// The last administrator user cannot be deleted. - /// - /// Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - /// Please use the dedicated `delete_service_account` endpoint. - /// - /// DELETE /users/{user_id} -> string - /// - /// string User successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user( - string user_id, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}", null,null,options); - } - - /// ### Get information about the user with a credential of given type with specific id. - /// - /// This is used to do things like find users by their embed external_user_id. Or, find the user with - /// a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - /// types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - /// for the user and is specific to each type of credential. - /// - /// An example using the Ruby sdk might look like: - /// - /// `sdk.user_for_credential('embed', 'customer-4959425')` - /// - /// This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - /// which field in the given credential type is actually searched when finding a user with the supplied - /// 'credential_id'. - /// - /// | Credential Types | Id Field Matched | - /// | ---------------- | ---------------- | - /// | email | email | - /// | google | google_user_id | - /// | saml | saml_user_id | - /// | oidc | oidc_user_id | - /// | ldap | ldap_id | - /// | api | token | - /// | api3 | client_id | - /// | embed | external_user_id | - /// | looker_openid | email | - /// - /// **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/credential/{credential_type}/{credential_id} -> User - /// - /// User Specified user. (application/json) - /// - /// Type name of credential - /// Id of credential - /// Requested fields. - public async Task> user_for_credential( - string credential_type, - string credential_id, - string? fields = null, - ITransportSettings? options = null) -{ - credential_type = SdkUtils.EncodeParam(credential_type); - credential_id = SdkUtils.EncodeParam(credential_id); - return await AuthRequest(HttpMethod.Get, $"/users/credential/{credential_type}/{credential_id}", new Values { - { "fields", fields }},null,options); - } - - /// ### Update information for a specific service account. This action is restricted to Looker admins. - /// - /// This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. - /// - /// PATCH /users/service_accounts/{user_id} -> ServiceAccount - /// - /// ServiceAccount New state for specified service account. (application/json) - /// - /// Id of service account - /// Requested fields. - public async Task> update_service_account( - string user_id, - WriteServiceAccount body, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Patch, $"/users/service_accounts/{user_id}", new Values { - { "fields", fields }},body,options); - } - - /// ### Delete the service account with a specific id. - /// - /// **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. - /// - /// Deletion will have the following impact: - /// * Their reports, Looks and dashboards will be moved to Trash. - /// * Any public URLs owned by them will no longer work. - /// * Schedules created by the service account or that use their content will be deleted. - /// * Alerts will continue to run, but will not be visible or editable from the dashboard. - /// - /// The service account cannot delete itself. - /// - /// DELETE /users/service_accounts/{user_id} -> string - /// - /// string Service Account successfully deleted. (application/json) - /// - /// Id of service account user - public async Task> delete_service_account( - string user_id, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Delete, $"/users/service_accounts/{user_id}", null,null,options); - } - - /// ### Email/password login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_email -> CredentialsEmail - /// - /// CredentialsEmail Email/Password Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_email( - string user_id, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_email", new Values { - { "fields", fields }},null,options); - } - - /// ### Email/password login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /users/{user_id}/credentials_email -> CredentialsEmail - /// - /// CredentialsEmail Email/Password Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> create_user_credentials_email( - string user_id, - WriteCredentialsEmail body, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_email", new Values { - { "fields", fields }},body,options); - } - - /// ### Email/password login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// PATCH /users/{user_id}/credentials_email -> CredentialsEmail - /// - /// CredentialsEmail Email/Password Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> update_user_credentials_email( - string user_id, - WriteCredentialsEmail body, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Patch, $"/users/{user_id}/credentials_email", new Values { - { "fields", fields }},body,options); - } - - /// ### Email/password login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_email -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_email( - string user_id, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_email", null,null,options); - } - - /// ### Two-factor login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_totp -> CredentialsTotp + /// GET /users/{user_id} -> User /// - /// CredentialsTotp Two-Factor Credential (application/json) + /// User Specified user. (application/json) /// /// Id of user /// Requested fields. - public async Task> user_credentials_totp( + public async Task> user( string user_id, string? fields = null, ITransportSettings? options = null) { user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_totp", new Values { + return await AuthRequest(HttpMethod.Get, $"/users/{user_id}", new Values { { "fields", fields }},null,options); } - /// ### Two-factor login information for the specified user. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// ### Update information about the user with a specific id. /// - /// POST /users/{user_id}/credentials_totp -> CredentialsTotp + /// PATCH /users/{user_id} -> User /// - /// CredentialsTotp Two-Factor Credential (application/json) + /// User New state for specified user. (application/json) /// /// Id of user /// Requested fields. - public async Task> create_user_credentials_totp( + public async Task> update_user( string user_id, - CredentialsTotp? body, + WriteUser body, string? fields = null, ITransportSettings? options = null) { user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_totp", new Values { + return await AuthRequest(HttpMethod.Patch, $"/users/{user_id}", new Values { { "fields", fields }},body,options); } - /// ### Two-factor login information for the specified user. + /// ### Delete the user with a specific id. /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. /// - /// DELETE /users/{user_id}/credentials_totp -> string + /// Deletion will have the following impact: + /// * Their reports, Looks and dashboards will be moved to Trash. + /// * Any public URLs owned by them will no longer work. + /// * Schedules created by the users or that use their content will be deleted. + /// * Alerts owned by the users will be deleted. /// - /// string Successfully deleted. (application/json) + /// The user cannot delete themselves. + /// The last administrator user cannot be deleted. + /// + /// Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + /// Please use the dedicated `delete_service_account` endpoint. + /// + /// DELETE /users/{user_id} -> string + /// + /// string User successfully deleted. (application/json) /// /// Id of user - public async Task> delete_user_credentials_totp( + public async Task> delete_user( string user_id, ITransportSettings? options = null) { user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_totp", null,null,options); + return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}", null,null,options); } - /// ### LDAP login information for the specified user. + /// ### Get information about the user with a credential of given type with specific id. + /// + /// This is used to do things like find users by their embed external_user_id. Or, find the user with + /// a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + /// types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + /// for the user and is specific to each type of credential. + /// + /// An example using the Ruby sdk might look like: + /// + /// `sdk.user_for_credential('embed', 'customer-4959425')` + /// + /// This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + /// which field in the given credential type is actually searched when finding a user with the supplied + /// 'credential_id'. + /// + /// | Credential Types | Id Field Matched | + /// | ---------------- | ---------------- | + /// | email | email | + /// | google | google_user_id | + /// | saml | saml_user_id | + /// | oidc | oidc_user_id | + /// | ldap | ldap_id | + /// | api | token | + /// | api3 | client_id | + /// | embed | external_user_id | + /// | looker_openid | email | + /// + /// **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. /// /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). /// - /// GET /users/{user_id}/credentials_ldap -> CredentialsLDAP + /// GET /users/credential/{credential_type}/{credential_id} -> User /// - /// CredentialsLDAP LDAP Credential (application/json) + /// User Specified user. (application/json) /// - /// Id of user + /// Type name of credential + /// Id of credential /// Requested fields. - public async Task> user_credentials_ldap( - string user_id, + public async Task> user_for_credential( + string credential_type, + string credential_id, string? fields = null, ITransportSettings? options = null) { - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_ldap", new Values { + credential_type = SdkUtils.EncodeParam(credential_type); + credential_id = SdkUtils.EncodeParam(credential_id); + return await AuthRequest(HttpMethod.Get, $"/users/credential/{credential_type}/{credential_id}", new Values { { "fields", fields }},null,options); } - /// ### LDAP login information for the specified user. + /// ### Update information for a specific service account. This action is restricted to Looker admins. /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. /// - /// DELETE /users/{user_id}/credentials_ldap -> string + /// PATCH /users/service_accounts/{user_id} -> ServiceAccount /// - /// string Successfully deleted. (application/json) + /// ServiceAccount New state for specified service account. (application/json) /// - /// Id of user - public async Task> delete_user_credentials_ldap( + /// Id of service account + /// Requested fields. + public async Task> update_service_account( string user_id, + WriteServiceAccount body, + string? fields = null, ITransportSettings? options = null) { user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_ldap", null,null,options); + return await AuthRequest(HttpMethod.Patch, $"/users/service_accounts/{user_id}", new Values { + { "fields", fields }},body,options); } - /// ### Google authentication login information for the specified user. + /// ### Delete the service account with a specific id. /// - /// GET /users/{user_id}/credentials_google -> CredentialsGoogle + /// **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. /// - /// CredentialsGoogle Google Auth Credential (application/json) + /// Deletion will have the following impact: + /// * Their reports, Looks and dashboards will be moved to Trash. + /// * Any public URLs owned by them will no longer work. + /// * Schedules created by the service account or that use their content will be deleted. + /// * Alerts owned by the service account will be deleted. /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_google( - string user_id, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_google", new Values { - { "fields", fields }},null,options); - } - - /// ### Google authentication login information for the specified user. + /// The service account cannot delete itself. /// - /// DELETE /users/{user_id}/credentials_google -> string + /// DELETE /users/service_accounts/{user_id} -> string /// - /// string Successfully deleted. (application/json) + /// string Service Account successfully deleted. (application/json) /// - /// Id of user - public async Task> delete_user_credentials_google( + /// Id of service account user + public async Task> delete_service_account( string user_id, ITransportSettings? options = null) { user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_google", null,null,options); + return await AuthRequest(HttpMethod.Delete, $"/users/service_accounts/{user_id}", null,null,options); } - /// ### Saml authentication login information for the specified user. + /// ### LDAP login information for the specified user. /// - /// GET /users/{user_id}/credentials_saml -> CredentialsSaml + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). /// - /// CredentialsSaml Saml Auth Credential (application/json) + /// GET /users/{user_id}/credentials_ldap -> CredentialsLDAP + /// + /// CredentialsLDAP LDAP Credential (application/json) /// /// Id of user /// Requested fields. - public async Task> user_credentials_saml( + public async Task> user_credentials_ldap( string user_id, string? fields = null, ITransportSettings? options = null) { user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_saml", new Values { + return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_ldap", new Values { { "fields", fields }},null,options); } - /// ### Saml authentication login information for the specified user. + /// ### LDAP login information for the specified user. /// - /// DELETE /users/{user_id}/credentials_saml -> string + /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + /// + /// DELETE /users/{user_id}/credentials_ldap -> string /// /// string Successfully deleted. (application/json) /// /// Id of user - public async Task> delete_user_credentials_saml( + public async Task> delete_user_credentials_ldap( string user_id, ITransportSettings? options = null) { user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_saml", null,null,options); + return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_ldap", null,null,options); } /// ### OpenID Connect (OIDC) authentication login information for the specified user. @@ -11199,43 +11568,6 @@ public async Task> all_user_credentia { "fields", fields }},null,options); } - /// ### Looker Openid login information for the specified user. Used by Looker Analysts. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid - /// - /// CredentialsLookerOpenid Looker OpenId Credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> user_credentials_looker_openid( - string user_id, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Get, $"/users/{user_id}/credentials_looker_openid", new Values { - { "fields", fields }},null,options); - } - - /// ### Looker Openid login information for the specified user. Used by Looker Analysts. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// DELETE /users/{user_id}/credentials_looker_openid -> string - /// - /// string Successfully deleted. (application/json) - /// - /// Id of user - public async Task> delete_user_credentials_looker_openid( - string user_id, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/credentials_looker_openid", null,null,options); - } - /// ### Web login session for the specified user. /// /// GET /users/{user_id}/sessions/{session_id} -> Session @@ -11293,37 +11625,6 @@ public async Task> all_user_sessions( { "fields", fields }},null,options); } - /// ### Create a password reset token. - /// This will create a cryptographically secure random password reset token for the user. - /// If the user already has a password reset token then this invalidates the old token and creates a new one. - /// The token is expressed as the 'password_reset_url' of the user's email/password credential object. - /// This takes an optional 'expires' param to indicate if the new token should be an expiring token. - /// Tokens that expire are typically used for self-service password resets for existing users. - /// Invitation emails for new users typically are not set to expire. - /// The expire period is always 60 minutes when expires is enabled. - /// This method can be called with an empty body. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail - /// - /// CredentialsEmail email/password credential (application/json) - /// - /// Id of user - /// Expiring token. - /// Requested fields. - public async Task> create_user_credentials_email_password_reset( - string user_id, - bool? expires = null, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_email/password_reset", new Values { - { "expires", expires }, - { "fields", fields }},null,options); - } - /// ### Get information about roles of a given user /// /// GET /users/{user_id}/roles -> Role[] @@ -11450,32 +11751,6 @@ public async Task> delete_user_attribute_user_val return await AuthRequest(HttpMethod.Delete, $"/users/{user_id}/attribute_values/{user_attribute_id}", null,null,options); } - /// ### Send a password reset token. - /// This will send a password reset email to the user. If a password reset token does not already exist - /// for this user, it will create one and then send it. - /// If the user has not yet set up their account, it will send a setup email to the user. - /// The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - /// Password reset URLs will expire in 60 minutes. - /// This method can be called with an empty body. - /// - /// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - /// - /// POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail - /// - /// CredentialsEmail email/password credential (application/json) - /// - /// Id of user - /// Requested fields. - public async Task> send_user_credentials_email_password_reset( - string user_id, - string? fields = null, - ITransportSettings? options = null) -{ - user_id = SdkUtils.EncodeParam(user_id); - return await AuthRequest(HttpMethod.Post, $"/users/{user_id}/credentials_email/send_password_reset", new Values { - { "fields", fields }},null,options); - } - /// ### Change a disabled user's email addresses /// /// Allows the admin to change the email addresses for all the user's diff --git a/csharp/sdk/4.0/models.cs b/csharp/sdk/4.0/models.cs index 4a9b4de28..d7f5ec4f3 100644 --- a/csharp/sdk/4.0/models.cs +++ b/csharp/sdk/4.0/models.cs @@ -21,7 +21,7 @@ /// SOFTWARE. /// -/// 461 API models: 363 Spec, 0 Request, 72 Write, 26 Enum +/// 442 API models: 343 Spec, 0 Request, 73 Write, 26 Enum #nullable enable using System; @@ -95,6 +95,20 @@ public class Agent : SdkModel /// Studio Agent ID (if this agent was migrated) (read-only) public string? studio_agent_id { get; set; } = null; public WorkflowParams? workflow_params { get; set; } + /// Whether the agent is defined in LookML (read-only) + public bool? is_lookml { get; set; } = null; + /// LookML Agent ID (read-only) + public string? lookml_agent_id { get; set; } = null; + /// URI to edit the LookML definition of this agent (read-only) + public string? lookml_edit_uri { get; set; } = null; +} + +public class AgentLookml : SdkModel +{ + /// Id of Agent (read-only) + public string? agent_id { get; set; } = null; + /// lookml of UDD Agent (read-only) + public string? lookml { get; set; } = null; } public class Alert : SdkModel @@ -375,64 +389,6 @@ public class ArtifactUsage : SdkModel public long usage { get; set; } } -public class AssertValidatorErrorItem : SdkModel -{ - public AssertValidatorTestError? assert_error { get; set; } - public GenericError? generic_error { get; set; } -} - -public class AssertValidatorResult : SdkModel -{ - /// Name of the validator (assert) (read-only) - public string? name { get; set; } = null; - /// Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - public string? status { get; set; } = null; - /// Results of the validation (read-only) - public AssertValidatorTestedExplore[]? results { get; set; } = null; -} - -public class AssertValidatorTestedExplore : SdkModel -{ - /// Total number of failed data tests (read-only) - public long? error_count { get; set; } = null; - /// Details of data tests that failed validation (read-only) - public AssertValidatorErrorItem[]? errors { get; set; } = null; - /// Total number of successful data tests (read-only) - public string? success_count { get; set; } = null; - /// Details of data tests that passed validation (read-only) - public AssertValidatorTestSuccess[]? successes { get; set; } = null; -} - -public class AssertValidatorTestError : SdkModel -{ - /// LookML model that contains the data test (read-only) - public string? model { get; set; } = null; - /// LookML Explore that is used as the explore_source for the data test (read-only) - public string? explore { get; set; } = null; - /// Name of the data test (read-only) - public string? test_name { get; set; } = null; - /// URL to the Explore (read-only) - public string? explore_url { get; set; } = null; - /// URL to the LookML file where the data test is defined (read-only) - public string? lookml_url { get; set; } = null; - /// Message returned by the data test (read-only) - public string? message { get; set; } = null; -} - -public class AssertValidatorTestSuccess : SdkModel -{ - /// LookML model that contains the data test (read-only) - public string? model { get; set; } = null; - /// LookML Explore that is used as the explore_source for the data test (read-only) - public string? explore { get; set; } = null; - /// Name of the data test (read-only) - public string? test_name { get; set; } = null; - /// URL to the Explore (read-only) - public string? explore_url { get; set; } = null; - /// URL to the LookML file where the data test is defined (read-only) - public string? lookml_url { get; set; } = null; -} - public class AsyncDeployResponse : SdkModel { /// Status of the async deploy request (e.g., 'queued') (read-only) @@ -734,18 +690,6 @@ public class CIAssertValidatorTestSuccess : SdkModel public string? lookml_url { get; set; } = null; } -public class CIChangeRequest : SdkModel -{ - /// Numeric identifier of the change request (read-only) - public long? change_request_number { get; set; } = null; - /// URL of the change request (read-only) - public string? change_request_url { get; set; } = null; - /// Name of the change request (read-only) - public string? change_request_name { get; set; } = null; - /// For PR-triggered CI runs, the URL to the change request commit that triggered the run. (read-only) - public string? change_request_commits_url { get; set; } = null; -} - public class CIContentValidatorContentError : SdkModel { /// A URI reference that identifies the problem type @@ -826,18 +770,6 @@ public class CIGenericError : SdkModel public string? instance { get; set; } = null; } -public class CIGitState : SdkModel -{ - /// Git branch that the CI run validates (read-only) - public string? branch { get; set; } = null; - /// Git repository that contains the Git branch being validated (read-only) - public string? repository { get; set; } = null; - /// Git commit that the CI run validates (read-only) - public string? commit_ref { get; set; } = null; - /// For incremental runs, the Git branch that the CI run compares against during validation (read-only) - public string? target { get; set; } = null; -} - public class CILookMLValidatorError : SdkModel { /// A URI reference that identifies the problem type @@ -931,6 +863,12 @@ public class CIRun : SdkModel public string? git_status_url { get; set; } = null; /// Git target URL of the CI run public string? git_target_url { get; set; } = null; + /// Git branch name in dbt Cloud + public string? dbt_cloud_git_branch_name { get; set; } = null; + /// Git commit ref in dbt Cloud + public string? dbt_cloud_git_commit_ref { get; set; } = null; + /// Git repository name in dbt Cloud + public string? dbt_cloud_git_repository_name { get; set; } = null; /// Time and date that the CI run was created (read-only) public DateTime? created_at { get; set; } = null; /// Time and date that the CI run was started (read-only) @@ -949,6 +887,8 @@ public class CIRun : SdkModel public string? run_url { get; set; } = null; /// User attributes for the CI run (read-only) public CIRunUserAttribute[]? user_attributes { get; set; } = null; + /// Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run (read-only) + public StringDictionary? project_imports { get; set; } = null; } public class CIRunResult : SdkModel @@ -961,6 +901,8 @@ public class CIRunResult : SdkModel public CIGenericError? content_error { get; set; } public CILookMLValidatorResult? lookml_result { get; set; } public CIGenericError? lookml_error { get; set; } + public CIStyleValidatorResult? style_result { get; set; } + public CIGenericError? style_error { get; set; } public CIGenericError? generic_error { get; set; } } @@ -974,18 +916,6 @@ public class CIRunUserAttribute : SdkModel public string? value { get; set; } = null; } -public class CIScheduleTrigger : SdkModel -{ - /// Whether the CI run schedule is active (read-only) - public bool? enabled { get; set; } = null; - /// For scheduled runs, day of the week that the CI run is scheduled (read-only) - public string? day { get; set; } = null; - /// For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled (read-only) - public string? hour { get; set; } = null; - /// For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly) (read-only) - public string? frequency { get; set; } = null; -} - public class CISqlValidatorError : SdkModel { /// A URI reference that identifies the problem type @@ -1048,6 +978,74 @@ public class CISqlValidatorTestedExplore : SdkModel public CISqlValidatorErrorItem[]? errors { get; set; } = null; } +public class CIStyleValidatorError : SdkModel +{ + /// A URI reference that identifies the problem type + public string? type { get; set; } = null; + /// Overview of the error + public string? title { get; set; } = null; + /// Detail of the error + public string? detail { get; set; } = null; + /// The HTTP status code for the problem + public string? status { get; set; } = null; + /// URI reference that identifies the specific occurrence of the problem + public string? instance { get; set; } = null; + /// LookML model that contains the error + public string? model { get; set; } = null; + /// LookML Explore that contains the error + public string? explore { get; set; } = null; + /// LookML field that caused the error + public string? field_name { get; set; } = null; + /// Message returned by the style validator + public string? message { get; set; } = null; + /// Severity of the error (warning, error, fatal, info, success) + public string? severity { get; set; } = null; + /// Line number of the error in the LookML file + public long? line_number { get; set; } = null; + /// Character offset of the error in the LookML file + public long? character { get; set; } = null; + /// URL to the LookML that caused the error + public string? lookml_url { get; set; } = null; + /// IDE folder path to the LookML file that caused the error + public string? file_path { get; set; } = null; + /// Name of the style rule + public string? rule_name { get; set; } = null; + /// Type of LookML entity evaluated + public string? entity_type { get; set; } = null; + /// Name of LookML entity evaluated + public string? entity_name { get; set; } = null; + /// Whether the error was newly introduced + public bool? is_incremental { get; set; } = null; + /// Deterministic fingerprint of the violation + public string? error_id { get; set; } = null; + /// URL to documentation for the style rule + public string? documentation_url { get; set; } = null; + /// LookML source code snippet lines surrounding the error + public string[]? context { get; set; } = null; + /// Line number where the context code snippet begins + public long? context_line_number { get; set; } = null; +} + +public class CIStyleValidatorErrorItem : SdkModel +{ + public CIStyleValidatorError? style_error { get; set; } + public CIGenericError? generic_error { get; set; } +} + +public class CIStyleValidatorResult : SdkModel +{ + /// Name of the validator (style) + public string? name { get; set; } = null; + /// Whether the validation was incremental + public bool? incremental { get; set; } = null; + /// Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) + public string? status { get; set; } = null; + /// Total number of failed style validations + public long? error_count { get; set; } = null; + /// Details of the LookML that failed style validation + public CIStyleValidatorErrorItem[]? errors { get; set; } = null; +} + public class ColorCollection : SdkModel { /// Unique Id (read-only) @@ -1236,6 +1234,8 @@ public class ContentSearch : SdkModel public string? certification_status { get; set; } = null; /// Name of the parent folder of the content (read-only) public string? parent_folder_name { get; set; } = null; + /// Name of the parent project of the content (read-only) + public string? parent_project_name { get; set; } = null; } public class ContentSummary : SdkModel @@ -1457,38 +1457,6 @@ public class ContentValidationScheduledPlan : SdkModel public string? id { get; set; } = null; } -public class ContentValidatorContentError : SdkModel -{ - /// A URI reference that identifies the problem type (read-only) - public string? type { get; set; } = null; - /// Overview of the error (read-only) - public string? title { get; set; } = null; - /// Detail of the error (read-only) - public string? detail { get; set; } = null; - /// The HTTP status code for the problem (read-only) - public string? status { get; set; } = null; - /// URI reference that identifies the specific occurrence of the problem (read-only) - public string? instance { get; set; } = null; - /// LookML model that contains the error (read-only) - public string? model { get; set; } = null; - /// LookML Explore that contains the error (read-only) - public string? explore { get; set; } = null; - /// LookML field that caused the error (read-only) - public string? field_name { get; set; } = null; - /// Type of the content (dashboard, look) (read-only) - public string? content_type { get; set; } = null; - /// Folder of the content (read-only) - public string? folder { get; set; } = null; - /// URL of the content (read-only) - public string? url { get; set; } = null; - /// Type of the tile (dashboard_element, dashboard_filter) (read-only) - public string? tile_type { get; set; } = null; - /// Title of the tile (read-only) - public string? tile_title { get; set; } = null; - /// Message returned by the content validator (read-only) - public string? message { get; set; } = null; -} - public class ContentValidatorError : SdkModel { public ContentValidationLook? look { get; set; } @@ -1505,32 +1473,6 @@ public class ContentValidatorError : SdkModel public string? id { get; set; } = null; } -public class ContentValidatorErrorItem : SdkModel -{ - public ContentValidatorContentError? content_error { get; set; } - public GenericError? generic_error { get; set; } -} - -public class ContentValidatorResult : SdkModel -{ - /// Name of the validator (content) (read-only) - public string? name { get; set; } = null; - /// Whether the validation was incremental (read-only) - public bool? incremental { get; set; } = null; - /// Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - public string? status { get; set; } = null; - /// Results of the content validation (read-only) - public ContentValidatorTestedExplore[]? result { get; set; } = null; -} - -public class ContentValidatorTestedExplore : SdkModel -{ - /// Total number of failed content validations (read-only) - public long? error_count { get; set; } = null; - /// Details of the content that failed validation (read-only) - public ContentValidatorErrorItem[]? errors { get; set; } = null; -} - public class ContentView : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -1563,6 +1505,10 @@ public class Context : SdkModel { /// Agent instructions public string? instructions { get; set; } = null; + /// Show analytical details in preview + public bool? show_analytical_details { get; set; } = null; + /// Show debug info in preview + public bool? show_debug { get; set; } = null; } public class ContinuousPalette : SdkModel @@ -1642,24 +1588,6 @@ public class CostEstimate : SdkModel public string? message { get; set; } = null; } -public class CreateCIRunRequest : SdkModel -{ - /// ID of the CI suite - public string? suite_id { get; set; } = null; - /// Branch that the CI run should validate. Omit to test production. - public string? branch { get; set; } = null; - /// Commit that the CI run should validate. Omit to test production. - public string? commit { get; set; } = null; -} - -public class CreateCIRunResponse : SdkModel -{ - /// ID of the CI run (read-only) - public string? run_id { get; set; } = null; - /// Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - public string? status { get; set; } = null; -} - public class CreateContinuousIntegrationRunRequest : SdkModel { /// The suite ID. @@ -1670,6 +1598,8 @@ public class CreateContinuousIntegrationRunRequest : SdkModel public string? commit { get; set; } = null; /// User attributes to override for the CI run. public UserAttributeOverride[]? user_attributes { get; set; } = null; + /// Map of upstream project names to commit SHAs or git configurations to pin for the CI run. + public StringDictionary? project_imports { get; set; } = null; } /// WARNING: no writeable properties found for POST, PUT, or PATCH @@ -2160,6 +2090,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; + /// The layout granularity to apply to this dashboard (ie: default or granular) + public string? layout_granularity { 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; } @@ -2191,6 +2123,22 @@ public class DashboardAppearance : SdkModel public string? key_color { get; set; } = null; /// Whether to modernize visualizations on this dashboard public bool? modern_vis2026 { get; set; } = null; + /// Toggle to show dashboard header. Defaults to true. + public bool? show_dashboard_header { get; set; } = null; + /// Toggle to show dashboard title. Defaults to true. + public bool? show_title { get; set; } = null; + /// Toggle to show filters bar. Defaults to true. + public bool? show_filters_bar { get; set; } = null; + /// Toggle to show filters toggle button. Defaults to true. + public bool? show_filters_toggle { get; set; } = null; + /// Toggle to show reload data icon/button. Defaults to true. + public bool? show_reload_data_icon { get; set; } = null; + /// Toggle to show dashboard actions menu. Defaults to true. + public bool? show_dashboard_menu { get; set; } = null; + /// Toggle to show last updated indicator. Defaults to true. + public bool? show_last_updated_indicator { get; set; } = null; + /// Background image opacity (0.0 to 1.0) + public float? background_opacity { get; set; } = null; } public class DashboardBase : SdkModel @@ -2242,6 +2190,8 @@ public class DashboardDownloadSettings : SdkModel public long? rows_limit { get; set; } = null; /// Columns limit public long? columns_limit { get; set; } = null; + /// Append Excel metadata + public bool? append_excel_metadata { get; set; } = null; } public class DashboardElement : SdkModel @@ -2256,6 +2206,8 @@ public class DashboardElement : SdkModel public string? dashboard_id { get; set; } = null; /// Id of Dashboard Layout public string? dashboard_layout_id { get; set; } = null; + /// ID of the group to place this element under in the layout (read-only) + public string? group_id { get; set; } = null; /// Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only). (read-only) public string? edit_uri { get; set; } = null; /// Unique Id (read-only) @@ -2310,6 +2262,10 @@ public class DashboardElement : SdkModel /// Custom ARIA description text public string? aria_description { get; set; } = null; public Certification? certification_metadata { get; set; } + /// ID of Dashboard Image + public string? image_id { get; set; } = null; + /// Images (read-only) + public Image[]? images { get; set; } = null; } public class DashboardFilter : SdkModel @@ -2414,6 +2370,8 @@ public class DashboardLayoutComponent : SdkModel public long? granular_width { get; set; } = null; /// Height (granular layout) public long? granular_height { get; set; } = null; + /// Id of parent Dashboard Layout Component group + public string? group_id { get; set; } = null; } public class DashboardLookml : SdkModel @@ -2591,6 +2549,8 @@ public class DBConnection : SdkModel public Snippet[]? snippets { get; set; } = null; /// True if PDTs are enabled on this connection (read-only) public bool? pdts_enabled { get; set; } = null; + /// ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + public string? project_id { get; set; } = null; /// Requested JDBC driver version name public string? named_driver_version_requested { get; set; } = null; /// Resolved JDBC driver version (read-only) @@ -2605,6 +2565,8 @@ public class DBConnection : SdkModel public string? password { get; set; } = null; /// Whether or not the password is present (read-only) public bool? has_password { get; set; } = null; + /// Whether Service Account OAuth authentication is enabled for this connection + public bool? service_account_auth_enabled { get; set; } = null; /// Whether the connection uses OAuth for authentication. (read-only) public bool? uses_oauth { get; set; } = null; /// Whether the connection uses key-pair for authentication. @@ -2615,6 +2577,8 @@ public class DBConnection : SdkModel public bool? uses_service_auth { get; set; } = null; /// (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). public string? certificate { get; set; } = null; + /// The name of the user attribute containing the connection certificate. + public string? user_attr_certificate { get; set; } = null; /// (Write-Only) Certificate keyfile type - .json, .p8 or .p12 public string? file_type { get; set; } = null; /// Database name @@ -2723,6 +2687,8 @@ public class DBConnectionBase : SdkModel public Snippet[]? snippets { get; set; } = null; /// True if PDTs are enabled on this connection (read-only) public bool? pdts_enabled { get; set; } = null; + /// ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + public string? project_id { get; set; } = null; } public class DBConnectionOverride : SdkModel @@ -2931,6 +2897,8 @@ public class DialectInfoOptions : SdkModel public bool? cost_estimate { get; set; } = null; /// Disable this connection. This will prevent any queries from running on this connection. (read-only) public bool? disabled { get; set; } = null; + /// Disable query holding for this connection. (read-only) + public bool? query_holding_disabled { get; set; } = null; /// Can disable query context comments (read-only) public bool? disable_context_comment { get; set; } = null; /// Host is required (read-only) @@ -2967,6 +2935,8 @@ public class DialectInfoOptions : SdkModel public bool? username_required { get; set; } = null; /// Has support for connection pooling (read-only) public bool? supports_connection_pooling { get; set; } = null; + /// Has user attribute certificate support (read-only) + public bool? user_attribute_certificate { get; set; } = null; } public class DigestEmails : SdkModel @@ -3017,6 +2987,8 @@ public class EmbedConfig : SdkModel public bool? embed_content_navigation { get; set; } = null; /// Is embed content management enabled for this Looker public bool? embed_content_management { get; set; } = null; + /// Default net new visualizations in embedded context to Modern theme (read-only) + public bool? embed_vis_modernization_default { get; set; } = null; /// 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. public bool? strict_sameorigin_for_login { get; set; } = null; /// When true, filters are enabled on embedded Looks @@ -3349,20 +3321,6 @@ public enum Format vector_tile_region } -public class GenericError : SdkModel -{ - /// A URI reference that identifies the problem type (read-only) - public string? type { get; set; } = null; - /// Overview of the error (read-only) - public string? title { get; set; } = null; - /// Detail of the error (read-only) - public string? detail { get; set; } = null; - /// The HTTP status code for the problem (read-only) - public string? status { get; set; } = null; - /// URI reference that identifies the specific occurrence of the problem (read-only) - public string? instance { get; set; } = null; -} - public class GitBranch : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -3423,54 +3381,6 @@ public class GitConnectionTestResult : SdkModel public string? status { get; set; } = null; } -public class GitDiagnosticIssue : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique ID of the diagnostic issue. (read-only) - public string? id { get; set; } = null; - /// Parent diagnostic report ID. (read-only) - public string? report_id { get; set; } = null; - /// Target Looker Project ID. (read-only) - public string? project_id { get; set; } = null; - /// Environment scope (developer/production). (read-only) - public string? project_type { get; set; } = null; - /// Git diagnostic issue category. (read-only) - public string? issue_type { get; set; } = null; - /// Version schema. (read-only) - public string? issue_version { get; set; } = null; - /// Current execution status. (read-only) - public string? state { get; set; } = null; - /// Creation timestamp. (read-only) - public DateTime? created_at { get; set; } = null; - /// Last update timestamp. (read-only) - public DateTime? updated_at { get; set; } = null; -} - -public class GitDiagnosticReport : SdkModel -{ - /// Operations the current user is able to perform on this object (read-only) - public StringDictionary? can { get; set; } = null; - /// Unique ID of the git diagnostic report. (read-only) - public string? id { get; set; } = null; - /// Target Looker Project ID. (read-only) - public string? project_id { get; set; } = null; - /// ID of the user initiating the diagnosis. (read-only) - public string? user_id { get; set; } = null; - /// Raw lifecycle state. (read-only) - public string? state { get; set; } = null; - /// Status derived from state. (read-only) - public string? status { get; set; } = null; - /// Creation time. (read-only) - public DateTime? created_at { get; set; } = null; - /// Update time. (read-only) - public DateTime? updated_at { get; set; } = null; - /// Project structure type. - public string? project_type { get; set; } = null; - /// Diagnostic issues associated with this report. (read-only) - public GitDiagnosticIssue[]? issues { get; set; } = null; -} - public class GitStatus : SdkModel { /// Git action: add, delete, etc (read-only) @@ -3495,7 +3405,7 @@ public class GoldenQuery : SdkModel 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 + /// Whether this golden question should be utilized by the agent (read-only) 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; @@ -3519,6 +3429,10 @@ public class GoldenQuery : SdkModel public string? limit { get; set; } = null; /// Client ID of the associated Looker Query (read-only) public string? client_id { get; set; } = null; + /// Pivots of the associated Looker Query (read-only) + public string[]? pivots { get; set; } = null; + /// Dynamic fields of the associated Looker Query (read-only) + public string? dynamic_fields { get; set; } = null; } public class Group : SdkModel @@ -3697,6 +3611,26 @@ public class HomepageSection : SdkModel public string[]? visible_item_order { get; set; } = null; } +public class Image : SdkModel +{ + /// Operations the current user is able to perform on this object (read-only) + public StringDictionary? can { get; set; } = null; + /// Unique Id (read-only) + public string? id { get; set; } = null; + /// Original file name (read-only) + public string? file_name { get; set; } = null; + /// Image format (e.g. PNG, JPG) (read-only) + public string? format { get; set; } = null; + /// Accessibility label + public string? label { get; set; } = null; + /// URL of the image (read-only) + public string? url { get; set; } = null; + /// Creation timestamp (read-only) + public DateTime? created_at { get; set; } = null; + /// Update timestamp (read-only) + public DateTime? updated_at { get; set; } = null; +} + public class ImportedProject : SdkModel { /// Dependency name (read-only) @@ -4820,54 +4754,6 @@ public class LookmlTestResult : SdkModel public bool? success { get; set; } = null; } -public class LookMLValidatorError : SdkModel -{ - /// A URI reference that identifies the problem type (read-only) - public string? type { get; set; } = null; - /// Overview of the error (read-only) - public string? title { get; set; } = null; - /// Detail of the error (read-only) - public string? detail { get; set; } = null; - /// The HTTP status code for the problem (read-only) - public string? status { get; set; } = null; - /// URI reference that identifies the specific occurrence of the problem (read-only) - public string? instance { get; set; } = null; - /// LookML model that contains the error (read-only) - public string? model { get; set; } = null; - /// LookML Explore that contains the error (read-only) - public string? explore { get; set; } = null; - /// LookML field that caused the error (read-only) - public string? field_name { get; set; } = null; - /// Message returned by the LookML validator (read-only) - public string? message { get; set; } = null; - /// Severity of the error (warning, error, fatal, info, success) (read-only) - public string? severity { get; set; } = null; - /// Line number of the error in the LookML file (read-only) - public string? line_number { get; set; } = null; - /// URL to the LookML that caused the error (read-only) - public string? lookml_url { get; set; } = null; - /// IDE folder path to the LookML file that caused the error (read-only) - public string? file_path { get; set; } = null; -} - -public class LookMLValidatorErrorItem : SdkModel -{ - public LookMLValidatorError? lookml_error { get; set; } - public GenericError? generic_error { get; set; } -} - -public class LookMLValidatorResult : SdkModel -{ - /// Name of the validator (lookml) (read-only) - public string? name { get; set; } = null; - /// Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - public string? status { get; set; } = null; - /// Total number of failed LookML validations (read-only) - public long? error_count { get; set; } = null; - /// Details of the LookML that failed validation (read-only) - public LookMLValidatorErrorItem[]? errors { get; set; } = null; -} - public class LookModel : SdkModel { /// Model Id (read-only) @@ -5066,6 +4952,7 @@ public class McpTools : SdkModel public McpToolSetting? get_dashboards { get; set; } public McpToolSetting? get_dimensions { get; set; } public McpToolSetting? get_explores { get; set; } + public McpToolSetting? get_field_value_suggestions { get; set; } public McpToolSetting? get_filters { get; set; } public McpToolSetting? get_looks { get; set; } public McpToolSetting? get_measures { get; set; } @@ -5092,6 +4979,8 @@ 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? render_visualization { get; set; } + public McpToolSetting? render_dashboard { get; set; } } public class McpToolSetting : SdkModel @@ -5291,8 +5180,10 @@ public class OauthClientApp : SdkModel public StringDictionary? can { get; set; } = null; /// The globally unique id of this application (read-only) public string? client_guid { get; set; } = null; - /// The uri with which this application will receive an auth code by browser redirect. + /// (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) public string? redirect_uri { get; set; } = null; + /// The authorized uris for which this application will receive an auth code by browser redirect. + public string[]? redirect_uris { get; set; } = null; /// The application's display name public string? display_name { get; set; } = null; /// A description of the application that will be displayed to users @@ -5597,6 +5488,112 @@ public class Project : SdkModel public string? dependency_status { get; set; } = null; } +public class ProjectCISuite : SdkModel +{ + /// Operations the current user is able to perform on this object (read-only) + public StringDictionary? can { get; set; } = null; + /// ID of the CI suite (read-only) + public string? id { get; set; } = null; + /// Name of the CI suite + public string? name { get; set; } = null; + /// ID of the LookML project (read-only) + public string? project_id { get; set; } = null; + /// Time and date that the CI suite was created (read-only) + public DateTime? created_at { get; set; } = null; + /// Time and date that the CI suite was updated (read-only) + public DateTime? updated_at { get; set; } = null; + /// Whether the CI suite schedule trigger is active + public bool? schedule_trigger_is_enabled { get; set; } = null; + /// Crontab that the CI suite is scheduled to run + public string? schedule_trigger_crontab { get; set; } = null; + /// Timezone for the CI suite schedule + public string? schedule_trigger_timezone { get; set; } = null; + /// Whether alerting is enabled for the CI suite + public bool? alerting_enabled { get; set; } = null; + /// Email addresses to send alerts to + public string[]? alert_email_addresses { get; set; } = null; + /// Whether to alert on failed status + public bool? alert_on_failed_status { get; set; } = null; + /// Whether to alert on error status + public bool? alert_on_error_status { get; set; } = null; + /// Whether to alert on passed status + public bool? alert_on_passed_status { get; set; } = null; + /// Whether to alert on cancelled status + public bool? alert_on_cancelled_status { get; set; } = null; + /// Whether the CI suite change request trigger is active + public bool? change_request_trigger_is_enabled { get; set; } = null; + /// ID of the hook that triggers the CI Suite to run (read-only) + public string? change_request_trigger_hook_id { get; set; } = null; + /// Git branch that should be compared against when the CI suite is run, used when the run is incremental + public string? change_request_trigger_target_branch { get; set; } = null; + /// GUID of the CI suite (read-only) + public string? guid { get; set; } = null; + /// Whether the CI suite dbt Cloud trigger is active + public bool? dbt_cloud_trigger_is_enabled { get; set; } = null; + /// Job ID of the dbt Cloud job + public long? dbt_cloud_trigger_job_id { get; set; } = null; + /// User Attribute ID used for schema substitution + public string? dbt_cloud_trigger_user_attribute_id { get; set; } = null; + /// Webhook ID registered in dbt Cloud (read-only) + public string? dbt_cloud_webhook_id { get; set; } = null; + /// (Write-Only) Webhook secret used to authenticate incoming webhook requests + public string? webhook_secret { get; set; } = null; + /// Whether the CI suite has a webhook secret configured (read-only) + public bool? has_webhook_secret { get; set; } = null; + /// Whether assert validation is enabled for the CI suite + public bool? assert_validator_config_is_enabled { get; set; } = null; + /// Number of tests that should run concurrently during assert validation + public long? assert_validator_config_concurrency { get; set; } = null; + /// Explores that assert validation should run for (model_name/explore_name) + public string[]? assert_validator_config_selectors { get; set; } = null; + /// Explores that should be excluded from assert validation (model_name/explore_name) + public string[]? assert_validator_config_exclusions { get; set; } = null; + /// Whether content validation is enabled for the CI suite + public bool? content_validator_config_is_enabled { get; set; } = null; + /// Whether content validation should ignore personal folders + public bool? content_validator_config_exclude_personal { get; set; } = null; + /// Whether content should validate incrementally + public bool? content_validator_config_incremental { get; set; } = null; + /// Folders whose content should not be validated + public string[]? content_validator_config_exclude_folders { get; set; } = null; + /// Folders whose content should be validated + public string[]? content_validator_config_include_folders { get; set; } = null; + /// Explores whose content should be validated (model_name/explore_name) + public string[]? content_validator_config_selectors { get; set; } = null; + /// Explores that should be excluded from content validation (model_name/explore_name) + public string[]? content_validator_config_exclusions { get; set; } = null; + /// Whether LookML validation is enabled for the CI suite + public bool? lookml_validator_config_is_enabled { get; set; } = null; + /// Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + public string? lookml_validator_config_severity { get; set; } = null; + /// Amount of time after which LookML Validation should stop running + public long? lookml_validator_config_timeout { get; set; } = null; + /// Whether LookML Style Validator is enabled for the CI suite + public bool? style_validator_config_is_enabled { get; set; } = null; + /// Whether LookML Style Validator should run incrementally on changed LookML files only + public bool? style_validator_config_incremental { get; set; } = null; + /// Whether SQL validation is enabled for the CI suite + public bool? sql_validator_config_is_enabled { get; set; } = null; + /// Whether SQL validation should stop after the first failure + public bool? sql_validator_config_fail_fast { get; set; } = null; + /// Whether SQL should validate incrementally + public bool? sql_validator_config_incremental { get; set; } = null; + /// Whether SQL validation should ignore hidden fields + public bool? sql_validator_config_ignore_hidden { get; set; } = null; + /// Number of queries that should run concurrently during SQL validation + public long? sql_validator_config_query_concurrency { get; set; } = null; + /// The max number of rows that should be returned for each query + public long? sql_validator_config_chunk_size { get; set; } = null; + /// Explores whose sql should be validated (model_name/explore_name) + public string[]? sql_validator_config_selectors { get; set; } = null; + /// Explores that should be excluded from SQL validation (model_name/explore_name) + public string[]? sql_validator_config_exclusions { get; set; } = null; + /// Whether the CI suite upstream project imports trigger is active + public bool? upstream_trigger_is_enabled { get; set; } = null; + /// Names of upstream projects subscribed for pull request triggers + public string[]? upstream_projects { get; set; } = null; +} + public class ProjectError : SdkModel { /// A stable token that uniquely identifies this class of error, ignoring parameter values. Error message text may vary due to parameters or localization, but error codes do not. For example, a "File not found" error will have the same error code regardless of the filename in question or the user's display language (read-only) @@ -5646,11 +5643,6 @@ public class ProjectFile : SdkModel public GitStatus? git_status { get; set; } } -public class ProjectRun : SdkModel -{ - public Run? run { get; set; } -} - public class ProjectValidation : SdkModel { /// A list of project errors (read-only) @@ -6032,38 +6024,6 @@ public class RoleSearch : SdkModel public string? users_url { get; set; } = null; } -public class Run : SdkModel -{ - /// ID of the CI run (read-only) - public string? run_id { get; set; } = null; - /// Time and date that the CI run was initiated (read-only) - public DateTime? created_at { get; set; } = null; - /// Time and date that the CI run began executing (read-only) - public DateTime? started_at { get; set; } = null; - /// Time and date that the CI run completed (read-only) - public DateTime? finished_at { get; set; } = null; - /// Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite (read-only) - public string? status_url { get; set; } = null; - /// Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - public string? status { get; set; } = null; - /// Git service for CI run (e.g. GitHub) (read-only) - public string? git_service { get; set; } = null; - public CIGitState? git_state { get; set; } - public RunResult? result { get; set; } - public CIScheduleTrigger? schedule { get; set; } - /// Git branch that the CI run compares against during validation, used for incremental runs (read-only) - public string? target_branch { get; set; } = null; - /// Name of the CI suite (read-only) - public string? title { get; set; } = null; - /// Trigger for CI run (unknown, manual, schedule, change_request) (read-only) - public string? trigger { get; set; } = null; - public CIChangeRequest? change_request { get; set; } - /// ID of the CI suite (read-only) - public string? suite_id { get; set; } = null; - /// Username of the user who triggered the CI run, if the CI run was manually triggered (read-only) - public string? username { get; set; } = null; -} - public class RunningQueries : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -6108,19 +6068,6 @@ public class RunningQueries : SdkModel public string? sql_interface_sql { get; set; } = null; } -public class RunResult : SdkModel -{ - public SqlValidatorResult? sql_result { get; set; } - public GenericError? sql_error { get; set; } - public AssertValidatorResult? assert_result { get; set; } - public GenericError? assert_error { get; set; } - public ContentValidatorResult? content_result { get; set; } - public GenericError? content_error { get; set; } - public LookMLValidatorResult? lookml_result { get; set; } - public GenericError? lookml_error { get; set; } - public GenericError? generic_error { get; set; } -} - public class SamlConfig : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -6331,6 +6278,8 @@ public class ScheduledPlan : SdkModel public bool? long_tables { get; set; } = null; /// Whether or not to add page breaks between tabs public bool? pdf_page_breaks { get; set; } = null; + /// Whether or not to include filters context + public bool? include_filters { get; set; } = null; /// IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) public string[]? tab_ids { get; set; } = null; /// The pixel width at which we render the inline table visualizations @@ -6345,11 +6294,15 @@ public class ScheduledPlan : SdkModel public DateTime? updated_at { get; set; } = null; /// Title (read-only) public string? title { get; set; } = null; + /// Title of the underlying content (Dashboard, Look, LookML Dashboard, or Explore) associated with this ScheduledPlan (read-only) + public string? content_title { get; set; } = null; public UserPublic? user { get; set; } /// When the ScheduledPlan will next run (null if running once) (read-only) public DateTime? next_run_at { get; set; } = null; /// When the ScheduledPlan was last run (read-only) public DateTime? last_run_at { get; set; } = null; + /// Status of the last run for this ScheduledPlan (read-only) + public string? last_run_status { get; set; } = null; /// Operations the current user is able to perform on this object (read-only) public StringDictionary? can { get; set; } = null; } @@ -6376,6 +6329,8 @@ public class ScheduledPlanDestination : SdkModel public string? parameters { get; set; } = null; /// (Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password. public string? secret_parameters { get; set; } = null; + /// Whether or not to include filters context + public bool? include_filters { get; set; } = null; /// Optional message to be included in scheduled emails public string? message { get; set; } = null; } @@ -6597,6 +6552,8 @@ public class Setting : SdkModel public string[]? email_domain_allowlist { get; set; } = null; /// (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. public bool? embed_cookieless_v2 { get; set; } = null; + /// Default net new visualizations in embedded context to Modern theme + public bool? embed_vis_modernization_default { get; set; } = null; /// True if embedding is enabled https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise (read-only) public bool? embed_enabled { get; set; } = null; public EmbedConfig? embed_config { get; set; } @@ -6764,68 +6721,6 @@ public class SqlQueryCreate : SdkModel public StringDictionary? vis_config { get; set; } = null; } -public class SqlValidatorError : SdkModel -{ - /// A URI reference that identifies the problem type (read-only) - public string? type { get; set; } = null; - /// Overview of the error (read-only) - public string? title { get; set; } = null; - /// Detail of the error (read-only) - public string? detail { get; set; } = null; - /// The HTTP status code for the problem (read-only) - public string? status { get; set; } = null; - /// URI reference that identifies the specific occurrence of the problem (read-only) - public string? instance { get; set; } = null; - /// LookML model that contains the Explore that failed SQL validation (read-only) - public string? model { get; set; } = null; - /// LookML Explore that failed SQL validation (read-only) - public string? explore { get; set; } = null; - /// Message returned by the SQL validation (read-only) - public string? message { get; set; } = null; - /// URL to the Explore (read-only) - public string? explore_url { get; set; } = null; - /// URL to the LookML that caused the error (read-only) - public string? lookml_url { get; set; } = null; - /// LookML dimension that caused the error (read-only) - public string? dimension { get; set; } = null; - /// Line of the error in the LookML file (read-only) - public string? line_number { get; set; } = null; -} - -public class SqlValidatorErrorItem : SdkModel -{ - public SqlValidatorError? sql_error { get; set; } - public GenericError? generic_error { get; set; } -} - -public class SqlValidatorResult : SdkModel -{ - /// Name of the validator (sql) (read-only) - public string? name { get; set; } = null; - /// Whether the validation was incremental (read-only) - public bool? incremental { get; set; } = null; - /// Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - public string? status { get; set; } = null; - /// The results of tested Explores (read-only) - public SqlValidatorTestedExplore[]? result { get; set; } = null; -} - -public class SqlValidatorTestedExplore : SdkModel -{ - /// LookML model that was tested (read-only) - public string? model { get; set; } = null; - /// LookML Explore that was tested (read-only) - public string? explore { get; set; } = null; - /// Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - public string? status { get; set; } = null; - /// Reason the validation was skipped (read-only) - public string? skip_reason { get; set; } = null; - /// Total number of failed validations (read-only) - public long? error_count { get; set; } = null; - /// Details of the LookML that failed SQL validation (read-only) - public SqlValidatorErrorItem[]? errors { get; set; } = null; -} - public class SshPublicKey : SdkModel { /// The SSH public key created for this instance (read-only) @@ -7040,6 +6935,12 @@ public class ThemeSettings : SdkModel { /// Default background color public string? background_color { get; set; } = null; + /// URL for background image + public string? background_image_url { get; set; } = null; + /// Optional. ID of theme background image. + public string? background_image_id { get; set; } = null; + /// Background image opacity (0.0 to 1.0). + public float? background_opacity { get; set; } = null; /// Base font size for scaling fonts (only supported by legacy dashboards) public string? base_font_size { get; set; } = null; /// Optional. ID of color collection to use with the theme. Use an empty string for none. @@ -7248,7 +7149,7 @@ public class UserAttribute : SdkModel public string name { get; set; } = ""; /// Human-friendly label for user attribute public string label { get; set; } = ""; - /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") public string type { get; set; } = ""; /// Default value for when no value is set on the user public string? default_value { get; set; } = null; @@ -7346,6 +7247,40 @@ public class UserAttributeWithValue : SdkModel public string? hidden_value_domain_whitelist { get; set; } = null; } +public class UserDbConnection : SdkModel +{ + /// Operations the current user is able to perform on this object (read-only) + public StringDictionary? can { get; set; } = null; + /// ID of the connection (read-only) + public string? id { get; set; } = null; + /// Name of the connection (must match virtual namespace pattern) (read-only) + public string? name { get; set; } = null; + /// ID of the user who owns the connection (read-only) + public long? user_id { get; set; } = null; + /// Database dialect name (read-only) + public string? dialect { get; set; } = null; + /// Authentication type (oauth, service_account, password) (read-only) + public string? auth_type { get; set; } = null; + /// Host name/address of server (read-only) + public string? host { get; set; } = null; + /// Port number on server (read-only) + public string? port { get; set; } = null; + /// Database name (read-only) + public string? database { get; set; } = null; + /// Schema name (read-only) + public string? schema { get; set; } = null; + /// Additional JDBC parameters (read-only) + public string? jdbc_additional_params { get; set; } = null; + /// OAuth application ID (if auth_type is oauth) (read-only) + public long? oauth_application_id { get; set; } = null; + /// Whether this connection is enabled + public bool? enabled { get; set; } = null; + /// When the connection was created (read-only) + public DateTime? created_at { get; set; } = null; + /// When the connection was last updated (read-only) + public DateTime? updated_at { get; set; } = null; +} + public class UserEmailOnly : SdkModel { /// Email Address @@ -7515,7 +7450,7 @@ public class Workspace : SdkModel } /// Dynamic writeable type for Agent removes: -/// 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 +/// 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, is_lookml, lookml_agent_id, lookml_edit_uri public class WriteAgent : SdkModel { /// User that created the Agent @@ -7755,7 +7690,7 @@ public class WriteConversation : SdkModel public bool? deleted { get; set; } = null; /// /// Dynamic writeable type for Agent removes: - /// 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 + /// 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, is_lookml, lookml_agent_id, lookml_edit_uri /// public WriteAgent? conversation_agent { get; set; } } @@ -7910,6 +7845,8 @@ public class WriteDashboard : SdkModel /// Title color public string? title_color { get; set; } = null; public DashboardAppearance? appearance { get; set; } + /// The layout granularity to apply to this dashboard (ie: default or granular) + public string? layout_granularity { 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; } @@ -7932,7 +7869,7 @@ public class WriteDashboardBase : SdkModel } /// Dynamic writeable type for DashboardElement removes: -/// can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html +/// can, body_text_as_html, group_id, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html, images public class WriteDashboardElement : SdkModel { /// Text tile body text @@ -7995,6 +7932,8 @@ public class WriteDashboardElement : SdkModel /// ui_status, user_name, updated_at /// public WriteCertification? certification_metadata { get; set; } + /// ID of Dashboard Image + public string? image_id { get; set; } = null; } /// Dynamic writeable type for DashboardFilter removes: @@ -8077,6 +8016,8 @@ public class WriteDashboardLayoutComponent : SdkModel public long? granular_width { get; set; } = null; /// Height (granular layout) public long? granular_height { get; set; } = null; + /// Id of parent Dashboard Layout Component group + public string? group_id { get; set; } = null; } /// Dynamic writeable type for DashboardLookml removes: @@ -8105,6 +8046,8 @@ public class WriteDBConnection : SdkModel { /// Name of the connection. Also used as the unique identifier public string? name { get; set; } = null; + /// ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + public string? project_id { get; set; } = null; /// Requested JDBC driver version name public string? named_driver_version_requested { get; set; } = null; /// Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. @@ -8115,10 +8058,14 @@ public class WriteDBConnection : SdkModel public string? username { get; set; } = null; /// (Write-Only) Password for server authentication public string? password { get; set; } = null; + /// Whether Service Account OAuth authentication is enabled for this connection + public bool? service_account_auth_enabled { get; set; } = null; /// Whether the connection uses key-pair for authentication. public bool? uses_key_pair_auth { get; set; } = null; /// (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). public string? certificate { get; set; } = null; + /// The name of the user attribute containing the connection certificate. + public string? user_attr_certificate { get; set; } = null; /// (Write-Only) Certificate keyfile type - .json, .p8 or .p12 public string? file_type { get; set; } = null; /// Database name @@ -8253,7 +8200,7 @@ public class WriteDBConnectionOverride : SdkModel } /// Dynamic writeable type for EmbedConfig removes: -/// permissions, embed_enabled +/// embed_vis_modernization_default, permissions, embed_enabled public class WriteEmbedConfig : SdkModel { /// List of domains to allow for embedding @@ -8331,24 +8278,14 @@ public class WriteGitBranch : SdkModel public string? @ref { get; set; } = null; } -/// Dynamic writeable type for GitDiagnosticReport removes: -/// can, id, project_id, user_id, state, status, created_at, updated_at, issues -public class WriteGitDiagnosticReport : SdkModel -{ - /// Project structure type. - public string? project_type { 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, explore, model, fields, filters, sorts, limit, client_id +/// can, id, query_id, is_active, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at, explore, model, fields, filters, sorts, limit, client_id, pivots, dynamic_fields 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: @@ -8626,6 +8563,11 @@ public class WriteMcpTools : SdkModel /// Dynamic writeable type for McpToolSetting removes: /// description, category, access_level /// + public WriteMcpToolSetting? get_field_value_suggestions { get; set; } + /// + /// Dynamic writeable type for McpToolSetting removes: + /// description, category, access_level + /// public WriteMcpToolSetting? get_filters { get; set; } /// /// Dynamic writeable type for McpToolSetting removes: @@ -8752,6 +8694,16 @@ 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? render_visualization { get; set; } + /// + /// Dynamic writeable type for McpToolSetting removes: + /// description, category, access_level + /// + public WriteMcpToolSetting? render_dashboard { get; set; } } /// Dynamic writeable type for McpToolSetting removes: @@ -8808,8 +8760,10 @@ public class WriteModelSet : SdkModel /// can, client_guid, tokens_invalid_before, activated_users public class WriteOauthClientApp : SdkModel { - /// The uri with which this application will receive an auth code by browser redirect. + /// (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) public string? redirect_uri { get; set; } = null; + /// The authorized uris for which this application will receive an auth code by browser redirect. + public string[]? redirect_uris { get; set; } = null; /// The application's display name public string? display_name { get; set; } = null; /// A description of the application that will be displayed to users @@ -8976,6 +8930,96 @@ public class WriteProject : SdkModel public string? dependency_status { get; set; } = null; } +/// Dynamic writeable type for ProjectCISuite removes: +/// can, id, project_id, created_at, updated_at, change_request_trigger_hook_id, guid, dbt_cloud_webhook_id, has_webhook_secret +public class WriteProjectCISuite : SdkModel +{ + /// Name of the CI suite + public string? name { get; set; } = null; + /// Whether the CI suite schedule trigger is active + public bool? schedule_trigger_is_enabled { get; set; } = null; + /// Crontab that the CI suite is scheduled to run + public string? schedule_trigger_crontab { get; set; } = null; + /// Timezone for the CI suite schedule + public string? schedule_trigger_timezone { get; set; } = null; + /// Whether alerting is enabled for the CI suite + public bool? alerting_enabled { get; set; } = null; + /// Email addresses to send alerts to + public string[]? alert_email_addresses { get; set; } = null; + /// Whether to alert on failed status + public bool? alert_on_failed_status { get; set; } = null; + /// Whether to alert on error status + public bool? alert_on_error_status { get; set; } = null; + /// Whether to alert on passed status + public bool? alert_on_passed_status { get; set; } = null; + /// Whether to alert on cancelled status + public bool? alert_on_cancelled_status { get; set; } = null; + /// Whether the CI suite change request trigger is active + public bool? change_request_trigger_is_enabled { get; set; } = null; + /// Git branch that should be compared against when the CI suite is run, used when the run is incremental + public string? change_request_trigger_target_branch { get; set; } = null; + /// Whether the CI suite dbt Cloud trigger is active + public bool? dbt_cloud_trigger_is_enabled { get; set; } = null; + /// Job ID of the dbt Cloud job + public long? dbt_cloud_trigger_job_id { get; set; } = null; + /// User Attribute ID used for schema substitution + public string? dbt_cloud_trigger_user_attribute_id { get; set; } = null; + /// (Write-Only) Webhook secret used to authenticate incoming webhook requests + public string? webhook_secret { get; set; } = null; + /// Whether assert validation is enabled for the CI suite + public bool? assert_validator_config_is_enabled { get; set; } = null; + /// Number of tests that should run concurrently during assert validation + public long? assert_validator_config_concurrency { get; set; } = null; + /// Explores that assert validation should run for (model_name/explore_name) + public string[]? assert_validator_config_selectors { get; set; } = null; + /// Explores that should be excluded from assert validation (model_name/explore_name) + public string[]? assert_validator_config_exclusions { get; set; } = null; + /// Whether content validation is enabled for the CI suite + public bool? content_validator_config_is_enabled { get; set; } = null; + /// Whether content validation should ignore personal folders + public bool? content_validator_config_exclude_personal { get; set; } = null; + /// Whether content should validate incrementally + public bool? content_validator_config_incremental { get; set; } = null; + /// Folders whose content should not be validated + public string[]? content_validator_config_exclude_folders { get; set; } = null; + /// Folders whose content should be validated + public string[]? content_validator_config_include_folders { get; set; } = null; + /// Explores whose content should be validated (model_name/explore_name) + public string[]? content_validator_config_selectors { get; set; } = null; + /// Explores that should be excluded from content validation (model_name/explore_name) + public string[]? content_validator_config_exclusions { get; set; } = null; + /// Whether LookML validation is enabled for the CI suite + public bool? lookml_validator_config_is_enabled { get; set; } = null; + /// Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + public string? lookml_validator_config_severity { get; set; } = null; + /// Amount of time after which LookML Validation should stop running + public long? lookml_validator_config_timeout { get; set; } = null; + /// Whether LookML Style Validator is enabled for the CI suite + public bool? style_validator_config_is_enabled { get; set; } = null; + /// Whether LookML Style Validator should run incrementally on changed LookML files only + public bool? style_validator_config_incremental { get; set; } = null; + /// Whether SQL validation is enabled for the CI suite + public bool? sql_validator_config_is_enabled { get; set; } = null; + /// Whether SQL validation should stop after the first failure + public bool? sql_validator_config_fail_fast { get; set; } = null; + /// Whether SQL should validate incrementally + public bool? sql_validator_config_incremental { get; set; } = null; + /// Whether SQL validation should ignore hidden fields + public bool? sql_validator_config_ignore_hidden { get; set; } = null; + /// Number of queries that should run concurrently during SQL validation + public long? sql_validator_config_query_concurrency { get; set; } = null; + /// The max number of rows that should be returned for each query + public long? sql_validator_config_chunk_size { get; set; } = null; + /// Explores whose sql should be validated (model_name/explore_name) + public string[]? sql_validator_config_selectors { get; set; } = null; + /// Explores that should be excluded from SQL validation (model_name/explore_name) + public string[]? sql_validator_config_exclusions { get; set; } = null; + /// Whether the CI suite upstream project imports trigger is active + public bool? upstream_trigger_is_enabled { get; set; } = null; + /// Names of upstream projects subscribed for pull request triggers + public string[]? upstream_projects { get; set; } = null; +} + /// Dynamic writeable type for Query removes: /// can, id, slug, share_url, expanded_share_url, url, has_table_calculations public class WriteQuery : SdkModel @@ -9137,7 +9181,7 @@ public class WriteSamlConfig : SdkModel } /// Dynamic writeable type for ScheduledPlan removes: -/// id, created_at, updated_at, title, user, next_run_at, last_run_at, can +/// id, created_at, updated_at, title, content_title, user, next_run_at, last_run_at, last_run_status, can public class WriteScheduledPlan : SdkModel { /// Name of this scheduled plan @@ -9200,6 +9244,8 @@ public class WriteScheduledPlan : SdkModel public bool? long_tables { get; set; } = null; /// Whether or not to add page breaks between tabs public bool? pdf_page_breaks { get; set; } = null; + /// Whether or not to include filters context + public bool? include_filters { get; set; } = null; /// IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) public string[]? tab_ids { get; set; } = null; /// The pixel width at which we render the inline table visualizations @@ -9271,9 +9317,11 @@ public class WriteSetting : SdkModel public string[]? email_domain_allowlist { get; set; } = null; /// (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. public bool? embed_cookieless_v2 { get; set; } = null; + /// Default net new visualizations in embedded context to Modern theme + public bool? embed_vis_modernization_default { get; set; } = null; /// /// Dynamic writeable type for EmbedConfig removes: - /// permissions, embed_enabled + /// embed_vis_modernization_default, permissions, embed_enabled /// public WriteEmbedConfig? embed_config { get; set; } /// Toggle Dashboard Auto Refresh restriction @@ -9384,7 +9432,7 @@ public class WriteUserAttribute : SdkModel public string name { get; set; } = ""; /// Human-friendly label for user attribute public string label { get; set; } = ""; - /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + /// Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") public string type { get; set; } = ""; /// Default value for when no value is set on the user public string? default_value { get; set; } = null; @@ -9410,6 +9458,14 @@ public class WriteUserAttributeWithValue : SdkModel public string? value { get; set; } = null; } +/// Dynamic writeable type for UserDbConnection removes: +/// can, id, name, user_id, dialect, auth_type, host, port, database, schema, jdbc_additional_params, oauth_application_id, created_at, updated_at +public class WriteUserDbConnection : SdkModel +{ + /// Whether this connection is enabled + public bool? enabled { get; set; } = null; +} + /// Dynamic writeable type for WhitelabelConfiguration removes: /// id, logo_url, favicon_url public class WriteWhitelabelConfiguration : SdkModel diff --git a/go/sdk/v4/methods.go b/go/sdk/v4/methods.go index dad6e7a95..1deea5bcb 100644 --- a/go/sdk/v4/methods.go +++ b/go/sdk/v4/methods.go @@ -26,7 +26,7 @@ SOFTWARE. /* -518 API methods +529 API methods */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API v4 @@ -2136,6 +2136,7 @@ func (l *LookerSDK) MobileSettings( // - host_url // - email_domain_allowlist // - embed_cookieless_v2 +// - embed_vis_modernization_default // - embed_enabled // - embed_config // - mcp_tools @@ -2178,6 +2179,7 @@ func (l *LookerSDK) GetSetting( // - host_url // - email_domain_allowlist // - embed_cookieless_v2 +// - embed_vis_modernization_default // - embed_enabled // - embed_config // - mcp_tools @@ -2671,6 +2673,50 @@ func (l *LookerSDK) SshPublicKey( } +// ### Get All User DB Connections +// +// Returns a list of user DB connections. +// +// GET /user_db_connections -> []UserDbConnection +func (l *LookerSDK) AllUserDbConnections( + fields string, + options *rtl.ApiSettings) ([]UserDbConnection, error) { + var result []UserDbConnection + err := l.AuthSession.Do(&result, "GET", "/4.0", "/user_db_connections", map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + +// ### Update User DB Connection +// +// Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). +// +// PATCH /user_db_connections/{user_db_connection_id} -> UserDbConnection +func (l *LookerSDK) UpdateUserDbConnection( + userDbConnectionId string, + body WriteUserDbConnection, + options *rtl.ApiSettings) (UserDbConnection, error) { + userDbConnectionId = url.PathEscape(userDbConnectionId) + var result UserDbConnection + err := l.AuthSession.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/user_db_connections/%v", userDbConnectionId), nil, body, options) + return result, err + +} + +// ### Delete User DB Connection +// +// Deletes an existing user DB connection. +// +// DELETE /user_db_connections/{user_db_connection_id} -> Void +func (l *LookerSDK) DeleteUserDbConnection( + userDbConnectionId string, + options *rtl.ApiSettings) error { + userDbConnectionId = url.PathEscape(userDbConnectionId) + err := l.AuthSession.Do(nil, "DELETE", "/4.0", fmt.Sprintf("/user_db_connections/%v", userDbConnectionId), nil, nil, options) + return err + +} + // endregion Connection: Manage Database Connections // region Content: Manage Content @@ -3046,6 +3092,21 @@ func (l *LookerSDK) UpdateAgent( } +// ### Get LookML of a UDD Agent +// +// Returns the LookML representation of a user-defined (UDD) agent. +// +// GET /agents/lookml/{agent_id} -> AgentLookml +func (l *LookerSDK) AgentLookml( + agentId string, + options *rtl.ApiSettings) (AgentLookml, error) { + agentId = url.PathEscape(agentId) + var result AgentLookml + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/agents/lookml/%v", agentId), nil, nil, options) + return result, err + +} + // ### Get All Conversation Messages // // Get all conversation messages. @@ -3137,6 +3198,28 @@ func (l *LookerSDK) UpdateConversationMessage( } +// ### Get Agent Responses for User Message +// +// Get all agent response messages generated for a specific user prompt. +// +// An agent response often consists of multiple message blocks (such as text explanations, +// visualizations, and follow-up suggestions). This endpoint returns all response messages +// following the specified user message up to the next user prompt. +// +// GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> []ConversationMessage +func (l *LookerSDK) GetConversationMessageResponses( + conversationId string, + userMessageId string, + fields string, + options *rtl.ApiSettings) ([]ConversationMessage, error) { + conversationId = url.PathEscape(conversationId) + userMessageId = url.PathEscape(userMessageId) + var result []ConversationMessage + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/conversations/%v/messages/%v/responses", conversationId, userMessageId), map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + // ### Search Conversations // // Returns an array of conversation objects that match the specified search criteria. @@ -3473,6 +3556,25 @@ func (l *LookerSDK) DeleteDashboard( } +// ### Get Dashboard Image +// +// Returns the image content for a dashboard element. +// +// GET /dashboards/{dashboard_id}/images/{image_slug} -> binary +// +// **Note**: Binary content may be returned by this method. +func (l *LookerSDK) GetDashboardImage( + dashboardId string, + imageSlug string, + options *rtl.ApiSettings) (binary, error) { + dashboardId = url.PathEscape(dashboardId) + imageSlug = url.PathEscape(imageSlug) + var result binary + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/dashboards/%v/images/%v", dashboardId, imageSlug), nil, nil, options) + return result, err + +} + // ### Get Aggregate Table LookML for Each Query on a Dashboard // // # Returns a JSON object that contains the dashboard id and Aggregate Table lookml @@ -3514,6 +3616,8 @@ func (l *LookerSDK) DashboardAggregateTableLookml( // // Boolean search params accept only "true" and "false" as values. // +// **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. +// // The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. // // Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -3553,10 +3657,11 @@ func (l *LookerSDK) DashboardLookml( func (l *LookerSDK) MoveDashboard( dashboardId string, folderId string, + projectName string, options *rtl.ApiSettings) (Dashboard, error) { dashboardId = url.PathEscape(dashboardId) var result Dashboard - err := l.AuthSession.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/dashboards/%v/move", dashboardId), map[string]interface{}{"folder_id": folderId}, nil, options) + err := l.AuthSession.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/dashboards/%v/move", dashboardId), map[string]interface{}{"folder_id": folderId, "project_name": projectName}, nil, options) return result, err } @@ -4927,6 +5032,8 @@ func (l *LookerSDK) DeleteLook( // | png | A PNG image of the visualization of the query // | jpg | A JPG image of the visualization of the query // +// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. +// // GET /looks/{look_id}/run/{result_format} -> string // // **Note**: Binary content may be returned by this method. @@ -5238,41 +5345,92 @@ func (l *LookerSDK) ConnectionCostEstimate( // region Project: Manage Projects -// ### Fetches a CI Run. +// ### Search Continuous Integration Runs for a project. // -// This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. +// Returns an array of Continuous Integration Run objects that match the specified search criteria. +// +// GET /projects/{project_id}/continuous_integration/runs/search -> []CIRun +func (l *LookerSDK) SearchContinuousIntegrationRuns(request RequestSearchContinuousIntegrationRuns, + options *rtl.ApiSettings) ([]CIRun, error) { + request.ProjectId = url.PathEscape(request.ProjectId) + var result []CIRun + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/projects/%v/continuous_integration/runs/search", request.ProjectId), map[string]interface{}{"fields": request.Fields, "suite_id": request.SuiteId, "status": request.Status, "user_id": request.UserId, "trigger_type": request.TriggerType, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts}, nil, options) + return result, err + +} + +// ### Fetches Multiple CI Suite Configurations for Project. // -// GET /projects/{project_id}/ci/runs/{run_id} -> ProjectRun +// GET /projects/{project_id}/continuous_integration/suites -> []ProjectCISuite +func (l *LookerSDK) GetContinuousIntegrationSuites(request RequestGetContinuousIntegrationSuites, + options *rtl.ApiSettings) ([]ProjectCISuite, error) { + request.ProjectId = url.PathEscape(request.ProjectId) + var result []ProjectCISuite + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/projects/%v/continuous_integration/suites", request.ProjectId), map[string]interface{}{"fields": request.Fields, "limit": request.Limit, "offset": request.Offset, "created_at": request.CreatedAt}, nil, options) + return result, err + +} + +// ### Fetches a CI Suite Configuration. // -// Deprecated: This method is deprecated. -func (l *LookerSDK) GetCiRun( +// POST /projects/{project_id}/continuous_integration/suites -> ProjectCISuite +func (l *LookerSDK) CreateContinuousIntegrationSuite( projectId string, - runId string, + body WriteProjectCISuite, fields string, - options *rtl.ApiSettings) (ProjectRun, error) { + options *rtl.ApiSettings) (ProjectCISuite, error) { projectId = url.PathEscape(projectId) - runId = url.PathEscape(runId) - var result ProjectRun - err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/projects/%v/ci/runs/%v", projectId, runId), map[string]interface{}{"fields": fields}, nil, options) + var result ProjectCISuite + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/projects/%v/continuous_integration/suites", projectId), map[string]interface{}{"fields": fields}, body, options) return result, err } -// ### Creates a CI Run. +// ### Fetches a CI Suite Configuration. // -// This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. +// GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite +func (l *LookerSDK) GetContinuousIntegrationSuite( + projectId string, + suiteId string, + fields string, + options *rtl.ApiSettings) (ProjectCISuite, error) { + projectId = url.PathEscape(projectId) + suiteId = url.PathEscape(suiteId) + var result ProjectCISuite + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/projects/%v/continuous_integration/suites/%v", projectId, suiteId), map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + +// ### Updates a Continuous Integration Suite. // -// POST /projects/{project_id}/ci/run -> CreateCIRunResponse +// PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite +func (l *LookerSDK) UpdateContinuousIntegrationSuite( + projectId string, + suiteId string, + body WriteProjectCISuite, + fields string, + options *rtl.ApiSettings) (ProjectCISuite, error) { + projectId = url.PathEscape(projectId) + suiteId = url.PathEscape(suiteId) + var result ProjectCISuite + err := l.AuthSession.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/projects/%v/continuous_integration/suites/%v", projectId, suiteId), map[string]interface{}{"fields": fields}, body, options) + return result, err + +} + +// ### Deletes a Continuous Integration Suite. // -// Deprecated: This method is deprecated. -func (l *LookerSDK) CreateCiRun( +// DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> string +func (l *LookerSDK) DeleteContinuousIntegrationSuite( projectId string, - body CreateCIRunRequest, + suiteId string, fields string, - options *rtl.ApiSettings) (CreateCIRunResponse, error) { + options *rtl.ApiSettings) (string, error) { projectId = url.PathEscape(projectId) - var result CreateCIRunResponse - err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/projects/%v/ci/run", projectId), map[string]interface{}{"fields": fields}, body, options) + suiteId = url.PathEscape(suiteId) + var result string + err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/projects/%v/continuous_integration/suites/%v", projectId, suiteId), map[string]interface{}{"fields": fields}, nil, options) return result, err } @@ -5292,6 +5450,22 @@ func (l *LookerSDK) CreateContinuousIntegrationRun( } +// ### Duplicates and queues a Continuous Integration Run. +// +// POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> CIRun +func (l *LookerSDK) DuplicateContinuousIntegrationRun( + projectId string, + runId string, + fields string, + options *rtl.ApiSettings) (CIRun, error) { + projectId = url.PathEscape(projectId) + runId = url.PathEscape(runId) + var result CIRun + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/projects/%v/continuous_integration/runs/%v/duplicate", projectId, runId), map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + // ### Gets a Continuous Integration run. // // GET /projects/{project_id}/continuous_integration/runs/{run_id} -> CIRun @@ -5308,6 +5482,21 @@ func (l *LookerSDK) GetContinuousIntegrationRun( } +// ### Cancels a Continuous Integration Run. +// +// DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> string +func (l *LookerSDK) CancelContinuousIntegrationRun( + projectId string, + runId string, + options *rtl.ApiSettings) (string, error) { + projectId = url.PathEscape(projectId) + runId = url.PathEscape(runId) + var result string + err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/projects/%v/continuous_integration/runs/%v", projectId, runId), nil, nil, options) + return result, err + +} + // ### Generate Lockfile for All LookML Dependencies // // Git must have been configured, must be in dev mode and deploy permission required @@ -5543,6 +5732,34 @@ func (l *LookerSDK) ResetProjectToRemote( } +// ### Pull from Production +// Pulls changes from the remote production branch into the current development workspace. +// +// POST /projects/{project_id}/pull_from_production -> string +func (l *LookerSDK) PullProjectFromProduction( + projectId string, + options *rtl.ApiSettings) (string, error) { + projectId = url.PathEscape(projectId) + var result string + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/projects/%v/pull_from_production", projectId), nil, nil, options) + return result, err + +} + +// ### Pull from Remote +// Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. +// +// POST /projects/{project_id}/pull_from_remote -> string +func (l *LookerSDK) PullProjectFromRemote( + projectId string, + options *rtl.ApiSettings) (string, error) { + projectId = url.PathEscape(projectId) + var result string + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/projects/%v/pull_from_remote", projectId), nil, nil, options) + return result, err + +} + // ### Get All Projects // // # Returns all projects visible to the current user @@ -5860,51 +6077,6 @@ func (l *LookerSDK) TagRef(request RequestTagRef, } -// ### Initiate Git Diagnosis Suite -// -// POST /projects/{project_id}/git_diagnostic_report -> GitDiagnosticReport -func (l *LookerSDK) CreateGitDiagnosticReport( - projectId string, - body WriteGitDiagnosticReport, - options *rtl.ApiSettings) (GitDiagnosticReport, error) { - projectId = url.PathEscape(projectId) - var result GitDiagnosticReport - err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/projects/%v/git_diagnostic_report", projectId), nil, body, options) - return result, err - -} - -// ### Retrieve Live Git Diagnostic Suite Execution Status -// -// GET /projects/{project_id}/git_diagnostic_report/{report_id} -> GitDiagnosticReport -func (l *LookerSDK) GetGitDiagnosticReport( - projectId string, - reportId string, - options *rtl.ApiSettings) (GitDiagnosticReport, error) { - projectId = url.PathEscape(projectId) - reportId = url.PathEscape(reportId) - var result GitDiagnosticReport - err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/projects/%v/git_diagnostic_report/%v", projectId, reportId), nil, nil, options) - return result, err - -} - -// ### Repair Git Configuration Issues -// -// POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> GitDiagnosticReport -func (l *LookerSDK) RepairGitDiagnosticReport( - projectId string, - reportId string, - body WriteGitDiagnosticReport, - options *rtl.ApiSettings) (GitDiagnosticReport, error) { - projectId = url.PathEscape(projectId) - reportId = url.PathEscape(reportId) - var result GitDiagnosticReport - err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/projects/%v/git_diagnostic_report/%v/repair", projectId, reportId), nil, body, options) - return result, err - -} - // ### Configure Repository Credential for a remote dependency // // Admin required. @@ -5972,6 +6144,8 @@ func (l *LookerSDK) GetAllRepositoryCredentials( // Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. // After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. // +// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. +// // POST /query_tasks -> QueryTask func (l *LookerSDK) CreateQueryTask(request RequestCreateQueryTask, options *rtl.ApiSettings) (QueryTask, error) { @@ -6157,6 +6331,8 @@ func (l *LookerSDK) CreateQuery( // | png | A PNG image of the visualization of the query // | jpg | A JPG image of the visualization of the query // +// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. +// // GET /queries/{query_id}/run/{result_format} -> string // // **Note**: Binary content may be returned by this method. @@ -6226,6 +6402,8 @@ func (l *LookerSDK) RunQuery(request RequestRunQuery, // | png | A PNG image of the visualization of the query // | jpg | A JPG image of the visualization of the query // +// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. +// // POST /queries/run/{result_format} -> string // // **Note**: Binary content may be returned by this method. @@ -6294,6 +6472,8 @@ func (l *LookerSDK) RunInlineQuery(request RequestRunInlineQuery, // | png | A PNG image of the visualization of the query // | jpg | A JPG image of the visualization of the query // +// **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. +// // GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> string // // **Note**: Binary content may be returned by this method. @@ -7251,7 +7431,7 @@ func (l *LookerSDK) ScheduledPlanRunOnce( func (l *LookerSDK) SearchScheduledPlans(request RequestSearchScheduledPlans, options *rtl.ApiSettings) ([]ScheduledPlan, error) { var result []ScheduledPlan - err := l.AuthSession.Do(&result, "GET", "/4.0", "/scheduled_plans/search", map[string]interface{}{"user_id": request.UserId, "fields": request.Fields, "all_users": request.AllUsers, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "name": request.Name, "user_first_name": request.UserFirstName, "user_last_name": request.UserLastName, "dashboard_id": request.DashboardId, "look_id": request.LookId, "lookml_dashboard_id": request.LookmlDashboardId, "recipient": request.Recipient, "destination_type": request.DestinationType, "delivery_format": request.DeliveryFormat, "filter_or": request.FilterOr}, nil, options) + err := l.AuthSession.Do(&result, "GET", "/4.0", "/scheduled_plans/search", map[string]interface{}{"user_id": request.UserId, "fields": request.Fields, "all_users": request.AllUsers, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "name": request.Name, "user_first_name": request.UserFirstName, "user_last_name": request.UserLastName, "dashboard_id": request.DashboardId, "look_id": request.LookId, "lookml_dashboard_id": request.LookmlDashboardId, "recipient": request.Recipient, "destination_type": request.DestinationType, "delivery_format": request.DeliveryFormat, "all_states": request.AllStates, "run_once": request.RunOnce, "enabled": request.Enabled, "last_run_status": request.LastRunStatus, "filter_or": request.FilterOr}, nil, options) return result, err } @@ -7863,94 +8043,336 @@ func (l *LookerSDK) SearchCredentialsEmail(request RequestSearchCredentialsEmail } -// ### Get information about the current user; i.e. the user account currently calling the API. +// ### Email/password login information for the specified user. // -// GET /user -> User -func (l *LookerSDK) Me( +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). +// +// GET /users/{user_id}/credentials_email -> CredentialsEmail +func (l *LookerSDK) UserCredentialsEmail( + userId string, fields string, - options *rtl.ApiSettings) (User, error) { - var result User - err := l.AuthSession.Do(&result, "GET", "/4.0", "/user", map[string]interface{}{"fields": fields}, nil, options) + options *rtl.ApiSettings) (CredentialsEmail, error) { + userId = url.PathEscape(userId) + var result CredentialsEmail + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_email", userId), map[string]interface{}{"fields": fields}, nil, options) return result, err } -// ### Get information about all users. +// ### Email/password login information for the specified user. // -// GET /users -> []User -func (l *LookerSDK) AllUsers(request RequestAllUsers, - options *rtl.ApiSettings) ([]User, error) { - var result []User - err := l.AuthSession.Do(&result, "GET", "/4.0", "/users", map[string]interface{}{"fields": request.Fields, "page": request.Page, "per_page": request.PerPage, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "ids": request.Ids}, nil, options) - return result, err - -} - -// ### Create a user with the specified information. +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). // -// POST /users -> User -func (l *LookerSDK) CreateUser( - body WriteUser, +// POST /users/{user_id}/credentials_email -> CredentialsEmail +func (l *LookerSDK) CreateUserCredentialsEmail( + userId string, + body WriteCredentialsEmail, fields string, - options *rtl.ApiSettings) (User, error) { - var result User - err := l.AuthSession.Do(&result, "POST", "/4.0", "/users", map[string]interface{}{"fields": fields}, body, options) + options *rtl.ApiSettings) (CredentialsEmail, error) { + userId = url.PathEscape(userId) + var result CredentialsEmail + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/credentials_email", userId), map[string]interface{}{"fields": fields}, body, options) return result, err } -// ### Search users -// -// Returns all* user records that match the given search criteria. -// -// If multiple search params are given and `filter_or` is FALSE or not specified, -// search params are combined in a logical AND operation. -// Only rows that match *all* search param criteria will be returned. -// -// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. -// Results will include rows that match **any** of the search criteria. -// -// String search params use case-insensitive matching. -// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. -// example="dan%" will match "danger" and "Danzig" but not "David" -// example="D_m%" will match "Damage" and "dump" -// -// Integer search params can accept a single value or a comma separated list of values. The multiple -// values will be combined under a logical OR operation - results will match at least one of -// the given values. -// -// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match -// or exclude (respectively) rows where the column is null. -// -// Boolean search params accept only "true" and "false" as values. +// ### Email/password login information for the specified user. // -// (*) Results are always filtered to the level of information the caller is permitted to view. -// Looker admins can see all user details; normal users in an open system can see -// names of other users but no details; normal users in a closed system can only see -// names of other users who are members of the same group as the user. +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). // -// GET /users/search -> []User -func (l *LookerSDK) SearchUsers(request RequestSearchUsers, - options *rtl.ApiSettings) ([]User, error) { - var result []User - err := l.AuthSession.Do(&result, "GET", "/4.0", "/users/search", map[string]interface{}{"fields": request.Fields, "page": request.Page, "per_page": request.PerPage, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "id": request.Id, "first_name": request.FirstName, "last_name": request.LastName, "full_name": request.FullName, "verified_looker_employee": request.VerifiedLookerEmployee, "embed_user": request.EmbedUser, "email": request.Email, "is_disabled": request.IsDisabled, "filter_or": request.FilterOr, "content_metadata_id": request.ContentMetadataId, "group_id": request.GroupId, "can_manage_api3_creds": request.CanManageApi3Creds, "is_service_account": request.IsServiceAccount}, nil, options) +// PATCH /users/{user_id}/credentials_email -> CredentialsEmail +func (l *LookerSDK) UpdateUserCredentialsEmail( + userId string, + body WriteCredentialsEmail, + fields string, + options *rtl.ApiSettings) (CredentialsEmail, error) { + userId = url.PathEscape(userId) + var result CredentialsEmail + err := l.AuthSession.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/users/%v/credentials_email", userId), map[string]interface{}{"fields": fields}, body, options) return result, err } -// ### Search for user accounts by name -// -// Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. -// The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. +// ### Email/password login information for the specified user. // -// Any additional search params will be combined into a logical AND expression. +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). // -// GET /users/search/names/{pattern} -> []User -func (l *LookerSDK) SearchUsersNames(request RequestSearchUsersNames, - options *rtl.ApiSettings) ([]User, error) { - request.Pattern = url.PathEscape(request.Pattern) - var result []User - err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/search/names/%v", request.Pattern), map[string]interface{}{"fields": request.Fields, "page": request.Page, "per_page": request.PerPage, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "id": request.Id, "first_name": request.FirstName, "last_name": request.LastName, "verified_looker_employee": request.VerifiedLookerEmployee, "email": request.Email, "is_disabled": request.IsDisabled}, nil, options) +// DELETE /users/{user_id}/credentials_email -> string +func (l *LookerSDK) DeleteUserCredentialsEmail( + userId string, + options *rtl.ApiSettings) (string, error) { + userId = url.PathEscape(userId) + var result string + err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_email", userId), nil, nil, options) + return result, err + +} + +// ### Create a password reset token. +// This will create a cryptographically secure random password reset token for the user. +// If the user already has a password reset token then this invalidates the old token and creates a new one. +// The token is expressed as the 'password_reset_url' of the user's email/password credential object. +// This takes an optional 'expires' param to indicate if the new token should be an expiring token. +// Tokens that expire are typically used for self-service password resets for existing users. +// Invitation emails for new users typically are not set to expire. +// The expire period is always 60 minutes when expires is enabled. +// This method can be called with an empty body. +// +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). +// +// POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail +func (l *LookerSDK) CreateUserCredentialsEmailPasswordReset(request RequestCreateUserCredentialsEmailPasswordReset, + options *rtl.ApiSettings) (CredentialsEmail, error) { + request.UserId = url.PathEscape(request.UserId) + var result CredentialsEmail + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/credentials_email/password_reset", request.UserId), map[string]interface{}{"expires": request.Expires, "fields": request.Fields}, nil, options) + return result, err + +} + +// ### Send a password reset token. +// This will send a password reset email to the user. If a password reset token does not already exist +// for this user, it will create one and then send it. +// If the user has not yet set up their account, it will send a setup email to the user. +// The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. +// Password reset URLs will expire in 60 minutes. +// This method can be called with an empty body. +// +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). +// +// POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail +func (l *LookerSDK) SendUserCredentialsEmailPasswordReset( + userId string, + fields string, + options *rtl.ApiSettings) (CredentialsEmail, error) { + userId = url.PathEscape(userId) + var result CredentialsEmail + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/credentials_email/send_password_reset", userId), map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + +// ### Google authentication login information for the specified user. +// +// GET /users/{user_id}/credentials_google -> CredentialsGoogle +func (l *LookerSDK) UserCredentialsGoogle( + userId string, + fields string, + options *rtl.ApiSettings) (CredentialsGoogle, error) { + userId = url.PathEscape(userId) + var result CredentialsGoogle + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_google", userId), map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + +// ### Delete Google authentication login information for the specified user. +// +// DELETE /users/{user_id}/credentials_google -> string +func (l *LookerSDK) DeleteUserCredentialsGoogle( + userId string, + options *rtl.ApiSettings) (string, error) { + userId = url.PathEscape(userId) + var result string + err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_google", userId), nil, nil, options) + return result, err + +} + +// ### Looker Openid login information for the specified user. Used by Looker Analysts. +// +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). +// +// GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid +func (l *LookerSDK) UserCredentialsLookerOpenid( + userId string, + fields string, + options *rtl.ApiSettings) (CredentialsLookerOpenid, error) { + userId = url.PathEscape(userId) + var result CredentialsLookerOpenid + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_looker_openid", userId), map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + +// ### Looker Openid login information for the specified user. Used by Looker Analysts. +// +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). +// +// DELETE /users/{user_id}/credentials_looker_openid -> string +func (l *LookerSDK) DeleteUserCredentialsLookerOpenid( + userId string, + options *rtl.ApiSettings) (string, error) { + userId = url.PathEscape(userId) + var result string + err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_looker_openid", userId), nil, nil, options) + return result, err + +} + +// ### Saml authentication login information for the specified user. +// +// GET /users/{user_id}/credentials_saml -> CredentialsSaml +func (l *LookerSDK) UserCredentialsSaml( + userId string, + fields string, + options *rtl.ApiSettings) (CredentialsSaml, error) { + userId = url.PathEscape(userId) + var result CredentialsSaml + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_saml", userId), map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + +// ### Delete Saml authentication login information for the specified user. +// +// DELETE /users/{user_id}/credentials_saml -> string +func (l *LookerSDK) DeleteUserCredentialsSaml( + userId string, + options *rtl.ApiSettings) (string, error) { + userId = url.PathEscape(userId) + var result string + err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_saml", userId), nil, nil, options) + return result, err + +} + +// ### Get two-factor login information for the specified user. +// +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). +// +// GET /users/{user_id}/credentials_totp -> CredentialsTotp +func (l *LookerSDK) UserCredentialsTotp( + userId string, + fields string, + options *rtl.ApiSettings) (CredentialsTotp, error) { + userId = url.PathEscape(userId) + var result CredentialsTotp + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_totp", userId), map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + +// ### Create two-factor login information for the specified user. +// +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). +// +// POST /users/{user_id}/credentials_totp -> CredentialsTotp +func (l *LookerSDK) CreateUserCredentialsTotp( + userId string, + body CredentialsTotp, + fields string, + options *rtl.ApiSettings) (CredentialsTotp, error) { + userId = url.PathEscape(userId) + var result CredentialsTotp + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/credentials_totp", userId), map[string]interface{}{"fields": fields}, body, options) + return result, err + +} + +// ### Delete two-factor login information for the specified user. +// +// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). +// +// DELETE /users/{user_id}/credentials_totp -> string +func (l *LookerSDK) DeleteUserCredentialsTotp( + userId string, + options *rtl.ApiSettings) (string, error) { + userId = url.PathEscape(userId) + var result string + err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_totp", userId), nil, nil, options) + return result, err + +} + +// ### Get information about the current user; i.e. the user account currently calling the API. +// +// GET /user -> User +func (l *LookerSDK) Me( + fields string, + options *rtl.ApiSettings) (User, error) { + var result User + err := l.AuthSession.Do(&result, "GET", "/4.0", "/user", map[string]interface{}{"fields": fields}, nil, options) + return result, err + +} + +// ### Get information about all users. +// +// GET /users -> []User +func (l *LookerSDK) AllUsers(request RequestAllUsers, + options *rtl.ApiSettings) ([]User, error) { + var result []User + err := l.AuthSession.Do(&result, "GET", "/4.0", "/users", map[string]interface{}{"fields": request.Fields, "page": request.Page, "per_page": request.PerPage, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "ids": request.Ids}, nil, options) + return result, err + +} + +// ### Create a user with the specified information. +// +// POST /users -> User +func (l *LookerSDK) CreateUser( + body WriteUser, + fields string, + options *rtl.ApiSettings) (User, error) { + var result User + err := l.AuthSession.Do(&result, "POST", "/4.0", "/users", map[string]interface{}{"fields": fields}, body, options) + return result, err + +} + +// ### Search users +// +// Returns all* user records that match the given search criteria. +// +// If multiple search params are given and `filter_or` is FALSE or not specified, +// search params are combined in a logical AND operation. +// Only rows that match *all* search param criteria will be returned. +// +// If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. +// Results will include rows that match **any** of the search criteria. +// +// String search params use case-insensitive matching. +// String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. +// example="dan%" will match "danger" and "Danzig" but not "David" +// example="D_m%" will match "Damage" and "dump" +// +// Integer search params can accept a single value or a comma separated list of values. The multiple +// values will be combined under a logical OR operation - results will match at least one of +// the given values. +// +// Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match +// or exclude (respectively) rows where the column is null. +// +// Boolean search params accept only "true" and "false" as values. +// +// (*) Results are always filtered to the level of information the caller is permitted to view. +// Looker admins can see all user details; normal users in an open system can see +// names of other users but no details; normal users in a closed system can only see +// names of other users who are members of the same group as the user. +// +// GET /users/search -> []User +func (l *LookerSDK) SearchUsers(request RequestSearchUsers, + options *rtl.ApiSettings) ([]User, error) { + var result []User + err := l.AuthSession.Do(&result, "GET", "/4.0", "/users/search", map[string]interface{}{"fields": request.Fields, "page": request.Page, "per_page": request.PerPage, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "id": request.Id, "first_name": request.FirstName, "last_name": request.LastName, "full_name": request.FullName, "verified_looker_employee": request.VerifiedLookerEmployee, "embed_user": request.EmbedUser, "email": request.Email, "is_disabled": request.IsDisabled, "filter_or": request.FilterOr, "content_metadata_id": request.ContentMetadataId, "group_id": request.GroupId, "can_manage_api3_creds": request.CanManageApi3Creds, "is_service_account": request.IsServiceAccount}, nil, options) + return result, err + +} + +// ### Search for user accounts by name +// +// Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. +// The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. +// +// Any additional search params will be combined into a logical AND expression. +// +// GET /users/search/names/{pattern} -> []User +func (l *LookerSDK) SearchUsersNames(request RequestSearchUsersNames, + options *rtl.ApiSettings) ([]User, error) { + request.Pattern = url.PathEscape(request.Pattern) + var result []User + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/search/names/%v", request.Pattern), map[string]interface{}{"fields": request.Fields, "page": request.Page, "per_page": request.PerPage, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "id": request.Id, "first_name": request.FirstName, "last_name": request.LastName, "verified_looker_employee": request.VerifiedLookerEmployee, "email": request.Email, "is_disabled": request.IsDisabled}, nil, options) return result, err } @@ -7996,7 +8418,7 @@ func (l *LookerSDK) UpdateUser( // * Their reports, Looks and dashboards will be moved to Trash. // * Any public URLs owned by them will no longer work. // * Schedules created by the users or that use their content will be deleted. -// * Alerts will continue to run, but will not be visible or editable from the dashboard. +// * Alerts owned by the users will be deleted. // // The user cannot delete themselves. // The last administrator user cannot be deleted. @@ -8085,7 +8507,7 @@ func (l *LookerSDK) UpdateServiceAccount( // * Their reports, Looks and dashboards will be moved to Trash. // * Any public URLs owned by them will no longer work. // * Schedules created by the service account or that use their content will be deleted. -// * Alerts will continue to run, but will not be visible or editable from the dashboard. +// * Alerts owned by the service account will be deleted. // // The service account cannot delete itself. // @@ -8100,119 +8522,6 @@ func (l *LookerSDK) DeleteServiceAccount( } -// ### Email/password login information for the specified user. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// GET /users/{user_id}/credentials_email -> CredentialsEmail -func (l *LookerSDK) UserCredentialsEmail( - userId string, - fields string, - options *rtl.ApiSettings) (CredentialsEmail, error) { - userId = url.PathEscape(userId) - var result CredentialsEmail - err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_email", userId), map[string]interface{}{"fields": fields}, nil, options) - return result, err - -} - -// ### Email/password login information for the specified user. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// POST /users/{user_id}/credentials_email -> CredentialsEmail -func (l *LookerSDK) CreateUserCredentialsEmail( - userId string, - body WriteCredentialsEmail, - fields string, - options *rtl.ApiSettings) (CredentialsEmail, error) { - userId = url.PathEscape(userId) - var result CredentialsEmail - err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/credentials_email", userId), map[string]interface{}{"fields": fields}, body, options) - return result, err - -} - -// ### Email/password login information for the specified user. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// PATCH /users/{user_id}/credentials_email -> CredentialsEmail -func (l *LookerSDK) UpdateUserCredentialsEmail( - userId string, - body WriteCredentialsEmail, - fields string, - options *rtl.ApiSettings) (CredentialsEmail, error) { - userId = url.PathEscape(userId) - var result CredentialsEmail - err := l.AuthSession.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/users/%v/credentials_email", userId), map[string]interface{}{"fields": fields}, body, options) - return result, err - -} - -// ### Email/password login information for the specified user. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// DELETE /users/{user_id}/credentials_email -> string -func (l *LookerSDK) DeleteUserCredentialsEmail( - userId string, - options *rtl.ApiSettings) (string, error) { - userId = url.PathEscape(userId) - var result string - err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_email", userId), nil, nil, options) - return result, err - -} - -// ### Two-factor login information for the specified user. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// GET /users/{user_id}/credentials_totp -> CredentialsTotp -func (l *LookerSDK) UserCredentialsTotp( - userId string, - fields string, - options *rtl.ApiSettings) (CredentialsTotp, error) { - userId = url.PathEscape(userId) - var result CredentialsTotp - err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_totp", userId), map[string]interface{}{"fields": fields}, nil, options) - return result, err - -} - -// ### Two-factor login information for the specified user. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// POST /users/{user_id}/credentials_totp -> CredentialsTotp -func (l *LookerSDK) CreateUserCredentialsTotp( - userId string, - body CredentialsTotp, - fields string, - options *rtl.ApiSettings) (CredentialsTotp, error) { - userId = url.PathEscape(userId) - var result CredentialsTotp - err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/credentials_totp", userId), map[string]interface{}{"fields": fields}, body, options) - return result, err - -} - -// ### Two-factor login information for the specified user. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// DELETE /users/{user_id}/credentials_totp -> string -func (l *LookerSDK) DeleteUserCredentialsTotp( - userId string, - options *rtl.ApiSettings) (string, error) { - userId = url.PathEscape(userId) - var result string - err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_totp", userId), nil, nil, options) - return result, err - -} - // ### LDAP login information for the specified user. // // Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). @@ -8244,60 +8553,6 @@ func (l *LookerSDK) DeleteUserCredentialsLdap( } -// ### Google authentication login information for the specified user. -// -// GET /users/{user_id}/credentials_google -> CredentialsGoogle -func (l *LookerSDK) UserCredentialsGoogle( - userId string, - fields string, - options *rtl.ApiSettings) (CredentialsGoogle, error) { - userId = url.PathEscape(userId) - var result CredentialsGoogle - err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_google", userId), map[string]interface{}{"fields": fields}, nil, options) - return result, err - -} - -// ### Google authentication login information for the specified user. -// -// DELETE /users/{user_id}/credentials_google -> string -func (l *LookerSDK) DeleteUserCredentialsGoogle( - userId string, - options *rtl.ApiSettings) (string, error) { - userId = url.PathEscape(userId) - var result string - err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_google", userId), nil, nil, options) - return result, err - -} - -// ### Saml authentication login information for the specified user. -// -// GET /users/{user_id}/credentials_saml -> CredentialsSaml -func (l *LookerSDK) UserCredentialsSaml( - userId string, - fields string, - options *rtl.ApiSettings) (CredentialsSaml, error) { - userId = url.PathEscape(userId) - var result CredentialsSaml - err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_saml", userId), map[string]interface{}{"fields": fields}, nil, options) - return result, err - -} - -// ### Saml authentication login information for the specified user. -// -// DELETE /users/{user_id}/credentials_saml -> string -func (l *LookerSDK) DeleteUserCredentialsSaml( - userId string, - options *rtl.ApiSettings) (string, error) { - userId = url.PathEscape(userId) - var result string - err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_saml", userId), nil, nil, options) - return result, err - -} - // ### OpenID Connect (OIDC) authentication login information for the specified user. // // GET /users/{user_id}/credentials_oidc -> CredentialsOIDC @@ -8452,37 +8707,6 @@ func (l *LookerSDK) AllUserCredentialsEmbeds( } -// ### Looker Openid login information for the specified user. Used by Looker Analysts. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid -func (l *LookerSDK) UserCredentialsLookerOpenid( - userId string, - fields string, - options *rtl.ApiSettings) (CredentialsLookerOpenid, error) { - userId = url.PathEscape(userId) - var result CredentialsLookerOpenid - err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/users/%v/credentials_looker_openid", userId), map[string]interface{}{"fields": fields}, nil, options) - return result, err - -} - -// ### Looker Openid login information for the specified user. Used by Looker Analysts. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// DELETE /users/{user_id}/credentials_looker_openid -> string -func (l *LookerSDK) DeleteUserCredentialsLookerOpenid( - userId string, - options *rtl.ApiSettings) (string, error) { - userId = url.PathEscape(userId) - var result string - err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/users/%v/credentials_looker_openid", userId), nil, nil, options) - return result, err - -} - // ### Web login session for the specified user. // // GET /users/{user_id}/sessions/{session_id} -> Session @@ -8528,28 +8752,6 @@ func (l *LookerSDK) AllUserSessions( } -// ### Create a password reset token. -// This will create a cryptographically secure random password reset token for the user. -// If the user already has a password reset token then this invalidates the old token and creates a new one. -// The token is expressed as the 'password_reset_url' of the user's email/password credential object. -// This takes an optional 'expires' param to indicate if the new token should be an expiring token. -// Tokens that expire are typically used for self-service password resets for existing users. -// Invitation emails for new users typically are not set to expire. -// The expire period is always 60 minutes when expires is enabled. -// This method can be called with an empty body. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail -func (l *LookerSDK) CreateUserCredentialsEmailPasswordReset(request RequestCreateUserCredentialsEmailPasswordReset, - options *rtl.ApiSettings) (CredentialsEmail, error) { - request.UserId = url.PathEscape(request.UserId) - var result CredentialsEmail - err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/credentials_email/password_reset", request.UserId), map[string]interface{}{"expires": request.Expires, "fields": request.Fields}, nil, options) - return result, err - -} - // ### Get information about roles of a given user // // GET /users/{user_id}/roles -> []Role @@ -8641,28 +8843,6 @@ func (l *LookerSDK) DeleteUserAttributeUserValue( } -// ### Send a password reset token. -// This will send a password reset email to the user. If a password reset token does not already exist -// for this user, it will create one and then send it. -// If the user has not yet set up their account, it will send a setup email to the user. -// The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. -// Password reset URLs will expire in 60 minutes. -// This method can be called with an empty body. -// -// Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). -// -// POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail -func (l *LookerSDK) SendUserCredentialsEmailPasswordReset( - userId string, - fields string, - options *rtl.ApiSettings) (CredentialsEmail, error) { - userId = url.PathEscape(userId) - var result CredentialsEmail - err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/users/%v/credentials_email/send_password_reset", userId), map[string]interface{}{"fields": fields}, nil, options) - return result, err - -} - // ### Change a disabled user's email addresses // // Allows the admin to change the email addresses for all the user's diff --git a/go/sdk/v4/models.go b/go/sdk/v4/models.go index f07c0909a..0fe43d21b 100644 --- a/go/sdk/v4/models.go +++ b/go/sdk/v4/models.go @@ -26,7 +26,7 @@ SOFTWARE. /* -536 API models: 363 Spec, 76 Request, 71 Write, 26 Enum +519 API models: 343 Spec, 78 Request, 72 Write, 26 Enum */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API v4 @@ -68,6 +68,14 @@ type Agent struct { 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"` + IsLookml *bool `json:"is_lookml,omitempty"` // Whether the agent is defined in LookML + LookmlAgentId *string `json:"lookml_agent_id,omitempty"` // LookML Agent ID + LookmlEditUri *string `json:"lookml_edit_uri,omitempty"` // URI to edit the LookML definition of this agent +} + +type AgentLookml struct { + AgentId *string `json:"agent_id,omitempty"` // Id of Agent + Lookml *string `json:"lookml,omitempty"` // lookml of UDD Agent } type Alert struct { @@ -227,41 +235,6 @@ type ArtifactUsage struct { Usage int64 `json:"usage"` // The currently used storage size in bytes of the entire artifact store. } -type AssertValidatorErrorItem struct { - AssertError *AssertValidatorTestError `json:"assert_error,omitempty"` - GenericError *GenericError `json:"generic_error,omitempty"` -} - -type AssertValidatorResult struct { - Name *string `json:"name,omitempty"` // Name of the validator (assert) - Status *string `json:"status,omitempty"` // Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - Results *[]AssertValidatorTestedExplore `json:"results,omitempty"` // Results of the validation -} - -type AssertValidatorTestedExplore struct { - ErrorCount *int64 `json:"error_count,omitempty"` // Total number of failed data tests - Errors *[]AssertValidatorErrorItem `json:"errors,omitempty"` // Details of data tests that failed validation - SuccessCount *string `json:"success_count,omitempty"` // Total number of successful data tests - Successes *[]AssertValidatorTestSuccess `json:"successes,omitempty"` // Details of data tests that passed validation -} - -type AssertValidatorTestError struct { - Model *string `json:"model,omitempty"` // LookML model that contains the data test - Explore *string `json:"explore,omitempty"` // LookML Explore that is used as the explore_source for the data test - TestName *string `json:"test_name,omitempty"` // Name of the data test - ExploreUrl *string `json:"explore_url,omitempty"` // URL to the Explore - LookmlUrl *string `json:"lookml_url,omitempty"` // URL to the LookML file where the data test is defined - Message *string `json:"message,omitempty"` // Message returned by the data test -} - -type AssertValidatorTestSuccess struct { - Model *string `json:"model,omitempty"` // LookML model that contains the data test - Explore *string `json:"explore,omitempty"` // LookML Explore that is used as the explore_source for the data test - TestName *string `json:"test_name,omitempty"` // Name of the data test - ExploreUrl *string `json:"explore_url,omitempty"` // URL to the Explore - 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') } @@ -436,13 +409,6 @@ type CIAssertValidatorTestSuccess struct { LookmlUrl *string `json:"lookml_url,omitempty"` // URL to the LookML file where the data test is defined } -type CIChangeRequest struct { - ChangeRequestNumber *int64 `json:"change_request_number,omitempty"` // Numeric identifier of the change request - ChangeRequestUrl *string `json:"change_request_url,omitempty"` // URL of the change request - ChangeRequestName *string `json:"change_request_name,omitempty"` // Name of the change request - ChangeRequestCommitsUrl *string `json:"change_request_commits_url,omitempty"` // For PR-triggered CI runs, the URL to the change request commit that triggered the run. -} - type CIContentValidatorContentError struct { Type *string `json:"type,omitempty"` // A URI reference that identifies the problem type Title *string `json:"title,omitempty"` // Overview of the error @@ -489,13 +455,6 @@ type CIGenericError struct { Instance *string `json:"instance,omitempty"` // URI reference that identifies the specific occurrence of the problem } -type CIGitState struct { - Branch *string `json:"branch,omitempty"` // Git branch that the CI run validates - Repository *string `json:"repository,omitempty"` // Git repository that contains the Git branch being validated - CommitRef *string `json:"commit_ref,omitempty"` // Git commit that the CI run validates - Target *string `json:"target,omitempty"` // For incremental runs, the Git branch that the CI run compares against during validation -} - type CILookMLValidatorError struct { Type *string `json:"type,omitempty"` // A URI reference that identifies the problem type Title *string `json:"title,omitempty"` // Overview of the error @@ -525,37 +484,41 @@ type CILookMLValidatorResult struct { } type CIRun struct { - Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object - Id *string `json:"id,omitempty"` // Public ID of the CI run - CiSuiteId *string `json:"ci_suite_id,omitempty"` // ID of the CI suite - ProjectId *string `json:"project_id,omitempty"` // ID of the project - Status *string `json:"status,omitempty"` // Status of the CI run - Title *string `json:"title,omitempty"` // Title of the CI run - TriggerType *string `json:"trigger_type,omitempty"` // Trigger type of the CI run - UserId *int64 `json:"user_id,omitempty"` // ID of the user that triggered the CI run - TriggeredByName *string `json:"triggered_by_name,omitempty"` // Name of user that triggered the CI run - ExecutionId *string `json:"execution_id,omitempty"` // Execution ID of the CI run - Result *CIRunResult `json:"result,omitempty"` - ChangeRequestNumber *int64 `json:"change_request_number,omitempty"` // Change request number of the CI run - ChangeRequestUrl *string `json:"change_request_url,omitempty"` // Change request URL of the CI run - ChangeRequestName *string `json:"change_request_name,omitempty"` // Change request name of the CI run - ChangeRequestCommitsUrl *string `json:"change_request_commits_url,omitempty"` // Change request commits URL of the CI run - GitServiceName *string `json:"git_service_name,omitempty"` // Git service name of the CI run - GitCommitRef *string `json:"git_commit_ref,omitempty"` // Git commit ref of the CI run - GitBranchName *string `json:"git_branch_name,omitempty"` // Git branch name of the CI run - GitRepositoryName *string `json:"git_repository_name,omitempty"` // Git repository name of the CI run - GitTargetBranchName *string `json:"git_target_branch_name,omitempty"` // Git target branch name of the CI run - GitStatusUrl *string `json:"git_status_url,omitempty"` // Git status URL of the CI run - GitTargetUrl *string `json:"git_target_url,omitempty"` // Git target URL of the CI run - CreatedAt *time.Time `json:"created_at,omitempty"` // Time and date that the CI run was created - StartedAt *time.Time `json:"started_at,omitempty"` // Time and date that the CI run was started - FinishedAt *time.Time `json:"finished_at,omitempty"` // Time and date that the CI run was finished - Retries *int64 `json:"retries,omitempty"` // Number of retries of the CI run - AssignedCiUserId *int64 `json:"assigned_ci_user_id,omitempty"` // ID of the CI user assigned to the CI run - AssignedCiUserAt *time.Time `json:"assigned_ci_user_at,omitempty"` // Time and date that the CI user was assigned to the CI run - CrashedCheckCount *int64 `json:"crashed_check_count,omitempty"` // Number of crashed checks of the CI run - RunUrl *string `json:"run_url,omitempty"` // URL of the CI run - UserAttributes *[]CIRunUserAttribute `json:"user_attributes,omitempty"` // User attributes for the CI run + Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object + Id *string `json:"id,omitempty"` // Public ID of the CI run + CiSuiteId *string `json:"ci_suite_id,omitempty"` // ID of the CI suite + ProjectId *string `json:"project_id,omitempty"` // ID of the project + Status *string `json:"status,omitempty"` // Status of the CI run + Title *string `json:"title,omitempty"` // Title of the CI run + TriggerType *string `json:"trigger_type,omitempty"` // Trigger type of the CI run + UserId *int64 `json:"user_id,omitempty"` // ID of the user that triggered the CI run + TriggeredByName *string `json:"triggered_by_name,omitempty"` // Name of user that triggered the CI run + ExecutionId *string `json:"execution_id,omitempty"` // Execution ID of the CI run + Result *CIRunResult `json:"result,omitempty"` + ChangeRequestNumber *int64 `json:"change_request_number,omitempty"` // Change request number of the CI run + ChangeRequestUrl *string `json:"change_request_url,omitempty"` // Change request URL of the CI run + ChangeRequestName *string `json:"change_request_name,omitempty"` // Change request name of the CI run + ChangeRequestCommitsUrl *string `json:"change_request_commits_url,omitempty"` // Change request commits URL of the CI run + GitServiceName *string `json:"git_service_name,omitempty"` // Git service name of the CI run + GitCommitRef *string `json:"git_commit_ref,omitempty"` // Git commit ref of the CI run + GitBranchName *string `json:"git_branch_name,omitempty"` // Git branch name of the CI run + GitRepositoryName *string `json:"git_repository_name,omitempty"` // Git repository name of the CI run + GitTargetBranchName *string `json:"git_target_branch_name,omitempty"` // Git target branch name of the CI run + GitStatusUrl *string `json:"git_status_url,omitempty"` // Git status URL of the CI run + GitTargetUrl *string `json:"git_target_url,omitempty"` // Git target URL of the CI run + DbtCloudGitBranchName *string `json:"dbt_cloud_git_branch_name,omitempty"` // Git branch name in dbt Cloud + DbtCloudGitCommitRef *string `json:"dbt_cloud_git_commit_ref,omitempty"` // Git commit ref in dbt Cloud + DbtCloudGitRepositoryName *string `json:"dbt_cloud_git_repository_name,omitempty"` // Git repository name in dbt Cloud + CreatedAt *time.Time `json:"created_at,omitempty"` // Time and date that the CI run was created + StartedAt *time.Time `json:"started_at,omitempty"` // Time and date that the CI run was started + FinishedAt *time.Time `json:"finished_at,omitempty"` // Time and date that the CI run was finished + Retries *int64 `json:"retries,omitempty"` // Number of retries of the CI run + AssignedCiUserId *int64 `json:"assigned_ci_user_id,omitempty"` // ID of the CI user assigned to the CI run + AssignedCiUserAt *time.Time `json:"assigned_ci_user_at,omitempty"` // Time and date that the CI user was assigned to the CI run + CrashedCheckCount *int64 `json:"crashed_check_count,omitempty"` // Number of crashed checks of the CI run + RunUrl *string `json:"run_url,omitempty"` // URL of the CI run + UserAttributes *[]CIRunUserAttribute `json:"user_attributes,omitempty"` // User attributes for the CI run + ProjectImports *map[string]interface{} `json:"project_imports,omitempty"` // Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run } type CIRunResult struct { @@ -567,6 +530,8 @@ type CIRunResult struct { ContentError *CIGenericError `json:"content_error,omitempty"` LookmlResult *CILookMLValidatorResult `json:"lookml_result,omitempty"` LookmlError *CIGenericError `json:"lookml_error,omitempty"` + StyleResult *CIStyleValidatorResult `json:"style_result,omitempty"` + StyleError *CIGenericError `json:"style_error,omitempty"` GenericError *CIGenericError `json:"generic_error,omitempty"` } @@ -576,13 +541,6 @@ type CIRunUserAttribute struct { Value *string `json:"value,omitempty"` // Value of the user attribute } -type CIScheduleTrigger struct { - Enabled *bool `json:"enabled,omitempty"` // Whether the CI run schedule is active - Day *string `json:"day,omitempty"` // For scheduled runs, day of the week that the CI run is scheduled - Hour *string `json:"hour,omitempty"` // For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled - Frequency *string `json:"frequency,omitempty"` // For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly) -} - type CISqlValidatorError struct { Type *string `json:"type,omitempty"` // A URI reference that identifies the problem type Title *string `json:"title,omitempty"` // Overview of the error @@ -619,6 +577,44 @@ type CISqlValidatorTestedExplore struct { Errors *[]CISqlValidatorErrorItem `json:"errors,omitempty"` // Details of the LookML that failed SQL validation } +type CIStyleValidatorError struct { + Type *string `json:"type,omitempty"` // A URI reference that identifies the problem type + Title *string `json:"title,omitempty"` // Overview of the error + Detail *string `json:"detail,omitempty"` // Detail of the error + Status *string `json:"status,omitempty"` // The HTTP status code for the problem + Instance *string `json:"instance,omitempty"` // URI reference that identifies the specific occurrence of the problem + Model *string `json:"model,omitempty"` // LookML model that contains the error + Explore *string `json:"explore,omitempty"` // LookML Explore that contains the error + FieldName *string `json:"field_name,omitempty"` // LookML field that caused the error + Message *string `json:"message,omitempty"` // Message returned by the style validator + Severity *string `json:"severity,omitempty"` // Severity of the error (warning, error, fatal, info, success) + LineNumber *int64 `json:"line_number,omitempty"` // Line number of the error in the LookML file + Character *int64 `json:"character,omitempty"` // Character offset of the error in the LookML file + LookmlUrl *string `json:"lookml_url,omitempty"` // URL to the LookML that caused the error + FilePath *string `json:"file_path,omitempty"` // IDE folder path to the LookML file that caused the error + RuleName *string `json:"rule_name,omitempty"` // Name of the style rule + EntityType *string `json:"entity_type,omitempty"` // Type of LookML entity evaluated + EntityName *string `json:"entity_name,omitempty"` // Name of LookML entity evaluated + IsIncremental *bool `json:"is_incremental,omitempty"` // Whether the error was newly introduced + ErrorId *string `json:"error_id,omitempty"` // Deterministic fingerprint of the violation + DocumentationUrl *string `json:"documentation_url,omitempty"` // URL to documentation for the style rule + Context *[]string `json:"context,omitempty"` // LookML source code snippet lines surrounding the error + ContextLineNumber *int64 `json:"context_line_number,omitempty"` // Line number where the context code snippet begins +} + +type CIStyleValidatorErrorItem struct { + StyleError *CIStyleValidatorError `json:"style_error,omitempty"` + GenericError *CIGenericError `json:"generic_error,omitempty"` +} + +type CIStyleValidatorResult struct { + Name *string `json:"name,omitempty"` // Name of the validator (style) + Incremental *bool `json:"incremental,omitempty"` // Whether the validation was incremental + Status *string `json:"status,omitempty"` // Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) + ErrorCount *int64 `json:"error_count,omitempty"` // Total number of failed style validations + Errors *[]CIStyleValidatorErrorItem `json:"errors,omitempty"` // Details of the LookML that failed style validation +} + type ColorCollection struct { Id *string `json:"id,omitempty"` // Unique Id Label *string `json:"label,omitempty"` // Label of color collection @@ -722,6 +718,7 @@ type ContentSearch struct { CreatedById *int64 `json:"created_by_id,omitempty"` // Creator Id of the content CertificationStatus *string `json:"certification_status,omitempty"` // Certification status of the content ParentFolderName *string `json:"parent_folder_name,omitempty"` // Name of the parent folder of the content + ParentProjectName *string `json:"parent_project_name,omitempty"` // Name of the parent project of the content } type ContentSummary struct { @@ -847,23 +844,6 @@ type ContentValidationScheduledPlan struct { Id *string `json:"id,omitempty"` // Unique Id } -type ContentValidatorContentError struct { - Type *string `json:"type,omitempty"` // A URI reference that identifies the problem type - Title *string `json:"title,omitempty"` // Overview of the error - Detail *string `json:"detail,omitempty"` // Detail of the error - Status *string `json:"status,omitempty"` // The HTTP status code for the problem - Instance *string `json:"instance,omitempty"` // URI reference that identifies the specific occurrence of the problem - Model *string `json:"model,omitempty"` // LookML model that contains the error - Explore *string `json:"explore,omitempty"` // LookML Explore that contains the error - FieldName *string `json:"field_name,omitempty"` // LookML field that caused the error - ContentType *string `json:"content_type,omitempty"` // Type of the content (dashboard, look) - Folder *string `json:"folder,omitempty"` // Folder of the content - Url *string `json:"url,omitempty"` // URL of the content - TileType *string `json:"tile_type,omitempty"` // Type of the tile (dashboard_element, dashboard_filter) - TileTitle *string `json:"tile_title,omitempty"` // Title of the tile - Message *string `json:"message,omitempty"` // Message returned by the content validator -} - type ContentValidatorError struct { Look *ContentValidationLook `json:"look,omitempty"` Dashboard *ContentValidationDashboard `json:"dashboard,omitempty"` @@ -877,23 +857,6 @@ type ContentValidatorError struct { Id *string `json:"id,omitempty"` // An id unique to this piece of content for this validation run } -type ContentValidatorErrorItem struct { - ContentError *ContentValidatorContentError `json:"content_error,omitempty"` - GenericError *GenericError `json:"generic_error,omitempty"` -} - -type ContentValidatorResult struct { - Name *string `json:"name,omitempty"` // Name of the validator (content) - Incremental *bool `json:"incremental,omitempty"` // Whether the validation was incremental - Status *string `json:"status,omitempty"` // Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - Result *[]ContentValidatorTestedExplore `json:"result,omitempty"` // Results of the content validation -} - -type ContentValidatorTestedExplore struct { - ErrorCount *int64 `json:"error_count,omitempty"` // Total number of failed content validations - Errors *[]ContentValidatorErrorItem `json:"errors,omitempty"` // Details of the content that failed validation -} - type ContentView struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Id *string `json:"id,omitempty"` // Unique Id @@ -910,7 +873,9 @@ type ContentView struct { } type Context struct { - Instructions *string `json:"instructions,omitempty"` // Agent instructions + Instructions *string `json:"instructions,omitempty"` // Agent instructions + ShowAnalyticalDetails *bool `json:"show_analytical_details,omitempty"` // Show analytical details in preview + ShowDebug *bool `json:"show_debug,omitempty"` // Show debug info in preview } type ContinuousPalette struct { @@ -957,22 +922,12 @@ type CostEstimate struct { Message *string `json:"message,omitempty"` // Human-friendly message } -type CreateCIRunRequest struct { - SuiteId *string `json:"suite_id,omitempty"` // ID of the CI suite - Branch *string `json:"branch,omitempty"` // Branch that the CI run should validate. Omit to test production. - Commit *string `json:"commit,omitempty"` // Commit that the CI run should validate. Omit to test production. -} - -type CreateCIRunResponse struct { - RunId *string `json:"run_id,omitempty"` // ID of the CI run - Status *string `json:"status,omitempty"` // Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) -} - type CreateContinuousIntegrationRunRequest struct { SuiteId *string `json:"suite_id,omitempty"` // The suite ID. Branch *string `json:"branch,omitempty"` // The git branch to use. Required for dev workspace. Omit to test production. Commit *string `json:"commit,omitempty"` // Commit that the CI run should validate. Omit to test production. UserAttributes *[]UserAttributeOverride `json:"user_attributes,omitempty"` // User attributes to override for the CI run. + ProjectImports *map[string]interface{} `json:"project_imports,omitempty"` // Map of upstream project names to commit SHAs or git configurations to pin for the CI run. } // WARNING: no writeable properties found for POST, PUT, or PATCH @@ -1246,6 +1201,7 @@ type Dashboard struct { 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 + LayoutGranularity *string `json:"layout_granularity,omitempty"` // The layout granularity to apply to this dashboard (ie: default or granular) 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"` } @@ -1256,14 +1212,22 @@ type DashboardAggregateTableLookml struct { } type DashboardAppearance struct { - PageSideMargins *int64 `json:"page_side_margins,omitempty"` // Page margin (side) width - PageBackgroundColor *string `json:"page_background_color,omitempty"` // Background color for the dashboard - TileTitleAlignment *string `json:"tile_title_alignment,omitempty"` // Title alignment on dashboard tiles - TileSpaceBetween *int64 `json:"tile_space_between,omitempty"` // Space between tiles - TileBackgroundColor *string `json:"tile_background_color,omitempty"` // Background color for tiles - TileShadow *bool `json:"tile_shadow,omitempty"` // Tile shadow on/off - KeyColor *string `json:"key_color,omitempty"` // Key color - ModernVis2026 *bool `json:"modern_vis2026,omitempty"` // Whether to modernize visualizations on this dashboard + PageSideMargins *int64 `json:"page_side_margins,omitempty"` // Page margin (side) width + PageBackgroundColor *string `json:"page_background_color,omitempty"` // Background color for the dashboard + TileTitleAlignment *string `json:"tile_title_alignment,omitempty"` // Title alignment on dashboard tiles + TileSpaceBetween *int64 `json:"tile_space_between,omitempty"` // Space between tiles + TileBackgroundColor *string `json:"tile_background_color,omitempty"` // Background color for tiles + TileShadow *bool `json:"tile_shadow,omitempty"` // Tile shadow on/off + KeyColor *string `json:"key_color,omitempty"` // Key color + ModernVis2026 *bool `json:"modern_vis2026,omitempty"` // Whether to modernize visualizations on this dashboard + ShowDashboardHeader *bool `json:"show_dashboard_header,omitempty"` // Toggle to show dashboard header. Defaults to true. + ShowTitle *bool `json:"show_title,omitempty"` // Toggle to show dashboard title. Defaults to true. + ShowFiltersBar *bool `json:"show_filters_bar,omitempty"` // Toggle to show filters bar. Defaults to true. + ShowFiltersToggle *bool `json:"show_filters_toggle,omitempty"` // Toggle to show filters toggle button. Defaults to true. + ShowReloadDataIcon *bool `json:"show_reload_data_icon,omitempty"` // Toggle to show reload data icon/button. Defaults to true. + ShowDashboardMenu *bool `json:"show_dashboard_menu,omitempty"` // Toggle to show dashboard actions menu. Defaults to true. + ShowLastUpdatedIndicator *bool `json:"show_last_updated_indicator,omitempty"` // Toggle to show last updated indicator. Defaults to true. + BackgroundOpacity *float32 `json:"background_opacity,omitempty"` // Background image opacity (0.0 to 1.0) } type DashboardBase struct { @@ -1287,12 +1251,13 @@ type DashboardBase struct { } type DashboardDownloadSettings struct { - FormatOption *string `json:"format_option,omitempty"` // Format option - ValueOptions *string `json:"value_options,omitempty"` // Value option - ResultOptions *string `json:"result_options,omitempty"` // Result option - LimitOptions *string `json:"limit_options,omitempty"` // Limit option - RowsLimit *int64 `json:"rows_limit,omitempty"` // Rows limit - ColumnsLimit *int64 `json:"columns_limit,omitempty"` // Columns limit + FormatOption *string `json:"format_option,omitempty"` // Format option + ValueOptions *string `json:"value_options,omitempty"` // Value option + ResultOptions *string `json:"result_options,omitempty"` // Result option + LimitOptions *string `json:"limit_options,omitempty"` // Limit option + RowsLimit *int64 `json:"rows_limit,omitempty"` // Rows limit + ColumnsLimit *int64 `json:"columns_limit,omitempty"` // Columns limit + AppendExcelMetadata *bool `json:"append_excel_metadata,omitempty"` // Append Excel metadata } type DashboardElement struct { @@ -1301,6 +1266,7 @@ type DashboardElement struct { BodyTextAsHtml *string `json:"body_text_as_html,omitempty"` // Text tile body text as Html DashboardId *string `json:"dashboard_id,omitempty"` // Id of Dashboard DashboardLayoutId *string `json:"dashboard_layout_id,omitempty"` // Id of Dashboard Layout + GroupId *string `json:"group_id,omitempty"` // ID of the group to place this element under in the layout EditUri *string `json:"edit_uri,omitempty"` // Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only). Id *string `json:"id,omitempty"` // Unique Id Look *LookWithQuery `json:"look,omitempty"` @@ -1330,6 +1296,8 @@ type DashboardElement struct { ExtensionId *string `json:"extension_id,omitempty"` // Extension ID AriaDescription *string `json:"aria_description,omitempty"` // Custom ARIA description text CertificationMetadata *Certification `json:"certification_metadata,omitempty"` + ImageId *string `json:"image_id,omitempty"` // ID of Dashboard Image + Images *[]Image `json:"images,omitempty"` // Images } type DashboardFilter struct { @@ -1385,6 +1353,7 @@ type DashboardLayoutComponent struct { GranularColumn *int64 `json:"granular_column,omitempty"` // Column (granular layout) GranularWidth *int64 `json:"granular_width,omitempty"` // Width (granular layout) GranularHeight *int64 `json:"granular_height,omitempty"` // Height (granular layout) + GroupId *string `json:"group_id,omitempty"` // Id of parent Dashboard Layout Component group } type DashboardLookml struct { @@ -1494,6 +1463,7 @@ type DBConnection struct { Dialect *Dialect `json:"dialect,omitempty"` Snippets *[]Snippet `json:"snippets,omitempty"` // SQL Runner snippets for this connection PdtsEnabled *bool `json:"pdts_enabled,omitempty"` // True if PDTs are enabled on this connection + ProjectId *string `json:"project_id,omitempty"` // ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. NamedDriverVersionRequested *string `json:"named_driver_version_requested,omitempty"` // Requested JDBC driver version name NamedDriverVersionActual *string `json:"named_driver_version_actual,omitempty"` // Resolved JDBC driver version Host *string `json:"host,omitempty"` // Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. @@ -1501,11 +1471,13 @@ type DBConnection struct { Username *string `json:"username,omitempty"` // Username for server authentication Password *string `json:"password,omitempty"` // (Write-Only) Password for server authentication HasPassword *bool `json:"has_password,omitempty"` // Whether or not the password is present + ServiceAccountAuthEnabled *bool `json:"service_account_auth_enabled,omitempty"` // Whether Service Account OAuth authentication is enabled for this connection UsesOauth *bool `json:"uses_oauth,omitempty"` // Whether the connection uses OAuth for authentication. UsesKeyPairAuth *bool `json:"uses_key_pair_auth,omitempty"` // Whether the connection uses key-pair for authentication. UsesInstanceOauth *bool `json:"uses_instance_oauth,omitempty"` // Whether the integration uses the oauth instance account. UsesServiceAuth *bool `json:"uses_service_auth,omitempty"` // Whether the connection uses service authentication certificate. Certificate *string `json:"certificate,omitempty"` // (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + UserAttrCertificate *string `json:"user_attr_certificate,omitempty"` // The name of the user attribute containing the connection certificate. FileType *string `json:"file_type,omitempty"` // (Write-Only) Certificate keyfile type - .json, .p8 or .p12 Database *string `json:"database,omitempty"` // Database name DbTimezone *string `json:"db_timezone,omitempty"` // Time zone of database @@ -1562,6 +1534,7 @@ type DBConnectionBase struct { Dialect *Dialect `json:"dialect,omitempty"` Snippets *[]Snippet `json:"snippets,omitempty"` // SQL Runner snippets for this connection PdtsEnabled *bool `json:"pdts_enabled,omitempty"` // True if PDTs are enabled on this connection + ProjectId *string `json:"project_id,omitempty"` // ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. } type DBConnectionOverride struct { @@ -1677,6 +1650,7 @@ type DialectInfoOptions struct { Auth *bool `json:"auth,omitempty"` // Has auth support CostEstimate *bool `json:"cost_estimate,omitempty"` // Has configurable cost estimation Disabled *bool `json:"disabled,omitempty"` // Disable this connection. This will prevent any queries from running on this connection. + QueryHoldingDisabled *bool `json:"query_holding_disabled,omitempty"` // Disable query holding for this connection. DisableContextComment *bool `json:"disable_context_comment,omitempty"` // Can disable query context comments Host *bool `json:"host,omitempty"` // Host is required InstanceName *bool `json:"instance_name,omitempty"` // Instance name is required @@ -1695,6 +1669,7 @@ type DialectInfoOptions struct { Username *bool `json:"username,omitempty"` // Username can be specified UsernameRequired *bool `json:"username_required,omitempty"` // Username is required SupportsConnectionPooling *bool `json:"supports_connection_pooling,omitempty"` // Has support for connection pooling + UserAttributeCertificate *bool `json:"user_attribute_certificate,omitempty"` // Has user attribute certificate support } type DigestEmails struct { @@ -1717,19 +1692,20 @@ 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. - 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. + 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 + EmbedVisModernizationDefault *bool `json:"embed_vis_modernization_default,omitempty"` // Default net new visualizations in embedded context to Modern theme + 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 { @@ -1909,14 +1885,6 @@ type Format string const Format_Topojson Format = "topojson" const Format_VectorTileRegion Format = "vector_tile_region" -type GenericError struct { - Type *string `json:"type,omitempty"` // A URI reference that identifies the problem type - Title *string `json:"title,omitempty"` // Overview of the error - Detail *string `json:"detail,omitempty"` // Detail of the error - Status *string `json:"status,omitempty"` // The HTTP status code for the problem - Instance *string `json:"instance,omitempty"` // URI reference that identifies the specific occurrence of the problem -} - type GitBranch struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Name *string `json:"name,omitempty"` // The short name on the local. Updating `name` results in `git checkout ` @@ -1950,32 +1918,6 @@ type GitConnectionTestResult struct { Status *string `json:"status,omitempty"` // Either 'pass' or 'fail' } -type GitDiagnosticIssue struct { - Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object - Id *string `json:"id,omitempty"` // Unique ID of the diagnostic issue. - ReportId *string `json:"report_id,omitempty"` // Parent diagnostic report ID. - ProjectId *string `json:"project_id,omitempty"` // Target Looker Project ID. - ProjectType *string `json:"project_type,omitempty"` // Environment scope (developer/production). - IssueType *string `json:"issue_type,omitempty"` // Git diagnostic issue category. - IssueVersion *string `json:"issue_version,omitempty"` // Version schema. - State *string `json:"state,omitempty"` // Current execution status. - CreatedAt *time.Time `json:"created_at,omitempty"` // Creation timestamp. - UpdatedAt *time.Time `json:"updated_at,omitempty"` // Last update timestamp. -} - -type GitDiagnosticReport struct { - Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object - Id *string `json:"id,omitempty"` // Unique ID of the git diagnostic report. - ProjectId *string `json:"project_id,omitempty"` // Target Looker Project ID. - UserId *string `json:"user_id,omitempty"` // ID of the user initiating the diagnosis. - State *string `json:"state,omitempty"` // Raw lifecycle state. - Status *string `json:"status,omitempty"` // Status derived from state. - CreatedAt *time.Time `json:"created_at,omitempty"` // Creation time. - UpdatedAt *time.Time `json:"updated_at,omitempty"` // Update time. - ProjectType *string `json:"project_type,omitempty"` // Project structure type. - Issues *[]GitDiagnosticIssue `json:"issues,omitempty"` // Diagnostic issues associated with this report. -} - type GitStatus struct { Action *string `json:"action,omitempty"` // Git action: add, delete, etc Conflict *bool `json:"conflict,omitempty"` // When true, changes to the local file conflict with the remote repository @@ -2001,6 +1943,8 @@ type GoldenQuery struct { Sorts *[]string `json:"sorts,omitempty"` // Sorts of the associated Looker Query Limit *string `json:"limit,omitempty"` // Limit of the associated Looker Query ClientId *string `json:"client_id,omitempty"` // Client ID of the associated Looker Query + Pivots *[]string `json:"pivots,omitempty"` // Pivots of the associated Looker Query + DynamicFields *string `json:"dynamic_fields,omitempty"` // Dynamic fields of the associated Looker Query } type Group struct { @@ -2099,6 +2043,17 @@ type HomepageSection struct { VisibleItemOrder *[]string `json:"visible_item_order,omitempty"` // ids of the homepage items the user can see in the order they should be displayed } +type Image struct { + Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object + Id *string `json:"id,omitempty"` // Unique Id + FileName *string `json:"file_name,omitempty"` // Original file name + Format *string `json:"format,omitempty"` // Image format (e.g. PNG, JPG) + Label *string `json:"label,omitempty"` // Accessibility label + Url *string `json:"url,omitempty"` // URL of the image + CreatedAt *time.Time `json:"created_at,omitempty"` // Creation timestamp + UpdatedAt *time.Time `json:"updated_at,omitempty"` // Update timestamp +} + type ImportedProject struct { Name *string `json:"name,omitempty"` // Dependency name Url *string `json:"url,omitempty"` // Url for a remote dependency @@ -2723,34 +2678,6 @@ type LookmlTestResult struct { Success *bool `json:"success,omitempty"` // True if this test passsed without errors. } -type LookMLValidatorError struct { - Type *string `json:"type,omitempty"` // A URI reference that identifies the problem type - Title *string `json:"title,omitempty"` // Overview of the error - Detail *string `json:"detail,omitempty"` // Detail of the error - Status *string `json:"status,omitempty"` // The HTTP status code for the problem - Instance *string `json:"instance,omitempty"` // URI reference that identifies the specific occurrence of the problem - Model *string `json:"model,omitempty"` // LookML model that contains the error - Explore *string `json:"explore,omitempty"` // LookML Explore that contains the error - FieldName *string `json:"field_name,omitempty"` // LookML field that caused the error - Message *string `json:"message,omitempty"` // Message returned by the LookML validator - Severity *string `json:"severity,omitempty"` // Severity of the error (warning, error, fatal, info, success) - LineNumber *string `json:"line_number,omitempty"` // Line number of the error in the LookML file - LookmlUrl *string `json:"lookml_url,omitempty"` // URL to the LookML that caused the error - FilePath *string `json:"file_path,omitempty"` // IDE folder path to the LookML file that caused the error -} - -type LookMLValidatorErrorItem struct { - LookmlError *LookMLValidatorError `json:"lookml_error,omitempty"` - GenericError *GenericError `json:"generic_error,omitempty"` -} - -type LookMLValidatorResult struct { - Name *string `json:"name,omitempty"` // Name of the validator (lookml) - Status *string `json:"status,omitempty"` // Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - ErrorCount *int64 `json:"error_count,omitempty"` // Total number of failed LookML validations - Errors *[]LookMLValidatorErrorItem `json:"errors,omitempty"` // Details of the LookML that failed validation -} - type LookModel struct { Id *string `json:"id,omitempty"` // Model Id Label *string `json:"label,omitempty"` // Model Label @@ -2867,6 +2794,7 @@ type McpTools struct { GetDashboards *McpToolSetting `json:"get_dashboards,omitempty"` GetDimensions *McpToolSetting `json:"get_dimensions,omitempty"` GetExplores *McpToolSetting `json:"get_explores,omitempty"` + GetFieldValueSuggestions *McpToolSetting `json:"get_field_value_suggestions,omitempty"` GetFilters *McpToolSetting `json:"get_filters,omitempty"` GetLooks *McpToolSetting `json:"get_looks,omitempty"` GetMeasures *McpToolSetting `json:"get_measures,omitempty"` @@ -2893,6 +2821,8 @@ 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"` + RenderVisualization *McpToolSetting `json:"render_visualization,omitempty"` + RenderDashboard *McpToolSetting `json:"render_dashboard,omitempty"` } type McpToolSetting struct { @@ -3007,7 +2937,8 @@ const Name_Year Name = "year" type OauthClientApp struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object ClientGuid *string `json:"client_guid,omitempty"` // The globally unique id of this application - RedirectUri *string `json:"redirect_uri,omitempty"` // The uri with which this application will receive an auth code by browser redirect. + RedirectUri *string `json:"redirect_uri,omitempty"` // (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) + RedirectUris *[]string `json:"redirect_uris,omitempty"` // The authorized uris for which this application will receive an auth code by browser redirect. DisplayName *string `json:"display_name,omitempty"` // The application's display name Description *string `json:"description,omitempty"` // A description of the application that will be displayed to users Enabled *bool `json:"enabled,omitempty"` // When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. @@ -3173,6 +3104,60 @@ type Project struct { DependencyStatus *string `json:"dependency_status,omitempty"` // Status of dependencies in your manifest & lockfile } +type ProjectCISuite struct { + Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object + Id *string `json:"id,omitempty"` // ID of the CI suite + Name *string `json:"name,omitempty"` // Name of the CI suite + ProjectId *string `json:"project_id,omitempty"` // ID of the LookML project + CreatedAt *time.Time `json:"created_at,omitempty"` // Time and date that the CI suite was created + UpdatedAt *time.Time `json:"updated_at,omitempty"` // Time and date that the CI suite was updated + ScheduleTriggerIsEnabled *bool `json:"schedule_trigger_is_enabled,omitempty"` // Whether the CI suite schedule trigger is active + ScheduleTriggerCrontab *string `json:"schedule_trigger_crontab,omitempty"` // Crontab that the CI suite is scheduled to run + ScheduleTriggerTimezone *string `json:"schedule_trigger_timezone,omitempty"` // Timezone for the CI suite schedule + AlertingEnabled *bool `json:"alerting_enabled,omitempty"` // Whether alerting is enabled for the CI suite + AlertEmailAddresses *[]string `json:"alert_email_addresses,omitempty"` // Email addresses to send alerts to + AlertOnFailedStatus *bool `json:"alert_on_failed_status,omitempty"` // Whether to alert on failed status + AlertOnErrorStatus *bool `json:"alert_on_error_status,omitempty"` // Whether to alert on error status + AlertOnPassedStatus *bool `json:"alert_on_passed_status,omitempty"` // Whether to alert on passed status + AlertOnCancelledStatus *bool `json:"alert_on_cancelled_status,omitempty"` // Whether to alert on cancelled status + ChangeRequestTriggerIsEnabled *bool `json:"change_request_trigger_is_enabled,omitempty"` // Whether the CI suite change request trigger is active + ChangeRequestTriggerHookId *string `json:"change_request_trigger_hook_id,omitempty"` // ID of the hook that triggers the CI Suite to run + ChangeRequestTriggerTargetBranch *string `json:"change_request_trigger_target_branch,omitempty"` // Git branch that should be compared against when the CI suite is run, used when the run is incremental + Guid *string `json:"guid,omitempty"` // GUID of the CI suite + DbtCloudTriggerIsEnabled *bool `json:"dbt_cloud_trigger_is_enabled,omitempty"` // Whether the CI suite dbt Cloud trigger is active + DbtCloudTriggerJobId *int64 `json:"dbt_cloud_trigger_job_id,omitempty"` // Job ID of the dbt Cloud job + DbtCloudTriggerUserAttributeId *string `json:"dbt_cloud_trigger_user_attribute_id,omitempty"` // User Attribute ID used for schema substitution + DbtCloudWebhookId *string `json:"dbt_cloud_webhook_id,omitempty"` // Webhook ID registered in dbt Cloud + WebhookSecret *string `json:"webhook_secret,omitempty"` // (Write-Only) Webhook secret used to authenticate incoming webhook requests + HasWebhookSecret *bool `json:"has_webhook_secret,omitempty"` // Whether the CI suite has a webhook secret configured + AssertValidatorConfigIsEnabled *bool `json:"assert_validator_config_is_enabled,omitempty"` // Whether assert validation is enabled for the CI suite + AssertValidatorConfigConcurrency *int64 `json:"assert_validator_config_concurrency,omitempty"` // Number of tests that should run concurrently during assert validation + AssertValidatorConfigSelectors *[]string `json:"assert_validator_config_selectors,omitempty"` // Explores that assert validation should run for (model_name/explore_name) + AssertValidatorConfigExclusions *[]string `json:"assert_validator_config_exclusions,omitempty"` // Explores that should be excluded from assert validation (model_name/explore_name) + ContentValidatorConfigIsEnabled *bool `json:"content_validator_config_is_enabled,omitempty"` // Whether content validation is enabled for the CI suite + ContentValidatorConfigExcludePersonal *bool `json:"content_validator_config_exclude_personal,omitempty"` // Whether content validation should ignore personal folders + ContentValidatorConfigIncremental *bool `json:"content_validator_config_incremental,omitempty"` // Whether content should validate incrementally + ContentValidatorConfigExcludeFolders *[]string `json:"content_validator_config_exclude_folders,omitempty"` // Folders whose content should not be validated + ContentValidatorConfigIncludeFolders *[]string `json:"content_validator_config_include_folders,omitempty"` // Folders whose content should be validated + ContentValidatorConfigSelectors *[]string `json:"content_validator_config_selectors,omitempty"` // Explores whose content should be validated (model_name/explore_name) + ContentValidatorConfigExclusions *[]string `json:"content_validator_config_exclusions,omitempty"` // Explores that should be excluded from content validation (model_name/explore_name) + LookmlValidatorConfigIsEnabled *bool `json:"lookml_validator_config_is_enabled,omitempty"` // Whether LookML validation is enabled for the CI suite + LookmlValidatorConfigSeverity *string `json:"lookml_validator_config_severity,omitempty"` // Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + LookmlValidatorConfigTimeout *int64 `json:"lookml_validator_config_timeout,omitempty"` // Amount of time after which LookML Validation should stop running + StyleValidatorConfigIsEnabled *bool `json:"style_validator_config_is_enabled,omitempty"` // Whether LookML Style Validator is enabled for the CI suite + StyleValidatorConfigIncremental *bool `json:"style_validator_config_incremental,omitempty"` // Whether LookML Style Validator should run incrementally on changed LookML files only + SqlValidatorConfigIsEnabled *bool `json:"sql_validator_config_is_enabled,omitempty"` // Whether SQL validation is enabled for the CI suite + SqlValidatorConfigFailFast *bool `json:"sql_validator_config_fail_fast,omitempty"` // Whether SQL validation should stop after the first failure + SqlValidatorConfigIncremental *bool `json:"sql_validator_config_incremental,omitempty"` // Whether SQL should validate incrementally + SqlValidatorConfigIgnoreHidden *bool `json:"sql_validator_config_ignore_hidden,omitempty"` // Whether SQL validation should ignore hidden fields + SqlValidatorConfigQueryConcurrency *int64 `json:"sql_validator_config_query_concurrency,omitempty"` // Number of queries that should run concurrently during SQL validation + SqlValidatorConfigChunkSize *int64 `json:"sql_validator_config_chunk_size,omitempty"` // The max number of rows that should be returned for each query + SqlValidatorConfigSelectors *[]string `json:"sql_validator_config_selectors,omitempty"` // Explores whose sql should be validated (model_name/explore_name) + SqlValidatorConfigExclusions *[]string `json:"sql_validator_config_exclusions,omitempty"` // Explores that should be excluded from SQL validation (model_name/explore_name) + UpstreamTriggerIsEnabled *bool `json:"upstream_trigger_is_enabled,omitempty"` // Whether the CI suite upstream project imports trigger is active + UpstreamProjects *[]string `json:"upstream_projects,omitempty"` // Names of upstream projects subscribed for pull request triggers +} + type ProjectError struct { Code *string `json:"code,omitempty"` // A stable token that uniquely identifies this class of error, ignoring parameter values. Error message text may vary due to parameters or localization, but error codes do not. For example, a "File not found" error will have the same error code regardless of the filename in question or the user's display language Severity *string `json:"severity,omitempty"` // Severity: fatal, error, warning, info, success @@ -3200,10 +3185,6 @@ type ProjectFile struct { GitStatus *GitStatus `json:"git_status,omitempty"` } -type ProjectRun struct { - Run *Run `json:"run,omitempty"` -} - type ProjectValidation struct { Errors *[]ProjectError `json:"errors,omitempty"` // A list of project errors ProjectDigest *string `json:"project_digest,omitempty"` // A hash value computed from the project's current state @@ -3609,6 +3590,15 @@ type RequestFolderChildrenSearch struct { Name *string `json:"name,omitempty"` // Match folder name. } +// Dynamically generated request type for get_continuous_integration_suites +type RequestGetContinuousIntegrationSuites struct { + ProjectId string `json:"project_id"` // Project Id + Fields *string `json:"fields,omitempty"` // Requested fields + Limit *int64 `json:"limit,omitempty"` // Number of suites to return (min 1, max 100, default 50) + Offset *int64 `json:"offset,omitempty"` // Row offset at which to fetch suites + CreatedAt *time.Time `json:"created_at,omitempty"` // Time at which to fetch suites +} + // Dynamically generated request type for graph_derived_tables_for_model type RequestGraphDerivedTablesForModel struct { Model string `json:"model"` // The name of the Lookml model. @@ -3854,6 +3844,19 @@ type RequestSearchContentViews struct { FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression } +// Dynamically generated request type for search_continuous_integration_runs +type RequestSearchContinuousIntegrationRuns struct { + ProjectId string `json:"project_id"` // Project Id + Fields *string `json:"fields,omitempty"` // Requested fields + SuiteId *string `json:"suite_id,omitempty"` // Filter by suite id. Can be a comma-separated list of ids. + Status *string `json:"status,omitempty"` // Filter by status. Can be a comma-separated list of statuses. + UserId *string `json:"user_id,omitempty"` // Filter by user id. Can be a comma-separated list of ids. + TriggerType *string `json:"trigger_type,omitempty"` // Filter by trigger type. Can be a comma-separated list of types. + Limit *int64 `json:"limit,omitempty"` // Number of results to return (min 1, max 100, default 50, used with offset) + Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning. (used with limit) + Sorts *string `json:"sorts,omitempty"` // One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at +} + // Dynamically generated request type for search_conversations type RequestSearchConversations struct { Id *string `json:"id,omitempty"` // Match conversation id. Can be a comma-separated list of ids. @@ -3977,12 +3980,12 @@ type RequestSearchGroupsWithRoles struct { // Dynamically generated request type for search_lookml_dashboards type RequestSearchLookmlDashboards struct { FolderId *string `json:"folder_id,omitempty"` // Filter on a particular folder. - Title *string `json:"title,omitempty"` // Match LookML Dashboard title. + Title *string `json:"title,omitempty"` // Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title. ContentFavoriteId *string `json:"content_favorite_id,omitempty"` // Filter on a content favorite id. Fields *string `json:"fields,omitempty"` // Requested fields. Limit *int64 `json:"limit,omitempty"` // Number of results to return. (used with offset and takes priority over page and per_page) Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - Sorts *string `json:"sorts,omitempty"` // One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status] + Sorts *string `json:"sorts,omitempty"` // One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title. } // Dynamically generated request type for search_looks @@ -4091,6 +4094,10 @@ type RequestSearchScheduledPlans struct { Recipient *string `json:"recipient,omitempty"` // Match recipient address. DestinationType *string `json:"destination_type,omitempty"` // Match scheduled plan's destination type. DeliveryFormat *string `json:"delivery_format,omitempty"` // Match scheduled plan's delivery format. + AllStates *bool `json:"all_states,omitempty"` // Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag). + RunOnce *bool `json:"run_once,omitempty"` // Match Scheduled plan's run_once. + Enabled *bool `json:"enabled,omitempty"` // Match Scheduled plan's enabled status. + LastRunStatus *string `json:"last_run_status,omitempty"` // Match scheduled plan's last run status. FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression } @@ -4273,25 +4280,6 @@ type RoleSearch struct { UsersUrl *string `json:"users_url,omitempty"` // Link to get list of users with this role } -type Run struct { - RunId *string `json:"run_id,omitempty"` // ID of the CI run - CreatedAt *time.Time `json:"created_at,omitempty"` // Time and date that the CI run was initiated - StartedAt *time.Time `json:"started_at,omitempty"` // Time and date that the CI run began executing - FinishedAt *time.Time `json:"finished_at,omitempty"` // Time and date that the CI run completed - StatusUrl *string `json:"status_url,omitempty"` // Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite - Status *string `json:"status,omitempty"` // Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) - GitService *string `json:"git_service,omitempty"` // Git service for CI run (e.g. GitHub) - GitState *CIGitState `json:"git_state,omitempty"` - Result *RunResult `json:"result,omitempty"` - Schedule *CIScheduleTrigger `json:"schedule,omitempty"` - TargetBranch *string `json:"target_branch,omitempty"` // Git branch that the CI run compares against during validation, used for incremental runs - Title *string `json:"title,omitempty"` // Name of the CI suite - Trigger *string `json:"trigger,omitempty"` // Trigger for CI run (unknown, manual, schedule, change_request) - ChangeRequest *CIChangeRequest `json:"change_request,omitempty"` - SuiteId *string `json:"suite_id,omitempty"` // ID of the CI suite - Username *string `json:"username,omitempty"` // Username of the user who triggered the CI run, if the CI run was manually triggered -} - type RunningQueries struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Id *string `json:"id,omitempty"` // Unique Id @@ -4317,18 +4305,6 @@ type RunningQueries struct { SqlInterfaceSql *string `json:"sql_interface_sql,omitempty"` // SQL text of the SQL Interface query as run } -type RunResult struct { - SqlResult *SqlValidatorResult `json:"sql_result,omitempty"` - SqlError *GenericError `json:"sql_error,omitempty"` - AssertResult *AssertValidatorResult `json:"assert_result,omitempty"` - AssertError *GenericError `json:"assert_error,omitempty"` - ContentResult *ContentValidatorResult `json:"content_result,omitempty"` - ContentError *GenericError `json:"content_error,omitempty"` - LookmlResult *LookMLValidatorResult `json:"lookml_result,omitempty"` - LookmlError *GenericError `json:"lookml_error,omitempty"` - GenericError *GenericError `json:"generic_error,omitempty"` -} - type SamlConfig struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Enabled *bool `json:"enabled,omitempty"` // Enable/Disable Saml authentication for the server @@ -4442,6 +4418,7 @@ type ScheduledPlan struct { ColorTheme *string `json:"color_theme,omitempty"` // Color scheme of the dashboard if applicable LongTables *bool `json:"long_tables,omitempty"` // Whether or not to expand table vis to full length PdfPageBreaks *bool `json:"pdf_page_breaks,omitempty"` // Whether or not to add page breaks between tabs + IncludeFilters *bool `json:"include_filters,omitempty"` // Whether or not to include filters context TabIds *[]string `json:"tab_ids,omitempty"` // IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) InlineTableWidth *int64 `json:"inline_table_width,omitempty"` // The pixel width at which we render the inline table visualizations QueryId *string `json:"query_id,omitempty"` // Query id @@ -4449,10 +4426,12 @@ type ScheduledPlan struct { CreatedAt *time.Time `json:"created_at,omitempty"` // Date and time when ScheduledPlan was created UpdatedAt *time.Time `json:"updated_at,omitempty"` // Date and time when ScheduledPlan was last updated Title *string `json:"title,omitempty"` // Title + ContentTitle *string `json:"content_title,omitempty"` // Title of the underlying content (Dashboard, Look, LookML Dashboard, or Explore) associated with this ScheduledPlan User *UserPublic `json:"user,omitempty"` - NextRunAt *time.Time `json:"next_run_at,omitempty"` // When the ScheduledPlan will next run (null if running once) - LastRunAt *time.Time `json:"last_run_at,omitempty"` // When the ScheduledPlan was last run - Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object + NextRunAt *time.Time `json:"next_run_at,omitempty"` // When the ScheduledPlan will next run (null if running once) + LastRunAt *time.Time `json:"last_run_at,omitempty"` // When the ScheduledPlan was last run + LastRunStatus *string `json:"last_run_status,omitempty"` // Status of the last run for this ScheduledPlan + Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object } type ScheduledPlanDestination struct { @@ -4466,6 +4445,7 @@ type ScheduledPlanDestination struct { Type *string `json:"type,omitempty"` // Type of the address ('email', 'webhook', 's3', or 'sftp') Parameters *string `json:"parameters,omitempty"` // JSON object containing parameters for external scheduling. For Amazon S3, this requires keys and values for access_key_id and region. For SFTP, this requires a key and value for username. SecretParameters *string `json:"secret_parameters,omitempty"` // (Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password. + IncludeFilters *bool `json:"include_filters,omitempty"` // Whether or not to include filters context Message *string `json:"message,omitempty"` // Optional message to be included in scheduled emails } @@ -4585,15 +4565,16 @@ type Setting struct { MarketplaceTermsAccepted *bool `json:"marketplace_terms_accepted,omitempty"` // Accept marketplace terms by setting this value to true, or get the current status. Marketplace terms CANNOT be declined once accepted. Accepting marketplace terms automatically enables the marketplace. The marketplace can still be disabled after it has been enabled. PrivatelabelConfiguration *PrivatelabelConfiguration `json:"privatelabel_configuration,omitempty"` CustomWelcomeEmail *CustomWelcomeEmail `json:"custom_welcome_email,omitempty"` - OnboardingEnabled *bool `json:"onboarding_enabled,omitempty"` // Toggle onboarding on or off - Timezone *string `json:"timezone,omitempty"` // Change instance-wide default timezone - AllowUserTimezones *bool `json:"allow_user_timezones,omitempty"` // Toggle user-specific timezones on or off - DataConnectorDefaultEnabled *bool `json:"data_connector_default_enabled,omitempty"` // Toggle default future connectors on or off - HostUrl *string `json:"host_url,omitempty"` // Change the base portion of your Looker instance URL setting - OverrideWarnings *bool `json:"override_warnings,omitempty"` // (Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings. - 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. - EmbedEnabled *bool `json:"embed_enabled,omitempty"` // True if embedding is enabled https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise + OnboardingEnabled *bool `json:"onboarding_enabled,omitempty"` // Toggle onboarding on or off + Timezone *string `json:"timezone,omitempty"` // Change instance-wide default timezone + AllowUserTimezones *bool `json:"allow_user_timezones,omitempty"` // Toggle user-specific timezones on or off + DataConnectorDefaultEnabled *bool `json:"data_connector_default_enabled,omitempty"` // Toggle default future connectors on or off + HostUrl *string `json:"host_url,omitempty"` // Change the base portion of your Looker instance URL setting + OverrideWarnings *bool `json:"override_warnings,omitempty"` // (Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings. + 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. + EmbedVisModernizationDefault *bool `json:"embed_vis_modernization_default,omitempty"` // Default net new visualizations in embedded context to Modern theme + EmbedEnabled *bool `json:"embed_enabled,omitempty"` // True if embedding is enabled https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise EmbedConfig *EmbedConfig `json:"embed_config,omitempty"` LoginNotificationEnabled *bool `json:"login_notification_enabled,omitempty"` // Login notification enabled LoginNotificationText *string `json:"login_notification_text,omitempty"` // Login notification text @@ -4689,42 +4670,6 @@ type SqlQueryCreate struct { VisConfig *map[string]interface{} `json:"vis_config,omitempty"` // Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. } -type SqlValidatorError struct { - Type *string `json:"type,omitempty"` // A URI reference that identifies the problem type - Title *string `json:"title,omitempty"` // Overview of the error - Detail *string `json:"detail,omitempty"` // Detail of the error - Status *string `json:"status,omitempty"` // The HTTP status code for the problem - Instance *string `json:"instance,omitempty"` // URI reference that identifies the specific occurrence of the problem - Model *string `json:"model,omitempty"` // LookML model that contains the Explore that failed SQL validation - Explore *string `json:"explore,omitempty"` // LookML Explore that failed SQL validation - Message *string `json:"message,omitempty"` // Message returned by the SQL validation - ExploreUrl *string `json:"explore_url,omitempty"` // URL to the Explore - LookmlUrl *string `json:"lookml_url,omitempty"` // URL to the LookML that caused the error - Dimension *string `json:"dimension,omitempty"` // LookML dimension that caused the error - LineNumber *string `json:"line_number,omitempty"` // Line of the error in the LookML file -} - -type SqlValidatorErrorItem struct { - SqlError *SqlValidatorError `json:"sql_error,omitempty"` - GenericError *GenericError `json:"generic_error,omitempty"` -} - -type SqlValidatorResult struct { - Name *string `json:"name,omitempty"` // Name of the validator (sql) - Incremental *bool `json:"incremental,omitempty"` // Whether the validation was incremental - Status *string `json:"status,omitempty"` // Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - Result *[]SqlValidatorTestedExplore `json:"result,omitempty"` // The results of tested Explores -} - -type SqlValidatorTestedExplore struct { - Model *string `json:"model,omitempty"` // LookML model that was tested - Explore *string `json:"explore,omitempty"` // LookML Explore that was tested - Status *string `json:"status,omitempty"` // Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - SkipReason *string `json:"skip_reason,omitempty"` // Reason the validation was skipped - ErrorCount *int64 `json:"error_count,omitempty"` // Total number of failed validations - Errors *[]SqlValidatorErrorItem `json:"errors,omitempty"` // Details of the LookML that failed SQL validation -} - type SshPublicKey struct { PublicKey *string `json:"public_key,omitempty"` // The SSH public key created for this instance } @@ -4848,51 +4793,54 @@ type Theme struct { } type ThemeSettings struct { - BackgroundColor *string `json:"background_color,omitempty"` // Default background color - BaseFontSize *string `json:"base_font_size,omitempty"` // Base font size for scaling fonts (only supported by legacy dashboards) - ColorCollectionId *string `json:"color_collection_id,omitempty"` // Optional. ID of color collection to use with the theme. Use an empty string for none. - FontColor *string `json:"font_color,omitempty"` // Default font color - FontFamily *string `json:"font_family,omitempty"` // Primary font family - FontSource *string `json:"font_source,omitempty"` // Source specification for font - InfoButtonColor *string `json:"info_button_color,omitempty"` // (DEPRECATED) Info button color - PrimaryButtonColor *string `json:"primary_button_color,omitempty"` // Primary button color - ShowFiltersBar *bool `json:"show_filters_bar,omitempty"` // Toggle to show filters. Defaults to true. - ShowTitle *bool `json:"show_title,omitempty"` // Toggle to show the title. Defaults to true. - TextTileTextColor *string `json:"text_tile_text_color,omitempty"` // Text color for text tiles - TileBackgroundColor *string `json:"tile_background_color,omitempty"` // Background color for tiles - TextTileBackgroundColor *string `json:"text_tile_background_color,omitempty"` // Background color for text tiles - TileTextColor *string `json:"tile_text_color,omitempty"` // Text color for tiles - TitleColor *string `json:"title_color,omitempty"` // Color for titles - WarnButtonColor *string `json:"warn_button_color,omitempty"` // (DEPRECATED) Warning button color - TileTitleAlignment *string `json:"tile_title_alignment,omitempty"` // The text alignment of tile titles (New Dashboards) - TileShadow *bool `json:"tile_shadow,omitempty"` // Toggles the tile shadow (not supported) - ShowLastUpdatedIndicator *bool `json:"show_last_updated_indicator,omitempty"` // Toggle to show the dashboard last updated indicator. Defaults to true. - ShowReloadDataIcon *bool `json:"show_reload_data_icon,omitempty"` // Toggle to show reload data icon/button. Defaults to true. - ShowDashboardMenu *bool `json:"show_dashboard_menu,omitempty"` // Toggle to show the dashboard actions menu. Defaults to true. - ShowFiltersToggle *bool `json:"show_filters_toggle,omitempty"` // Toggle to show the filters icon/toggle. Defaults to true. - ShowDashboardHeader *bool `json:"show_dashboard_header,omitempty"` // Toggle to show the dashboard header. Defaults to true. - CenterDashboardTitle *bool `json:"center_dashboard_title,omitempty"` // Toggle to center the dashboard title. Defaults to false. - DashboardTitleFontSize *string `json:"dashboard_title_font_size,omitempty"` // Dashboard title font size. - BoxShadow *string `json:"box_shadow,omitempty"` // Default box shadow. - PageMarginTop *string `json:"page_margin_top,omitempty"` // Dashboard page margin top. - PageMarginBottom *string `json:"page_margin_bottom,omitempty"` // Dashboard page margin bottom. - PageMarginSides *string `json:"page_margin_sides,omitempty"` // Dashboard page margin left and right. - ShowExploreHeader *bool `json:"show_explore_header,omitempty"` // Toggle to show the explore page header. Defaults to true. - ShowExploreTitle *bool `json:"show_explore_title,omitempty"` // Toggle to show the explore page title. Defaults to true. - ShowExploreLastRun *bool `json:"show_explore_last_run,omitempty"` // Toggle to show the explore page last run. Defaults to true. - ShowExploreTimezone *bool `json:"show_explore_timezone,omitempty"` // Toggle to show the explore page timezone. Defaults to true. - ShowExploreRunStopButton *bool `json:"show_explore_run_stop_button,omitempty"` // Toggle to show the explore page run button. Defaults to true. - ShowExploreActionsButton *bool `json:"show_explore_actions_button,omitempty"` // Toggle to show the explore page actions button. Defaults to true. - ShowLookHeader *bool `json:"show_look_header,omitempty"` // Toggle to show the look page header. Defaults to true. - ShowLookTitle *bool `json:"show_look_title,omitempty"` // Toggle to show the look page title. Defaults to true. - ShowLookLastRun *bool `json:"show_look_last_run,omitempty"` // Toggle to show the look page last run. Defaults to true. - ShowLookTimezone *bool `json:"show_look_timezone,omitempty"` // Toggle to show the look page timezone Defaults to true. - ShowLookRunStopButton *bool `json:"show_look_run_stop_button,omitempty"` // Toggle to show the look page run button. Defaults to true. - ShowLookActionsButton *bool `json:"show_look_actions_button,omitempty"` // Toggle to show the look page actions button. Defaults to true. - TileTitleFontSize *string `json:"tile_title_font_size,omitempty"` // Font size for tiles. - ColumnGapSize *string `json:"column_gap_size,omitempty"` // The vertical gap/gutter size between tiles. - RowGapSize *string `json:"row_gap_size,omitempty"` // The horizontal gap/gutter size between tiles. - BorderRadius *string `json:"border_radius,omitempty"` // The border radius for tiles. + BackgroundColor *string `json:"background_color,omitempty"` // Default background color + BackgroundImageUrl *string `json:"background_image_url,omitempty"` // URL for background image + BackgroundImageId *string `json:"background_image_id,omitempty"` // Optional. ID of theme background image. + BackgroundOpacity *float32 `json:"background_opacity,omitempty"` // Background image opacity (0.0 to 1.0). + BaseFontSize *string `json:"base_font_size,omitempty"` // Base font size for scaling fonts (only supported by legacy dashboards) + ColorCollectionId *string `json:"color_collection_id,omitempty"` // Optional. ID of color collection to use with the theme. Use an empty string for none. + FontColor *string `json:"font_color,omitempty"` // Default font color + FontFamily *string `json:"font_family,omitempty"` // Primary font family + FontSource *string `json:"font_source,omitempty"` // Source specification for font + InfoButtonColor *string `json:"info_button_color,omitempty"` // (DEPRECATED) Info button color + PrimaryButtonColor *string `json:"primary_button_color,omitempty"` // Primary button color + ShowFiltersBar *bool `json:"show_filters_bar,omitempty"` // Toggle to show filters. Defaults to true. + ShowTitle *bool `json:"show_title,omitempty"` // Toggle to show the title. Defaults to true. + TextTileTextColor *string `json:"text_tile_text_color,omitempty"` // Text color for text tiles + TileBackgroundColor *string `json:"tile_background_color,omitempty"` // Background color for tiles + TextTileBackgroundColor *string `json:"text_tile_background_color,omitempty"` // Background color for text tiles + TileTextColor *string `json:"tile_text_color,omitempty"` // Text color for tiles + TitleColor *string `json:"title_color,omitempty"` // Color for titles + WarnButtonColor *string `json:"warn_button_color,omitempty"` // (DEPRECATED) Warning button color + TileTitleAlignment *string `json:"tile_title_alignment,omitempty"` // The text alignment of tile titles (New Dashboards) + TileShadow *bool `json:"tile_shadow,omitempty"` // Toggles the tile shadow (not supported) + ShowLastUpdatedIndicator *bool `json:"show_last_updated_indicator,omitempty"` // Toggle to show the dashboard last updated indicator. Defaults to true. + ShowReloadDataIcon *bool `json:"show_reload_data_icon,omitempty"` // Toggle to show reload data icon/button. Defaults to true. + ShowDashboardMenu *bool `json:"show_dashboard_menu,omitempty"` // Toggle to show the dashboard actions menu. Defaults to true. + ShowFiltersToggle *bool `json:"show_filters_toggle,omitempty"` // Toggle to show the filters icon/toggle. Defaults to true. + ShowDashboardHeader *bool `json:"show_dashboard_header,omitempty"` // Toggle to show the dashboard header. Defaults to true. + CenterDashboardTitle *bool `json:"center_dashboard_title,omitempty"` // Toggle to center the dashboard title. Defaults to false. + DashboardTitleFontSize *string `json:"dashboard_title_font_size,omitempty"` // Dashboard title font size. + BoxShadow *string `json:"box_shadow,omitempty"` // Default box shadow. + PageMarginTop *string `json:"page_margin_top,omitempty"` // Dashboard page margin top. + PageMarginBottom *string `json:"page_margin_bottom,omitempty"` // Dashboard page margin bottom. + PageMarginSides *string `json:"page_margin_sides,omitempty"` // Dashboard page margin left and right. + ShowExploreHeader *bool `json:"show_explore_header,omitempty"` // Toggle to show the explore page header. Defaults to true. + ShowExploreTitle *bool `json:"show_explore_title,omitempty"` // Toggle to show the explore page title. Defaults to true. + ShowExploreLastRun *bool `json:"show_explore_last_run,omitempty"` // Toggle to show the explore page last run. Defaults to true. + ShowExploreTimezone *bool `json:"show_explore_timezone,omitempty"` // Toggle to show the explore page timezone. Defaults to true. + ShowExploreRunStopButton *bool `json:"show_explore_run_stop_button,omitempty"` // Toggle to show the explore page run button. Defaults to true. + ShowExploreActionsButton *bool `json:"show_explore_actions_button,omitempty"` // Toggle to show the explore page actions button. Defaults to true. + ShowLookHeader *bool `json:"show_look_header,omitempty"` // Toggle to show the look page header. Defaults to true. + ShowLookTitle *bool `json:"show_look_title,omitempty"` // Toggle to show the look page title. Defaults to true. + ShowLookLastRun *bool `json:"show_look_last_run,omitempty"` // Toggle to show the look page last run. Defaults to true. + ShowLookTimezone *bool `json:"show_look_timezone,omitempty"` // Toggle to show the look page timezone Defaults to true. + ShowLookRunStopButton *bool `json:"show_look_run_stop_button,omitempty"` // Toggle to show the look page run button. Defaults to true. + ShowLookActionsButton *bool `json:"show_look_actions_button,omitempty"` // Toggle to show the look page actions button. Defaults to true. + TileTitleFontSize *string `json:"tile_title_font_size,omitempty"` // Font size for tiles. + ColumnGapSize *string `json:"column_gap_size,omitempty"` // The vertical gap/gutter size between tiles. + RowGapSize *string `json:"row_gap_size,omitempty"` // The horizontal gap/gutter size between tiles. + BorderRadius *string `json:"border_radius,omitempty"` // The border radius for tiles. } type Timezone struct { @@ -4962,7 +4910,7 @@ type UserAttribute struct { Id *string `json:"id,omitempty"` // Unique Id Name string `json:"name"` // Name of user attribute Label string `json:"label"` // Human-friendly label for user attribute - Type string `json:"type"` // Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + Type string `json:"type"` // Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") DefaultValue *string `json:"default_value,omitempty"` // Default value for when no value is set on the user IsSystem *bool `json:"is_system,omitempty"` // Attribute is a system default IsPermanent *bool `json:"is_permanent,omitempty"` // Attribute is permanent and cannot be deleted @@ -5016,6 +4964,24 @@ type UserAttributeWithValue struct { HiddenValueDomainWhitelist *string `json:"hidden_value_domain_whitelist,omitempty"` // If this user attribute is hidden, allowed list of destinations to which it may be sent. } +type UserDbConnection struct { + Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object + Id *string `json:"id,omitempty"` // ID of the connection + Name *string `json:"name,omitempty"` // Name of the connection (must match virtual namespace pattern) + UserId *int64 `json:"user_id,omitempty"` // ID of the user who owns the connection + Dialect *string `json:"dialect,omitempty"` // Database dialect name + AuthType *string `json:"auth_type,omitempty"` // Authentication type (oauth, service_account, password) + Host *string `json:"host,omitempty"` // Host name/address of server + Port *string `json:"port,omitempty"` // Port number on server + Database *string `json:"database,omitempty"` // Database name + Schema *string `json:"schema,omitempty"` // Schema name + JdbcAdditionalParams *string `json:"jdbc_additional_params,omitempty"` // Additional JDBC parameters + OauthApplicationId *int64 `json:"oauth_application_id,omitempty"` // OAuth application ID (if auth_type is oauth) + Enabled *bool `json:"enabled,omitempty"` // Whether this connection is enabled + CreatedAt *time.Time `json:"created_at,omitempty"` // When the connection was created + UpdatedAt *time.Time `json:"updated_at,omitempty"` // When the connection was last updated +} + type UserEmailOnly struct { Email string `json:"email"` // Email Address } @@ -5113,7 +5079,7 @@ type Workspace struct { } // Dynamic writeable type for Agent removes: -// 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 +// 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, is_lookml, lookml_agent_id, lookml_edit_uri type WriteAgent struct { CreatedByUserId *string `json:"created_by_user_id,omitempty"` // User that created the Agent Name *string `json:"name,omitempty"` // Agent name @@ -5254,7 +5220,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_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 + // 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, is_lookml, lookml_agent_id, lookml_edit_uri } // Dynamic writeable type for ConversationMessage removes: @@ -5343,6 +5309,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"` + LayoutGranularity *string `json:"layout_granularity,omitempty"` // The layout granularity to apply to this dashboard (ie: default or granular) 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"` } @@ -5357,7 +5324,7 @@ type WriteDashboardBase struct { } // Dynamic writeable type for DashboardElement removes: -// can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html +// can, body_text_as_html, group_id, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html, images type WriteDashboardElement struct { BodyText *string `json:"body_text,omitempty"` // Text tile body text DashboardId *string `json:"dashboard_id,omitempty"` // Id of Dashboard @@ -5387,6 +5354,7 @@ type WriteDashboardElement struct { AriaDescription *string `json:"aria_description,omitempty"` // Custom ARIA description text CertificationMetadata *WriteCertification `json:"certification_metadata,omitempty"` // Dynamic writeable type for Certification removes: // ui_status, user_name, updated_at + ImageId *string `json:"image_id,omitempty"` // ID of Dashboard Image } // Dynamic writeable type for DashboardFilter removes: @@ -5434,6 +5402,7 @@ type WriteDashboardLayoutComponent struct { GranularColumn *int64 `json:"granular_column,omitempty"` // Column (granular layout) GranularWidth *int64 `json:"granular_width,omitempty"` // Width (granular layout) GranularHeight *int64 `json:"granular_height,omitempty"` // Height (granular layout) + GroupId *string `json:"group_id,omitempty"` // Id of parent Dashboard Layout Component group } // Dynamic writeable type for DashboardLookml removes: @@ -5454,13 +5423,16 @@ type WriteDatagroup struct { // can, dialect, snippets, pdts_enabled, named_driver_version_actual, has_password, uses_oauth, uses_instance_oauth, uses_service_auth, supports_data_studio_link, created_at, user_id, example, last_regen_at, last_reap_at, managed, default_bq_connection, p4sa_name type WriteDBConnection struct { Name *string `json:"name,omitempty"` // Name of the connection. Also used as the unique identifier + ProjectId *string `json:"project_id,omitempty"` // ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. NamedDriverVersionRequested *string `json:"named_driver_version_requested,omitempty"` // Requested JDBC driver version name Host *string `json:"host,omitempty"` // Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. Port *string `json:"port,omitempty"` // Port number on server. If the connection is over an SSH tunnel, then the local port associated with the SSH tunnel. Username *string `json:"username,omitempty"` // Username for server authentication Password *string `json:"password,omitempty"` // (Write-Only) Password for server authentication + ServiceAccountAuthEnabled *bool `json:"service_account_auth_enabled,omitempty"` // Whether Service Account OAuth authentication is enabled for this connection UsesKeyPairAuth *bool `json:"uses_key_pair_auth,omitempty"` // Whether the connection uses key-pair for authentication. Certificate *string `json:"certificate,omitempty"` // (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + UserAttrCertificate *string `json:"user_attr_certificate,omitempty"` // The name of the user attribute containing the connection certificate. FileType *string `json:"file_type,omitempty"` // (Write-Only) Certificate keyfile type - .json, .p8 or .p12 Database *string `json:"database,omitempty"` // Database name DbTimezone *string `json:"db_timezone,omitempty"` // Time zone of database @@ -5531,7 +5503,7 @@ type WriteDBConnectionOverride struct { } // Dynamic writeable type for EmbedConfig removes: -// permissions, embed_enabled +// embed_vis_modernization_default, 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 @@ -5579,18 +5551,11 @@ 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 GitDiagnosticReport removes: -// can, id, project_id, user_id, state, status, created_at, updated_at, issues -type WriteGitDiagnosticReport struct { - ProjectType *string `json:"project_type,omitempty"` // Project structure type. -} - // Dynamic writeable type for GoldenQuery removes: -// can, id, query_id, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at, explore, model, fields, filters, sorts, limit, client_id +// can, id, query_id, is_active, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at, explore, model, fields, filters, sorts, limit, client_id, pivots, dynamic_fields 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: @@ -5740,6 +5705,8 @@ type WriteMcpTools struct { // description, category, access_level GetExplores *WriteMcpToolSetting `json:"get_explores,omitempty"` // Dynamic writeable type for McpToolSetting removes: // description, category, access_level + GetFieldValueSuggestions *WriteMcpToolSetting `json:"get_field_value_suggestions,omitempty"` // Dynamic writeable type for McpToolSetting removes: + // description, category, access_level GetFilters *WriteMcpToolSetting `json:"get_filters,omitempty"` // Dynamic writeable type for McpToolSetting removes: // description, category, access_level GetLooks *WriteMcpToolSetting `json:"get_looks,omitempty"` // Dynamic writeable type for McpToolSetting removes: @@ -5792,6 +5759,10 @@ 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 + RenderVisualization *WriteMcpToolSetting `json:"render_visualization,omitempty"` // Dynamic writeable type for McpToolSetting removes: + // description, category, access_level + RenderDashboard *WriteMcpToolSetting `json:"render_dashboard,omitempty"` // Dynamic writeable type for McpToolSetting removes: + // description, category, access_level } // Dynamic writeable type for McpToolSetting removes: @@ -5830,11 +5801,12 @@ type WriteModelSet struct { // Dynamic writeable type for OauthClientApp removes: // can, client_guid, tokens_invalid_before, activated_users type WriteOauthClientApp struct { - RedirectUri *string `json:"redirect_uri,omitempty"` // The uri with which this application will receive an auth code by browser redirect. - DisplayName *string `json:"display_name,omitempty"` // The application's display name - Description *string `json:"description,omitempty"` // A description of the application that will be displayed to users - Enabled *bool `json:"enabled,omitempty"` // When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. - GroupId *string `json:"group_id,omitempty"` // If set, only Looker users who are members of this group can use this web app with Looker. If group_id is not set, any Looker user may use this app to access this Looker instance + RedirectUri *string `json:"redirect_uri,omitempty"` // (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) + RedirectUris *[]string `json:"redirect_uris,omitempty"` // The authorized uris for which this application will receive an auth code by browser redirect. + DisplayName *string `json:"display_name,omitempty"` // The application's display name + Description *string `json:"description,omitempty"` // A description of the application that will be displayed to users + Enabled *bool `json:"enabled,omitempty"` // When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. + GroupId *string `json:"group_id,omitempty"` // If set, only Looker users who are members of this group can use this web app with Looker. If group_id is not set, any Looker user may use this app to access this Looker instance } // Dynamic writeable type for OIDCConfig removes: @@ -5925,6 +5897,53 @@ type WriteProject struct { DependencyStatus *string `json:"dependency_status,omitempty"` // Status of dependencies in your manifest & lockfile } +// Dynamic writeable type for ProjectCISuite removes: +// can, id, project_id, created_at, updated_at, change_request_trigger_hook_id, guid, dbt_cloud_webhook_id, has_webhook_secret +type WriteProjectCISuite struct { + Name *string `json:"name,omitempty"` // Name of the CI suite + ScheduleTriggerIsEnabled *bool `json:"schedule_trigger_is_enabled,omitempty"` // Whether the CI suite schedule trigger is active + ScheduleTriggerCrontab *string `json:"schedule_trigger_crontab,omitempty"` // Crontab that the CI suite is scheduled to run + ScheduleTriggerTimezone *string `json:"schedule_trigger_timezone,omitempty"` // Timezone for the CI suite schedule + AlertingEnabled *bool `json:"alerting_enabled,omitempty"` // Whether alerting is enabled for the CI suite + AlertEmailAddresses *[]string `json:"alert_email_addresses,omitempty"` // Email addresses to send alerts to + AlertOnFailedStatus *bool `json:"alert_on_failed_status,omitempty"` // Whether to alert on failed status + AlertOnErrorStatus *bool `json:"alert_on_error_status,omitempty"` // Whether to alert on error status + AlertOnPassedStatus *bool `json:"alert_on_passed_status,omitempty"` // Whether to alert on passed status + AlertOnCancelledStatus *bool `json:"alert_on_cancelled_status,omitempty"` // Whether to alert on cancelled status + ChangeRequestTriggerIsEnabled *bool `json:"change_request_trigger_is_enabled,omitempty"` // Whether the CI suite change request trigger is active + ChangeRequestTriggerTargetBranch *string `json:"change_request_trigger_target_branch,omitempty"` // Git branch that should be compared against when the CI suite is run, used when the run is incremental + DbtCloudTriggerIsEnabled *bool `json:"dbt_cloud_trigger_is_enabled,omitempty"` // Whether the CI suite dbt Cloud trigger is active + DbtCloudTriggerJobId *int64 `json:"dbt_cloud_trigger_job_id,omitempty"` // Job ID of the dbt Cloud job + DbtCloudTriggerUserAttributeId *string `json:"dbt_cloud_trigger_user_attribute_id,omitempty"` // User Attribute ID used for schema substitution + WebhookSecret *string `json:"webhook_secret,omitempty"` // (Write-Only) Webhook secret used to authenticate incoming webhook requests + AssertValidatorConfigIsEnabled *bool `json:"assert_validator_config_is_enabled,omitempty"` // Whether assert validation is enabled for the CI suite + AssertValidatorConfigConcurrency *int64 `json:"assert_validator_config_concurrency,omitempty"` // Number of tests that should run concurrently during assert validation + AssertValidatorConfigSelectors *[]string `json:"assert_validator_config_selectors,omitempty"` // Explores that assert validation should run for (model_name/explore_name) + AssertValidatorConfigExclusions *[]string `json:"assert_validator_config_exclusions,omitempty"` // Explores that should be excluded from assert validation (model_name/explore_name) + ContentValidatorConfigIsEnabled *bool `json:"content_validator_config_is_enabled,omitempty"` // Whether content validation is enabled for the CI suite + ContentValidatorConfigExcludePersonal *bool `json:"content_validator_config_exclude_personal,omitempty"` // Whether content validation should ignore personal folders + ContentValidatorConfigIncremental *bool `json:"content_validator_config_incremental,omitempty"` // Whether content should validate incrementally + ContentValidatorConfigExcludeFolders *[]string `json:"content_validator_config_exclude_folders,omitempty"` // Folders whose content should not be validated + ContentValidatorConfigIncludeFolders *[]string `json:"content_validator_config_include_folders,omitempty"` // Folders whose content should be validated + ContentValidatorConfigSelectors *[]string `json:"content_validator_config_selectors,omitempty"` // Explores whose content should be validated (model_name/explore_name) + ContentValidatorConfigExclusions *[]string `json:"content_validator_config_exclusions,omitempty"` // Explores that should be excluded from content validation (model_name/explore_name) + LookmlValidatorConfigIsEnabled *bool `json:"lookml_validator_config_is_enabled,omitempty"` // Whether LookML validation is enabled for the CI suite + LookmlValidatorConfigSeverity *string `json:"lookml_validator_config_severity,omitempty"` // Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + LookmlValidatorConfigTimeout *int64 `json:"lookml_validator_config_timeout,omitempty"` // Amount of time after which LookML Validation should stop running + StyleValidatorConfigIsEnabled *bool `json:"style_validator_config_is_enabled,omitempty"` // Whether LookML Style Validator is enabled for the CI suite + StyleValidatorConfigIncremental *bool `json:"style_validator_config_incremental,omitempty"` // Whether LookML Style Validator should run incrementally on changed LookML files only + SqlValidatorConfigIsEnabled *bool `json:"sql_validator_config_is_enabled,omitempty"` // Whether SQL validation is enabled for the CI suite + SqlValidatorConfigFailFast *bool `json:"sql_validator_config_fail_fast,omitempty"` // Whether SQL validation should stop after the first failure + SqlValidatorConfigIncremental *bool `json:"sql_validator_config_incremental,omitempty"` // Whether SQL should validate incrementally + SqlValidatorConfigIgnoreHidden *bool `json:"sql_validator_config_ignore_hidden,omitempty"` // Whether SQL validation should ignore hidden fields + SqlValidatorConfigQueryConcurrency *int64 `json:"sql_validator_config_query_concurrency,omitempty"` // Number of queries that should run concurrently during SQL validation + SqlValidatorConfigChunkSize *int64 `json:"sql_validator_config_chunk_size,omitempty"` // The max number of rows that should be returned for each query + SqlValidatorConfigSelectors *[]string `json:"sql_validator_config_selectors,omitempty"` // Explores whose sql should be validated (model_name/explore_name) + SqlValidatorConfigExclusions *[]string `json:"sql_validator_config_exclusions,omitempty"` // Explores that should be excluded from SQL validation (model_name/explore_name) + UpstreamTriggerIsEnabled *bool `json:"upstream_trigger_is_enabled,omitempty"` // Whether the CI suite upstream project imports trigger is active + UpstreamProjects *[]string `json:"upstream_projects,omitempty"` // Names of upstream projects subscribed for pull request triggers +} + // Dynamic writeable type for Query removes: // can, id, slug, share_url, expanded_share_url, url, has_table_calculations type WriteQuery struct { @@ -6015,7 +6034,7 @@ type WriteSamlConfig struct { } // Dynamic writeable type for ScheduledPlan removes: -// id, created_at, updated_at, title, user, next_run_at, last_run_at, can +// id, created_at, updated_at, title, content_title, user, next_run_at, last_run_at, last_run_status, can type WriteScheduledPlan struct { Name *string `json:"name,omitempty"` // Name of this scheduled plan UserId *string `json:"user_id,omitempty"` // User Id which owns this scheduled plan @@ -6047,6 +6066,7 @@ type WriteScheduledPlan struct { ColorTheme *string `json:"color_theme,omitempty"` // Color scheme of the dashboard if applicable LongTables *bool `json:"long_tables,omitempty"` // Whether or not to expand table vis to full length PdfPageBreaks *bool `json:"pdf_page_breaks,omitempty"` // Whether or not to add page breaks between tabs + IncludeFilters *bool `json:"include_filters,omitempty"` // Whether or not to include filters context TabIds *[]string `json:"tab_ids,omitempty"` // IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) InlineTableWidth *int64 `json:"inline_table_width,omitempty"` // The pixel width at which we render the inline table visualizations QueryId *string `json:"query_id,omitempty"` // Query id @@ -6080,17 +6100,18 @@ type WriteSetting struct { MarketplaceTermsAccepted *bool `json:"marketplace_terms_accepted,omitempty"` // Accept marketplace terms by setting this value to true, or get the current status. Marketplace terms CANNOT be declined once accepted. Accepting marketplace terms automatically enables the marketplace. The marketplace can still be disabled after it has been enabled. PrivatelabelConfiguration *WritePrivatelabelConfiguration `json:"privatelabel_configuration,omitempty"` // Dynamic writeable type for PrivatelabelConfiguration removes: // logo_url, favicon_url - CustomWelcomeEmail *CustomWelcomeEmail `json:"custom_welcome_email,omitempty"` - OnboardingEnabled *bool `json:"onboarding_enabled,omitempty"` // Toggle onboarding on or off - Timezone *string `json:"timezone,omitempty"` // Change instance-wide default timezone - AllowUserTimezones *bool `json:"allow_user_timezones,omitempty"` // Toggle user-specific timezones on or off - DataConnectorDefaultEnabled *bool `json:"data_connector_default_enabled,omitempty"` // Toggle default future connectors on or off - HostUrl *string `json:"host_url,omitempty"` // Change the base portion of your Looker instance URL setting - OverrideWarnings *bool `json:"override_warnings,omitempty"` // (Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings. - 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: - // permissions, embed_enabled + CustomWelcomeEmail *CustomWelcomeEmail `json:"custom_welcome_email,omitempty"` + OnboardingEnabled *bool `json:"onboarding_enabled,omitempty"` // Toggle onboarding on or off + Timezone *string `json:"timezone,omitempty"` // Change instance-wide default timezone + AllowUserTimezones *bool `json:"allow_user_timezones,omitempty"` // Toggle user-specific timezones on or off + DataConnectorDefaultEnabled *bool `json:"data_connector_default_enabled,omitempty"` // Toggle default future connectors on or off + HostUrl *string `json:"host_url,omitempty"` // Change the base portion of your Looker instance URL setting + OverrideWarnings *bool `json:"override_warnings,omitempty"` // (Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings. + 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. + EmbedVisModernizationDefault *bool `json:"embed_vis_modernization_default,omitempty"` // Default net new visualizations in embedded context to Modern theme + EmbedConfig *WriteEmbedConfig `json:"embed_config,omitempty"` // Dynamic writeable type for EmbedConfig removes: + // embed_vis_modernization_default, 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 @@ -6157,7 +6178,7 @@ type WriteUser struct { type WriteUserAttribute struct { Name string `json:"name"` // Name of user attribute Label string `json:"label"` // Human-friendly label for user attribute - Type string `json:"type"` // Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + Type string `json:"type"` // Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") DefaultValue *string `json:"default_value,omitempty"` // Default value for when no value is set on the user ValueIsHidden *bool `json:"value_is_hidden,omitempty"` // If true, users will not be able to view values of this attribute UserCanView *bool `json:"user_can_view,omitempty"` // Non-admin users can see the values of their attributes and use them in filters @@ -6173,6 +6194,12 @@ type WriteUserAttributeWithValue struct { Value *string `json:"value,omitempty"` // Value of attribute for user } +// Dynamic writeable type for UserDbConnection removes: +// can, id, name, user_id, dialect, auth_type, host, port, database, schema, jdbc_additional_params, oauth_application_id, created_at, updated_at +type WriteUserDbConnection struct { + Enabled *bool `json:"enabled,omitempty"` // Whether this connection is enabled +} + // Dynamic writeable type for WhitelabelConfiguration removes: // id, logo_url, favicon_url type WriteWhitelabelConfiguration struct { 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 174de3890..f0bfd28d7 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 @@ */ /** - * 518 API methods + * 529 API methods */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -2521,6 +2521,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -2567,6 +2568,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -3141,6 +3143,58 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { return this.get("/ssh_public_key", mapOf()) } + /** + * ### Get All User DB Connections + * + * Returns a list of user DB connections. + * + * @param {String} fields Requested fields. + * + * GET /user_db_connections -> Array + */ + @JvmOverloads fun all_user_db_connections( + fields: String? = null, + ): SDKResponse { + return this.get>( + "/user_db_connections", + mapOf("fields" to fields), + ) + } + + /** + * ### Update User DB Connection + * + * Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + * + * @param {String} user_db_connection_id Id of user DB connection + * @param {WriteUserDbConnection} body + * + * PATCH /user_db_connections/{user_db_connection_id} -> UserDbConnection + */ + fun update_user_db_connection( + user_db_connection_id: String, + body: WriteUserDbConnection, + ): SDKResponse { + val path_user_db_connection_id = encodeParam(user_db_connection_id) + return this.patch("/user_db_connections/${path_user_db_connection_id}", mapOf(), body) + } + + /** + * ### Delete User DB Connection + * + * Deletes an existing user DB connection. + * + * @param {String} user_db_connection_id Id of user DB connection + * + * DELETE /user_db_connections/{user_db_connection_id} -> Void + */ + fun delete_user_db_connection( + user_db_connection_id: String, + ): SDKResponse { + val path_user_db_connection_id = encodeParam(user_db_connection_id) + return this.delete("/user_db_connections/${path_user_db_connection_id}", mapOf()) + } + //endregion Connection: Manage Database Connections //region Content: Manage Content @@ -3801,6 +3855,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Get LookML of a UDD Agent + * + * Returns the LookML representation of a user-defined (UDD) agent. + * + * @param {String} agent_id Id of agent + * + * GET /agents/lookml/{agent_id} -> AgentLookml + */ + fun agent_lookml( + agent_id: String, + ): SDKResponse { + val path_agent_id = encodeParam(agent_id) + return this.get("/agents/lookml/${path_agent_id}", mapOf()) + } + /** * ### Get All Conversation Messages * @@ -3927,6 +3997,34 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Get Agent Responses for User Message + * + * Get all agent response messages generated for a specific user prompt. + * + * An agent response often consists of multiple message blocks (such as text explanations, + * visualizations, and follow-up suggestions). This endpoint returns all response messages + * following the specified user message up to the next user prompt. + * + * @param {String} conversation_id Conversation ID + * @param {String} user_message_id User Conversation Message ID + * @param {String} fields Requested fields + * + * GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> Array + */ + @JvmOverloads fun get_conversation_message_responses( + conversation_id: String, + user_message_id: String, + fields: String? = null, + ): SDKResponse { + val path_conversation_id = encodeParam(conversation_id) + val path_user_message_id = encodeParam(user_message_id) + return this.get>( + "/conversations/${path_conversation_id}/messages/${path_user_message_id}/responses", + mapOf("fields" to fields), + ) + } + /** * ### Search Conversations * @@ -4428,6 +4526,27 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { return this.delete("/dashboards/${path_dashboard_id}", mapOf()) } + /** + * ### Get Dashboard Image + * + * Returns the image content for a dashboard element. + * + * @param {String} dashboard_id Id of dashboard + * @param {String} image_slug Slug of image + * + * GET /dashboards/{dashboard_id}/images/{image_slug} -> binary + * + * **Note**: Binary content may be returned by this method. + */ + fun get_dashboard_image( + dashboard_id: String, + image_slug: String, + ): SDKResponse { + val path_dashboard_id = encodeParam(dashboard_id) + val path_image_slug = encodeParam(image_slug) + return this.get("/dashboards/${path_dashboard_id}/images/${path_image_slug}", mapOf()) + } + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -4472,17 +4591,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * Boolean search params accept only "true" and "false" as values. * * + * **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + * * The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. * * Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) * * @param {String} folder_id Filter on a particular folder. - * @param {String} title Match LookML Dashboard title. + * @param {String} title Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title. * @param {String} content_favorite_id Filter on a content favorite id. * @param {String} fields Requested fields. * @param {Long} limit Number of results to return. (used with offset and takes priority over page and per_page) * @param {Long} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - * @param {String} sorts One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status] + * @param {String} sorts One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title. * * GET /dashboards/lookml/search -> DashboardLookml */ @@ -4535,17 +4656,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * @param {String} dashboard_id Dashboard id to move. * @param {String} folder_id Folder id to move to. + * @param {String} project_name LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. * * PATCH /dashboards/{dashboard_id}/move -> Dashboard */ - fun move_dashboard( + @JvmOverloads fun move_dashboard( dashboard_id: String, folder_id: String, + project_name: String? = null, ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.patch( "/dashboards/${path_dashboard_id}/move", - mapOf("folder_id" to folder_id), + mapOf( + "folder_id" to folder_id, + "project_name" to project_name, + ), ) } @@ -6555,6 +6681,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {String} look_id Id of look * @param {String} result_format Format of result * @param {Long} limit Row limit (may override the limit in the saved query). @@ -7075,57 +7203,170 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Project: Manage Projects /** - * ### Fetches a CI Run. + * ### Search Continuous Integration Runs for a project. * - * This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + * Returns an array of Continuous Integration Run objects that match the specified search criteria. * * @param {String} project_id Project Id - * @param {String} run_id Run Id * @param {String} fields Requested fields + * @param {String} suite_id Filter by suite id. Can be a comma-separated list of ids. + * @param {String} status Filter by status. Can be a comma-separated list of statuses. + * @param {String} user_id Filter by user id. Can be a comma-separated list of ids. + * @param {String} trigger_type Filter by trigger type. Can be a comma-separated list of types. + * @param {Long} limit Number of results to return (min 1, max 100, default 50, used with offset) + * @param {Long} offset Number of results to skip before returning. (used with limit) + * @param {String} sorts One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at * - * GET /projects/{project_id}/ci/runs/{run_id} -> ProjectRun + * GET /projects/{project_id}/continuous_integration/runs/search -> Array */ - @Deprecated(message = "Deprecated method") - @JvmOverloads - fun get_ci_run( + @JvmOverloads fun search_continuous_integration_runs( project_id: String, - run_id: String, fields: String? = null, + suite_id: String? = null, + status: String? = null, + user_id: String? = null, + trigger_type: String? = null, + limit: Long? = null, + offset: Long? = null, + sorts: String? = null, ): SDKResponse { val path_project_id = encodeParam(project_id) - val path_run_id = encodeParam(run_id) - return this.get( - "/projects/${path_project_id}/ci/runs/${path_run_id}", + return this.get>( + "/projects/${path_project_id}/continuous_integration/runs/search", + mapOf( + "fields" to fields, + "suite_id" to suite_id, + "status" to status, + "user_id" to user_id, + "trigger_type" to trigger_type, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + ), + ) + } + + /** + * ### Fetches Multiple CI Suite Configurations for Project. + * + * @param {String} project_id Project Id + * @param {String} fields Requested fields + * @param {Long} limit Number of suites to return (min 1, max 100, default 50) + * @param {Long} offset Row offset at which to fetch suites + * @param {Date} created_at Time at which to fetch suites + * + * GET /projects/{project_id}/continuous_integration/suites -> Array + */ + @JvmOverloads fun get_continuous_integration_suites( + project_id: String, + fields: String? = null, + limit: Long? = null, + offset: Long? = null, + created_at: Date? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.get>( + "/projects/${path_project_id}/continuous_integration/suites", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "created_at" to created_at, + ), + ) + } + + /** + * ### Fetches a CI Suite Configuration. + * + * @param {String} project_id Project Id + * @param {WriteProjectCISuite} body + * @param {String} fields Requested fields + * + * POST /projects/{project_id}/continuous_integration/suites -> ProjectCISuite + */ + @JvmOverloads fun create_continuous_integration_suite( + project_id: String, + body: WriteProjectCISuite, + fields: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.post( + "/projects/${path_project_id}/continuous_integration/suites", mapOf("fields" to fields), + body, ) } /** - * ### Creates a CI Run. + * ### Fetches a CI Suite Configuration. + * + * @param {String} project_id Project Id + * @param {String} suite_id Suite Id + * @param {String} fields Requested fields * - * This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + * GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite + */ + @JvmOverloads fun get_continuous_integration_suite( + project_id: String, + suite_id: String, + fields: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_suite_id = encodeParam(suite_id) + return this.get( + "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields), + ) + } + + /** + * ### Updates a Continuous Integration Suite. * * @param {String} project_id Project Id - * @param {CreateCIRunRequest} body + * @param {String} suite_id Suite Id + * @param {WriteProjectCISuite} body * @param {String} fields Requested fields * - * POST /projects/{project_id}/ci/run -> CreateCIRunResponse + * PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite */ - @Deprecated(message = "Deprecated method") - @JvmOverloads - fun create_ci_run( + @JvmOverloads fun update_continuous_integration_suite( project_id: String, - body: CreateCIRunRequest, + suite_id: String, + body: WriteProjectCISuite, fields: String? = null, ): SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/ci/run", + val path_suite_id = encodeParam(suite_id) + return this.patch( + "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", mapOf("fields" to fields), body, ) } + /** + * ### Deletes a Continuous Integration Suite. + * + * @param {String} project_id Project Id + * @param {String} suite_id Suite Id + * @param {String} fields Requested fields + * + * DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> String + */ + @JvmOverloads fun delete_continuous_integration_suite( + project_id: String, + suite_id: String, + fields: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_suite_id = encodeParam(suite_id) + return this.delete( + "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields), + ) + } + /** * ### Creates and queues a Continuous Integration Run. * @@ -7148,6 +7389,28 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Duplicates and queues a Continuous Integration Run. + * + * @param {String} project_id Project Id + * @param {String} run_id Run ID to duplicate and re-run + * @param {String} fields Requested fields + * + * POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> CIRun + */ + @JvmOverloads fun duplicate_continuous_integration_run( + project_id: String, + run_id: String, + fields: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_run_id = encodeParam(run_id) + return this.post( + "/projects/${path_project_id}/continuous_integration/runs/${path_run_id}/duplicate", + mapOf("fields" to fields), + ) + } + /** * ### Gets a Continuous Integration run. * @@ -7170,6 +7433,23 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Cancels a Continuous Integration Run. + * + * @param {String} project_id Project Id + * @param {String} run_id Run Id + * + * DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> String + */ + fun cancel_continuous_integration_run( + project_id: String, + run_id: String, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_run_id = encodeParam(run_id) + return this.delete("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", mapOf()) + } + /** * ### Generate Lockfile for All LookML Dependencies * @@ -7448,6 +7728,36 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { return this.post("/projects/${path_project_id}/reset_to_remote", mapOf()) } + /** + * ### Pull from Production + * Pulls changes from the remote production branch into the current development workspace. + * + * @param {String} project_id Id of project + * + * POST /projects/{project_id}/pull_from_production -> String + */ + fun pull_project_from_production( + project_id: String, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.post("/projects/${path_project_id}/pull_from_production", mapOf()) + } + + /** + * ### Pull from Remote + * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + * + * @param {String} project_id Id of project + * + * POST /projects/{project_id}/pull_from_remote -> String + */ + fun pull_project_from_remote( + project_id: String, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.post("/projects/${path_project_id}/pull_from_remote", mapOf()) + } + /** * ### Get All Projects * @@ -7872,58 +8182,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } - /** - * ### Initiate Git Diagnosis Suite - * - * @param {String} project_id Looker Project ID - * @param {WriteGitDiagnosticReport} body - * - * POST /projects/{project_id}/git_diagnostic_report -> GitDiagnosticReport - */ - fun create_git_diagnostic_report( - project_id: String, - body: WriteGitDiagnosticReport, - ): SDKResponse { - val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/git_diagnostic_report", mapOf(), body) - } - - /** - * ### Retrieve Live Git Diagnostic Suite Execution Status - * - * @param {String} project_id Looker Project ID - * @param {String} report_id Report ID - * - * GET /projects/{project_id}/git_diagnostic_report/{report_id} -> GitDiagnosticReport - */ - fun get_git_diagnostic_report( - project_id: String, - report_id: String, - ): SDKResponse { - val path_project_id = encodeParam(project_id) - val path_report_id = encodeParam(report_id) - return this.get("/projects/${path_project_id}/git_diagnostic_report/${path_report_id}", mapOf()) - } - - /** - * ### Repair Git Configuration Issues - * - * @param {String} project_id Looker Project ID - * @param {String} report_id Report ID - * @param {WriteGitDiagnosticReport} body - * - * POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> GitDiagnosticReport - */ - fun repair_git_diagnostic_report( - project_id: String, - report_id: String, - body: WriteGitDiagnosticReport, - ): SDKResponse { - val path_project_id = encodeParam(project_id) - val path_report_id = encodeParam(report_id) - return this.post("/projects/${path_project_id}/git_diagnostic_report/${path_report_id}/repair", mapOf(), body) - } - /** * ### Configure Repository Credential for a remote dependency * @@ -7998,6 +8256,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. * After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {WriteCreateQueryTask} body * @param {Long} limit Row limit (may override the limit in the saved query). * @param {Boolean} apply_formatting Apply model-specified formatting to each result. @@ -8249,6 +8509,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {String} query_id Id of query * @param {String} result_format Format of result * @param {Long} limit Row limit (may override the limit in the saved query). @@ -8358,6 +8620,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {String} result_format Format of result * @param {WriteQuery} body * @param {Long} limit Row limit (may override the limit in the saved query). @@ -8469,6 +8733,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {String} model_name Model name * @param {String} view_name View name * @param {String} result_format Format of result @@ -9791,6 +10057,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * @param {String} recipient Match recipient address. * @param {String} destination_type Match scheduled plan's destination type. * @param {String} delivery_format Match scheduled plan's delivery format. + * @param {Boolean} all_states Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag). + * @param {Boolean} run_once Match Scheduled plan's run_once. + * @param {Boolean} enabled Match Scheduled plan's enabled status. + * @param {String} last_run_status Match scheduled plan's last run status. * @param {Boolean} filter_or Combine given search criteria in a boolean OR expression * * GET /scheduled_plans/search -> Array @@ -9811,6 +10081,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { recipient: String? = null, destination_type: String? = null, delivery_format: String? = null, + all_states: Boolean? = null, + run_once: Boolean? = null, + enabled: Boolean? = null, + last_run_status: String? = null, filter_or: Boolean? = null, ): SDKResponse { return this.get>( @@ -9831,6 +10105,10 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { "recipient" to recipient, "destination_type" to destination_type, "delivery_format" to delivery_format, + "all_states" to all_states, + "run_once" to run_once, + "enabled" to enabled, + "last_run_status" to last_run_status, "filter_or" to filter_or, ), ) @@ -10639,26 +10917,336 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { } /** - * ### Get information about the current user; i.e. the user account currently calling the API. + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * + * @param {String} user_id Id of user * @param {String} fields Requested fields. * - * GET /user -> User + * GET /users/{user_id}/credentials_email -> CredentialsEmail */ - @JvmOverloads fun me( + @JvmOverloads fun user_credentials_email( + user_id: String, fields: String? = null, ): SDKResponse { - return this.get( - "/user", + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_email", mapOf("fields" to fields), ) } /** - * ### Get information about all users. + * ### Email/password login information for the specified user. * - * @param {String} fields Requested fields. - * @param {Long} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {WriteCredentialsEmail} body + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/credentials_email -> CredentialsEmail + */ + @JvmOverloads fun create_user_credentials_email( + user_id: String, + body: WriteCredentialsEmail, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + body, + ) + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {WriteCredentialsEmail} body + * @param {String} fields Requested fields. + * + * PATCH /users/{user_id}/credentials_email -> CredentialsEmail + */ + @JvmOverloads fun update_user_credentials_email( + user_id: String, + body: WriteCredentialsEmail, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.patch( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + body, + ) + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_email -> String + */ + fun delete_user_credentials_email( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_email", mapOf()) + } + + /** + * ### Create a password reset token. + * This will create a cryptographically secure random password reset token for the user. + * If the user already has a password reset token then this invalidates the old token and creates a new one. + * The token is expressed as the 'password_reset_url' of the user's email/password credential object. + * This takes an optional 'expires' param to indicate if the new token should be an expiring token. + * Tokens that expire are typically used for self-service password resets for existing users. + * Invitation emails for new users typically are not set to expire. + * The expire period is always 60 minutes when expires is enabled. + * This method can be called with an empty body. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {Boolean} expires Expiring token. + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail + */ + @JvmOverloads fun create_user_credentials_email_password_reset( + user_id: String, + expires: Boolean? = null, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post( + "/users/${path_user_id}/credentials_email/password_reset", + mapOf( + "expires" to expires, + "fields" to fields, + ), + ) + } + + /** + * ### Send a password reset token. + * This will send a password reset email to the user. If a password reset token does not already exist + * for this user, it will create one and then send it. + * If the user has not yet set up their account, it will send a setup email to the user. + * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + * Password reset URLs will expire in 60 minutes. + * This method can be called with an empty body. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail + */ + @JvmOverloads fun send_user_credentials_email_password_reset( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post( + "/users/${path_user_id}/credentials_email/send_password_reset", + mapOf("fields" to fields), + ) + } + + /** + * ### Google authentication login information for the specified user. + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * GET /users/{user_id}/credentials_google -> CredentialsGoogle + */ + @JvmOverloads fun user_credentials_google( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_google", + mapOf("fields" to fields), + ) + } + + /** + * ### Delete Google authentication login information for the specified user. + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_google -> String + */ + fun delete_user_credentials_google( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_google", mapOf()) + } + + /** + * ### Looker Openid login information for the specified user. Used by Looker Analysts. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid + */ + @JvmOverloads fun user_credentials_looker_openid( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_looker_openid", + mapOf("fields" to fields), + ) + } + + /** + * ### Looker Openid login information for the specified user. Used by Looker Analysts. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_looker_openid -> String + */ + fun delete_user_credentials_looker_openid( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) + } + + /** + * ### Saml authentication login information for the specified user. + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * GET /users/{user_id}/credentials_saml -> CredentialsSaml + */ + @JvmOverloads fun user_credentials_saml( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_saml", + mapOf("fields" to fields), + ) + } + + /** + * ### Delete Saml authentication login information for the specified user. + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_saml -> String + */ + fun delete_user_credentials_saml( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) + } + + /** + * ### Get two-factor login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * GET /users/{user_id}/credentials_totp -> CredentialsTotp + */ + @JvmOverloads fun user_credentials_totp( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), + ) + } + + /** + * ### Create two-factor login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {CredentialsTotp} body WARNING: no writeable properties found for POST, PUT, or PATCH + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/credentials_totp -> CredentialsTotp + */ + @JvmOverloads fun create_user_credentials_totp( + user_id: String, + body: CredentialsTotp? = null, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post( + "/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), + body, + ) + } + + /** + * ### Delete two-factor login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_totp -> String + */ + fun delete_user_credentials_totp( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) + } + + /** + * ### Get information about the current user; i.e. the user account currently calling the API. + * + * @param {String} fields Requested fields. + * + * GET /user -> User + */ + @JvmOverloads fun me( + fields: String? = null, + ): SDKResponse { + return this.get( + "/user", + mapOf("fields" to fields), + ) + } + + /** + * ### Get information about all users. + * + * @param {String} fields Requested fields. + * @param {Long} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results * @param {Long} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page * @param {Long} limit Number of results to return. (used with offset and takes priority over page and per_page) * @param {Long} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) @@ -10881,413 +11469,201 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /users/{user_id} -> User */ - @JvmOverloads fun user( - user_id: String, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}", - mapOf("fields" to fields), - ) - } - - /** - * ### Update information about the user with a specific id. - * - * @param {String} user_id Id of user - * @param {WriteUser} body - * @param {String} fields Requested fields. - * - * PATCH /users/{user_id} -> User - */ - @JvmOverloads fun update_user( - user_id: String, - body: WriteUser, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.patch( - "/users/${path_user_id}", - mapOf("fields" to fields), - body, - ) - } - - /** - * ### Delete the user with a specific id. - * - * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the users or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. - * - * The user cannot delete themselves. - * The last administrator user cannot be deleted. - * - * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - * Please use the dedicated `delete_service_account` endpoint. - * - * @param {String} user_id Id of user - * - * DELETE /users/{user_id} -> String - */ - fun delete_user( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}", mapOf()) - } - - /** - * ### Get information about the user with a credential of given type with specific id. - * - * This is used to do things like find users by their embed external_user_id. Or, find the user with - * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - * for the user and is specific to each type of credential. - * - * An example using the Ruby sdk might look like: - * - * `sdk.user_for_credential('embed', 'customer-4959425')` - * - * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - * which field in the given credential type is actually searched when finding a user with the supplied - * 'credential_id'. - * - * | Credential Types | Id Field Matched | - * | ---------------- | ---------------- | - * | email | email | - * | google | google_user_id | - * | saml | saml_user_id | - * | oidc | oidc_user_id | - * | ldap | ldap_id | - * | api | token | - * | api3 | client_id | - * | embed | external_user_id | - * | looker_openid | email | - * - * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} credential_type Type name of credential - * @param {String} credential_id Id of credential - * @param {String} fields Requested fields. - * - * GET /users/credential/{credential_type}/{credential_id} -> User - */ - @JvmOverloads fun user_for_credential( - credential_type: String, - credential_id: String, - fields: String? = null, - ): SDKResponse { - val path_credential_type = encodeParam(credential_type) - val path_credential_id = encodeParam(credential_id) - return this.get( - "/users/credential/${path_credential_type}/${path_credential_id}", - mapOf("fields" to fields), - ) - } - - /** - * ### Update information for a specific service account. This action is restricted to Looker admins. - * - * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. - * - * @param {String} user_id Id of service account - * @param {WriteServiceAccount} body - * @param {String} fields Requested fields. - * - * PATCH /users/service_accounts/{user_id} -> ServiceAccount - */ - @JvmOverloads fun update_service_account( - user_id: String, - body: WriteServiceAccount, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.patch( - "/users/service_accounts/${path_user_id}", - mapOf("fields" to fields), - body, - ) - } - - /** - * ### Delete the service account with a specific id. - * - * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the service account or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. - * - * The service account cannot delete itself. - * - * @param {String} user_id Id of service account user - * - * DELETE /users/service_accounts/{user_id} -> String - */ - fun delete_service_account( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/service_accounts/${path_user_id}", mapOf()) - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {String} fields Requested fields. - * - * GET /users/{user_id}/credentials_email -> CredentialsEmail - */ - @JvmOverloads fun user_credentials_email( - user_id: String, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - ) - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {WriteCredentialsEmail} body - * @param {String} fields Requested fields. - * - * POST /users/{user_id}/credentials_email -> CredentialsEmail - */ - @JvmOverloads fun create_user_credentials_email( - user_id: String, - body: WriteCredentialsEmail, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - body, - ) - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {WriteCredentialsEmail} body - * @param {String} fields Requested fields. - * - * PATCH /users/{user_id}/credentials_email -> CredentialsEmail - */ - @JvmOverloads fun update_user_credentials_email( - user_id: String, - body: WriteCredentialsEmail, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.patch( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - body, - ) - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * - * DELETE /users/{user_id}/credentials_email -> String - */ - fun delete_user_credentials_email( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_email", mapOf()) - } - - /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {String} fields Requested fields. - * - * GET /users/{user_id}/credentials_totp -> CredentialsTotp - */ - @JvmOverloads fun user_credentials_totp( + @JvmOverloads fun user( user_id: String, fields: String? = null, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_totp", + return this.get( + "/users/${path_user_id}", mapOf("fields" to fields), ) } /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Update information about the user with a specific id. * * @param {String} user_id Id of user - * @param {CredentialsTotp} body WARNING: no writeable properties found for POST, PUT, or PATCH + * @param {WriteUser} body * @param {String} fields Requested fields. * - * POST /users/{user_id}/credentials_totp -> CredentialsTotp + * PATCH /users/{user_id} -> User */ - @JvmOverloads fun create_user_credentials_totp( + @JvmOverloads fun update_user( user_id: String, - body: CredentialsTotp? = null, + body: WriteUser, fields: String? = null, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_totp", + return this.patch( + "/users/${path_user_id}", mapOf("fields" to fields), body, ) } /** - * ### Two-factor login information for the specified user. + * ### Delete the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. + * + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the users or that use their content will be deleted. + * * Alerts owned by the users will be deleted. + * + * The user cannot delete themselves. + * The last administrator user cannot be deleted. + * + * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + * Please use the dedicated `delete_service_account` endpoint. * * @param {String} user_id Id of user * - * DELETE /users/{user_id}/credentials_totp -> String + * DELETE /users/{user_id} -> String */ - fun delete_user_credentials_totp( + fun delete_user( user_id: String, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) + return this.delete("/users/${path_user_id}", mapOf()) } /** - * ### LDAP login information for the specified user. + * ### Get information about the user with a credential of given type with specific id. + * + * This is used to do things like find users by their embed external_user_id. Or, find the user with + * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + * for the user and is specific to each type of credential. + * + * An example using the Ruby sdk might look like: + * + * `sdk.user_for_credential('embed', 'customer-4959425')` + * + * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + * which field in the given credential type is actually searched when finding a user with the supplied + * 'credential_id'. + * + * | Credential Types | Id Field Matched | + * | ---------------- | ---------------- | + * | email | email | + * | google | google_user_id | + * | saml | saml_user_id | + * | oidc | oidc_user_id | + * | ldap | ldap_id | + * | api | token | + * | api3 | client_id | + * | embed | external_user_id | + * | looker_openid | email | + * + * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * @param {String} user_id Id of user + * @param {String} credential_type Type name of credential + * @param {String} credential_id Id of credential * @param {String} fields Requested fields. * - * GET /users/{user_id}/credentials_ldap -> CredentialsLDAP + * GET /users/credential/{credential_type}/{credential_id} -> User */ - @JvmOverloads fun user_credentials_ldap( - user_id: String, + @JvmOverloads fun user_for_credential( + credential_type: String, + credential_id: String, fields: String? = null, ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_ldap", + val path_credential_type = encodeParam(credential_type) + val path_credential_id = encodeParam(credential_id) + return this.get( + "/users/credential/${path_credential_type}/${path_credential_id}", mapOf("fields" to fields), ) } /** - * ### LDAP login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user + * ### Update information for a specific service account. This action is restricted to Looker admins. * - * DELETE /users/{user_id}/credentials_ldap -> String - */ - fun delete_user_credentials_ldap( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) - } - - /** - * ### Google authentication login information for the specified user. + * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. * - * @param {String} user_id Id of user + * @param {String} user_id Id of service account + * @param {WriteServiceAccount} body * @param {String} fields Requested fields. * - * GET /users/{user_id}/credentials_google -> CredentialsGoogle + * PATCH /users/service_accounts/{user_id} -> ServiceAccount */ - @JvmOverloads fun user_credentials_google( + @JvmOverloads fun update_service_account( user_id: String, + body: WriteServiceAccount, fields: String? = null, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_google", + return this.patch( + "/users/service_accounts/${path_user_id}", mapOf("fields" to fields), + body, ) } /** - * ### Google authentication login information for the specified user. + * ### Delete the service account with a specific id. * - * @param {String} user_id Id of user + * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. * - * DELETE /users/{user_id}/credentials_google -> String + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the service account or that use their content will be deleted. + * * Alerts owned by the service account will be deleted. + * + * The service account cannot delete itself. + * + * @param {String} user_id Id of service account user + * + * DELETE /users/service_accounts/{user_id} -> String */ - fun delete_user_credentials_google( + fun delete_service_account( user_id: String, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_google", mapOf()) + return this.delete("/users/service_accounts/${path_user_id}", mapOf()) } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * * @param {String} user_id Id of user * @param {String} fields Requested fields. * - * GET /users/{user_id}/credentials_saml -> CredentialsSaml + * GET /users/{user_id}/credentials_ldap -> CredentialsLDAP */ - @JvmOverloads fun user_credentials_saml( + @JvmOverloads fun user_credentials_ldap( user_id: String, fields: String? = null, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_saml", + return this.get( + "/users/${path_user_id}/credentials_ldap", mapOf("fields" to fields), ) } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * * @param {String} user_id Id of user * - * DELETE /users/{user_id}/credentials_saml -> String + * DELETE /users/{user_id}/credentials_ldap -> String */ - fun delete_user_credentials_saml( + fun delete_user_credentials_ldap( user_id: String, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) + return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) } /** @@ -11489,43 +11865,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {String} fields Requested fields. - * - * GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid - */ - @JvmOverloads fun user_credentials_looker_openid( - user_id: String, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_looker_openid", - mapOf("fields" to fields), - ) - } - - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * - * DELETE /users/{user_id}/credentials_looker_openid -> String - */ - fun delete_user_credentials_looker_openid( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) - } - /** * ### Web login session for the specified user. * @@ -11584,40 +11923,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } - /** - * ### Create a password reset token. - * This will create a cryptographically secure random password reset token for the user. - * If the user already has a password reset token then this invalidates the old token and creates a new one. - * The token is expressed as the 'password_reset_url' of the user's email/password credential object. - * This takes an optional 'expires' param to indicate if the new token should be an expiring token. - * Tokens that expire are typically used for self-service password resets for existing users. - * Invitation emails for new users typically are not set to expire. - * The expire period is always 60 minutes when expires is enabled. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {Boolean} expires Expiring token. - * @param {String} fields Requested fields. - * - * POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail - */ - @JvmOverloads fun create_user_credentials_email_password_reset( - user_id: String, - expires: Boolean? = null, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email/password_reset", - mapOf( - "expires" to expires, - "fields" to fields, - ), - ) - } - /** * ### Get information about roles of a given user * @@ -11752,33 +12057,6 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { return this.delete("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf()) } - /** - * ### Send a password reset token. - * This will send a password reset email to the user. If a password reset token does not already exist - * for this user, it will create one and then send it. - * If the user has not yet set up their account, it will send a setup email to the user. - * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - * Password reset URLs will expire in 60 minutes. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {String} fields Requested fields. - * - * POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail - */ - @JvmOverloads fun send_user_credentials_email_password_reset( - user_id: String, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email/send_password_reset", - mapOf("fields" to fields), - ) - } - /** * ### Change a disabled user's email addresses * 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 698541a80..92b771ac1 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 @@ */ /** - * 461 API models: 363 Spec, 0 Request, 72 Write, 26 Enum + * 442 API models: 343 Spec, 0 Request, 73 Write, 26 Enum */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -72,6 +72,9 @@ data class AccessToken( * @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 + * @property is_lookml Whether the agent is defined in LookML (read-only) + * @property lookml_agent_id LookML Agent ID (read-only) + * @property lookml_edit_uri URI to edit the LookML definition of this agent (read-only) */ data class Agent( var can: Map? = null, @@ -96,6 +99,18 @@ data class Agent( var code_interpreter: Boolean? = null, var studio_agent_id: String? = null, var workflow_params: WorkflowParams? = null, + var is_lookml: Boolean? = null, + var lookml_agent_id: String? = null, + var lookml_edit_uri: String? = null, +) : Serializable + +/** + * @property agent_id Id of Agent (read-only) + * @property lookml lookml of UDD Agent (read-only) + */ +data class AgentLookml( + var agent_id: String? = null, + var lookml: String? = null, ) : Serializable /** @@ -393,71 +408,6 @@ data class ArtifactUsage( var usage: Long, ) : Serializable -/** - * @property assert_error - * @property generic_error - */ -data class AssertValidatorErrorItem( - var assert_error: AssertValidatorTestError? = null, - var generic_error: GenericError? = null, -) : Serializable - -/** - * @property name Name of the validator (assert) (read-only) - * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - * @property results Results of the validation (read-only) - */ -data class AssertValidatorResult( - var name: String? = null, - var status: String? = null, - var results: Array? = null, -) : Serializable - -/** - * @property error_count Total number of failed data tests (read-only) - * @property errors Details of data tests that failed validation (read-only) - * @property success_count Total number of successful data tests (read-only) - * @property successes Details of data tests that passed validation (read-only) - */ -data class AssertValidatorTestedExplore( - var error_count: Long? = null, - var errors: Array? = null, - var success_count: String? = null, - var successes: Array? = null, -) : Serializable - -/** - * @property model LookML model that contains the data test (read-only) - * @property explore LookML Explore that is used as the explore_source for the data test (read-only) - * @property test_name Name of the data test (read-only) - * @property explore_url URL to the Explore (read-only) - * @property lookml_url URL to the LookML file where the data test is defined (read-only) - * @property message Message returned by the data test (read-only) - */ -data class AssertValidatorTestError( - var model: String? = null, - var explore: String? = null, - var test_name: String? = null, - var explore_url: String? = null, - var lookml_url: String? = null, - var message: String? = null, -) : Serializable - -/** - * @property model LookML model that contains the data test (read-only) - * @property explore LookML Explore that is used as the explore_source for the data test (read-only) - * @property test_name Name of the data test (read-only) - * @property explore_url URL to the Explore (read-only) - * @property lookml_url URL to the LookML file where the data test is defined (read-only) - */ -data class AssertValidatorTestSuccess( - var model: String? = null, - var explore: String? = null, - var test_name: String? = null, - var explore_url: String? = null, - var lookml_url: String? = null, -) : Serializable - /** * @property status Status of the async deploy request (e.g., 'queued') (read-only) */ @@ -782,19 +732,6 @@ data class CIAssertValidatorTestSuccess( var lookml_url: String? = null, ) : Serializable -/** - * @property change_request_number Numeric identifier of the change request (read-only) - * @property change_request_url URL of the change request (read-only) - * @property change_request_name Name of the change request (read-only) - * @property change_request_commits_url For PR-triggered CI runs, the URL to the change request commit that triggered the run. (read-only) - */ -data class CIChangeRequest( - var change_request_number: Long? = null, - var change_request_url: String? = null, - var change_request_name: String? = null, - var change_request_commits_url: String? = null, -) : Serializable - /** * @property type A URI reference that identifies the problem type * @property title Overview of the error @@ -882,19 +819,6 @@ data class CIGenericError( var instance: String? = null, ) : Serializable -/** - * @property branch Git branch that the CI run validates (read-only) - * @property repository Git repository that contains the Git branch being validated (read-only) - * @property commit_ref Git commit that the CI run validates (read-only) - * @property target For incremental runs, the Git branch that the CI run compares against during validation (read-only) - */ -data class CIGitState( - var branch: String? = null, - var repository: String? = null, - var commit_ref: String? = null, - var target: String? = null, -) : Serializable - /** * @property type A URI reference that identifies the problem type * @property title Overview of the error @@ -971,6 +895,9 @@ data class CILookMLValidatorResult( * @property git_target_branch_name Git target branch name of the CI run * @property git_status_url Git status URL of the CI run * @property git_target_url Git target URL of the CI run + * @property dbt_cloud_git_branch_name Git branch name in dbt Cloud + * @property dbt_cloud_git_commit_ref Git commit ref in dbt Cloud + * @property dbt_cloud_git_repository_name Git repository name in dbt Cloud * @property created_at Time and date that the CI run was created (read-only) * @property started_at Time and date that the CI run was started (read-only) * @property finished_at Time and date that the CI run was finished (read-only) @@ -980,6 +907,7 @@ data class CILookMLValidatorResult( * @property crashed_check_count Number of crashed checks of the CI run (read-only) * @property run_url URL of the CI run (read-only) * @property user_attributes User attributes for the CI run (read-only) + * @property project_imports Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run (read-only) */ data class CIRun( var can: Map? = null, @@ -1004,6 +932,9 @@ data class CIRun( var git_target_branch_name: String? = null, var git_status_url: String? = null, var git_target_url: String? = null, + var dbt_cloud_git_branch_name: String? = null, + var dbt_cloud_git_commit_ref: String? = null, + var dbt_cloud_git_repository_name: String? = null, var created_at: Date? = null, var started_at: Date? = null, var finished_at: Date? = null, @@ -1013,6 +944,7 @@ data class CIRun( var crashed_check_count: Long? = null, var run_url: String? = null, var user_attributes: Array? = null, + var project_imports: Map? = null, ) : Serializable /** @@ -1024,6 +956,8 @@ data class CIRun( * @property content_error * @property lookml_result * @property lookml_error + * @property style_result + * @property style_error * @property generic_error */ data class CIRunResult( @@ -1035,6 +969,8 @@ data class CIRunResult( var content_error: CIGenericError? = null, var lookml_result: CILookMLValidatorResult? = null, var lookml_error: CIGenericError? = null, + var style_result: CIStyleValidatorResult? = null, + var style_error: CIGenericError? = null, var generic_error: CIGenericError? = null, ) : Serializable @@ -1049,19 +985,6 @@ data class CIRunUserAttribute( var value: String? = null, ) : Serializable -/** - * @property enabled Whether the CI run schedule is active (read-only) - * @property day For scheduled runs, day of the week that the CI run is scheduled (read-only) - * @property hour For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled (read-only) - * @property frequency For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly) (read-only) - */ -data class CIScheduleTrigger( - var enabled: Boolean? = null, - var day: String? = null, - var hour: String? = null, - var frequency: String? = null, -) : Serializable - /** * @property type A URI reference that identifies the problem type * @property title Overview of the error @@ -1130,6 +1053,79 @@ data class CISqlValidatorTestedExplore( var errors: Array? = null, ) : Serializable +/** + * @property type A URI reference that identifies the problem type + * @property title Overview of the error + * @property detail Detail of the error + * @property status The HTTP status code for the problem + * @property instance URI reference that identifies the specific occurrence of the problem + * @property model LookML model that contains the error + * @property explore LookML Explore that contains the error + * @property field_name LookML field that caused the error + * @property message Message returned by the style validator + * @property severity Severity of the error (warning, error, fatal, info, success) + * @property line_number Line number of the error in the LookML file + * @property character Character offset of the error in the LookML file + * @property lookml_url URL to the LookML that caused the error + * @property file_path IDE folder path to the LookML file that caused the error + * @property rule_name Name of the style rule + * @property entity_type Type of LookML entity evaluated + * @property entity_name Name of LookML entity evaluated + * @property is_incremental Whether the error was newly introduced + * @property error_id Deterministic fingerprint of the violation + * @property documentation_url URL to documentation for the style rule + * @property context LookML source code snippet lines surrounding the error + * @property context_line_number Line number where the context code snippet begins + */ +data class CIStyleValidatorError( + var type: String? = null, + var title: String? = null, + var detail: String? = null, + var status: String? = null, + var instance: String? = null, + var model: String? = null, + var explore: String? = null, + var field_name: String? = null, + var message: String? = null, + var severity: String? = null, + var line_number: Long? = null, + var character: Long? = null, + var lookml_url: String? = null, + var file_path: String? = null, + var rule_name: String? = null, + var entity_type: String? = null, + var entity_name: String? = null, + var is_incremental: Boolean? = null, + var error_id: String? = null, + var documentation_url: String? = null, + var context: Array? = null, + var context_line_number: Long? = null, +) : Serializable + +/** + * @property style_error + * @property generic_error + */ +data class CIStyleValidatorErrorItem( + var style_error: CIStyleValidatorError? = null, + var generic_error: CIGenericError? = null, +) : Serializable + +/** + * @property name Name of the validator (style) + * @property incremental Whether the validation was incremental + * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) + * @property error_count Total number of failed style validations + * @property errors Details of the LookML that failed style validation + */ +data class CIStyleValidatorResult( + var name: String? = null, + var incremental: Boolean? = null, + var status: String? = null, + var error_count: Long? = null, + var errors: Array? = null, +) : Serializable + /** * @property id Unique Id (read-only) * @property label Label of color collection @@ -1307,6 +1303,7 @@ data class ContentMetaGroupUser( * @property created_by_id Creator Id of the content (read-only) * @property certification_status Certification status of the content (read-only) * @property parent_folder_name Name of the parent folder of the content (read-only) + * @property parent_project_name Name of the parent project of the content (read-only) */ data class ContentSearch( var can: Map? = null, @@ -1322,6 +1319,7 @@ data class ContentSearch( var created_by_id: Long? = null, var certification_status: String? = null, var parent_folder_name: String? = null, + var parent_project_name: String? = null, ) : Serializable /** @@ -1558,39 +1556,6 @@ data class ContentValidationScheduledPlan( var id: String? = null, ) : Serializable -/** - * @property type A URI reference that identifies the problem type (read-only) - * @property title Overview of the error (read-only) - * @property detail Detail of the error (read-only) - * @property status The HTTP status code for the problem (read-only) - * @property instance URI reference that identifies the specific occurrence of the problem (read-only) - * @property model LookML model that contains the error (read-only) - * @property explore LookML Explore that contains the error (read-only) - * @property field_name LookML field that caused the error (read-only) - * @property content_type Type of the content (dashboard, look) (read-only) - * @property folder Folder of the content (read-only) - * @property url URL of the content (read-only) - * @property tile_type Type of the tile (dashboard_element, dashboard_filter) (read-only) - * @property tile_title Title of the tile (read-only) - * @property message Message returned by the content validator (read-only) - */ -data class ContentValidatorContentError( - var type: String? = null, - var title: String? = null, - var detail: String? = null, - var status: String? = null, - var instance: String? = null, - var model: String? = null, - var explore: String? = null, - var field_name: String? = null, - var content_type: String? = null, - var folder: String? = null, - var url: String? = null, - var tile_type: String? = null, - var tile_title: String? = null, - var message: String? = null, -) : Serializable - /** * @property look * @property dashboard @@ -1616,37 +1581,6 @@ data class ContentValidatorError( var id: String? = null, ) : Serializable -/** - * @property content_error - * @property generic_error - */ -data class ContentValidatorErrorItem( - var content_error: ContentValidatorContentError? = null, - var generic_error: GenericError? = null, -) : Serializable - -/** - * @property name Name of the validator (content) (read-only) - * @property incremental Whether the validation was incremental (read-only) - * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - * @property result Results of the content validation (read-only) - */ -data class ContentValidatorResult( - var name: String? = null, - var incremental: Boolean? = null, - var status: String? = null, - var result: Array? = null, -) : Serializable - -/** - * @property error_count Total number of failed content validations (read-only) - * @property errors Details of the content that failed validation (read-only) - */ -data class ContentValidatorTestedExplore( - var error_count: Long? = null, - var errors: Array? = null, -) : Serializable - /** * @property can Operations the current user is able to perform on this object (read-only) * @property id Unique Id (read-only) @@ -1678,9 +1612,13 @@ data class ContentView( /** * @property instructions Agent instructions + * @property show_analytical_details Show analytical details in preview + * @property show_debug Show debug info in preview */ data class Context( var instructions: String? = null, + var show_analytical_details: Boolean? = null, + var show_debug: Boolean? = null, ) : Serializable /** @@ -1766,37 +1704,19 @@ data class CostEstimate( var message: String? = null, ) : Serializable -/** - * @property suite_id ID of the CI suite - * @property branch Branch that the CI run should validate. Omit to test production. - * @property commit Commit that the CI run should validate. Omit to test production. - */ -data class CreateCIRunRequest( - var suite_id: String? = null, - var branch: String? = null, - var commit: String? = null, -) : Serializable - -/** - * @property run_id ID of the CI run (read-only) - * @property status Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ -data class CreateCIRunResponse( - var run_id: String? = null, - var status: String? = null, -) : Serializable - /** * @property suite_id The suite ID. * @property branch The git branch to use. Required for dev workspace. Omit to test production. * @property commit Commit that the CI run should validate. Omit to test production. * @property user_attributes User attributes to override for the CI run. + * @property project_imports Map of upstream project names to commit SHAs or git configurations to pin for the CI run. */ data class CreateContinuousIntegrationRunRequest( var suite_id: String? = null, var branch: String? = null, var commit: String? = null, var user_attributes: Array? = null, + var project_imports: Map? = null, ) : Serializable /** @@ -2266,6 +2186,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 layout_granularity The layout granularity to apply to this dashboard (ie: default or granular) * @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 */ @@ -2323,6 +2244,7 @@ data class Dashboard( var usage_count: Long? = null, var is_owner_disabled: Boolean? = null, var url: String? = null, + var layout_granularity: String? = null, var preserve_desktop_layout: Boolean? = null, var download_settings: DashboardDownloadSettings? = null, ) : Serializable @@ -2345,6 +2267,14 @@ data class DashboardAggregateTableLookml( * @property tile_shadow Tile shadow on/off * @property key_color Key color * @property modern_vis2026 Whether to modernize visualizations on this dashboard + * @property show_dashboard_header Toggle to show dashboard header. Defaults to true. + * @property show_title Toggle to show dashboard title. Defaults to true. + * @property show_filters_bar Toggle to show filters bar. Defaults to true. + * @property show_filters_toggle Toggle to show filters toggle button. Defaults to true. + * @property show_reload_data_icon Toggle to show reload data icon/button. Defaults to true. + * @property show_dashboard_menu Toggle to show dashboard actions menu. Defaults to true. + * @property show_last_updated_indicator Toggle to show last updated indicator. Defaults to true. + * @property background_opacity Background image opacity (0.0 to 1.0) */ data class DashboardAppearance( var page_side_margins: Long? = null, @@ -2355,6 +2285,14 @@ data class DashboardAppearance( var tile_shadow: Boolean? = null, var key_color: String? = null, var modern_vis2026: Boolean? = null, + var show_dashboard_header: Boolean? = null, + var show_title: Boolean? = null, + var show_filters_bar: Boolean? = null, + var show_filters_toggle: Boolean? = null, + var show_reload_data_icon: Boolean? = null, + var show_dashboard_menu: Boolean? = null, + var show_last_updated_indicator: Boolean? = null, + var background_opacity: Float? = null, ) : Serializable /** @@ -2403,6 +2341,7 @@ data class DashboardBase( * @property limit_options Limit option * @property rows_limit Rows limit * @property columns_limit Columns limit + * @property append_excel_metadata Append Excel metadata */ data class DashboardDownloadSettings( var format_option: String? = null, @@ -2411,6 +2350,7 @@ data class DashboardDownloadSettings( var limit_options: String? = null, var rows_limit: Long? = null, var columns_limit: Long? = null, + var append_excel_metadata: Boolean? = null, ) : Serializable /** @@ -2419,6 +2359,7 @@ data class DashboardDownloadSettings( * @property body_text_as_html Text tile body text as Html (read-only) * @property dashboard_id Id of Dashboard * @property dashboard_layout_id Id of Dashboard Layout + * @property group_id ID of the group to place this element under in the layout (read-only) * @property edit_uri Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only). (read-only) * @property id Unique Id (read-only) * @property look @@ -2448,6 +2389,8 @@ data class DashboardDownloadSettings( * @property extension_id Extension ID * @property aria_description Custom ARIA description text * @property certification_metadata + * @property image_id ID of Dashboard Image + * @property images Images (read-only) */ data class DashboardElement( var can: Map? = null, @@ -2455,6 +2398,7 @@ data class DashboardElement( var body_text_as_html: String? = null, var dashboard_id: String? = null, var dashboard_layout_id: String? = null, + var group_id: String? = null, var edit_uri: String? = null, var id: String? = null, var look: LookWithQuery? = null, @@ -2484,6 +2428,8 @@ data class DashboardElement( var extension_id: String? = null, var aria_description: String? = null, var certification_metadata: Certification? = null, + var image_id: String? = null, + var images: Array? = null, ) : Serializable /** @@ -2573,6 +2519,7 @@ data class DashboardLayout( * @property granular_column Column (granular layout) * @property granular_width Width (granular layout) * @property granular_height Height (granular layout) + * @property group_id Id of parent Dashboard Layout Component group */ data class DashboardLayoutComponent( var can: Map? = null, @@ -2591,6 +2538,7 @@ data class DashboardLayoutComponent( var granular_column: Long? = null, var granular_width: Long? = null, var granular_height: Long? = null, + var group_id: String? = null, ) : Serializable /** @@ -2787,6 +2735,7 @@ data class DataSourceSchema( * @property dialect * @property snippets SQL Runner snippets for this connection (read-only) * @property pdts_enabled True if PDTs are enabled on this connection (read-only) + * @property project_id ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. * @property named_driver_version_requested Requested JDBC driver version name * @property named_driver_version_actual Resolved JDBC driver version (read-only) * @property host Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. @@ -2794,11 +2743,13 @@ data class DataSourceSchema( * @property username Username for server authentication * @property password (Write-Only) Password for server authentication * @property has_password Whether or not the password is present (read-only) + * @property service_account_auth_enabled Whether Service Account OAuth authentication is enabled for this connection * @property uses_oauth Whether the connection uses OAuth for authentication. (read-only) * @property uses_key_pair_auth Whether the connection uses key-pair for authentication. * @property uses_instance_oauth Whether the integration uses the oauth instance account. (read-only) * @property uses_service_auth Whether the connection uses service authentication certificate. (read-only) * @property certificate (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + * @property user_attr_certificate The name of the user attribute containing the connection certificate. * @property file_type (Write-Only) Certificate keyfile type - .json, .p8 or .p12 * @property database Database name * @property db_timezone Time zone of database @@ -2854,6 +2805,7 @@ data class DBConnection( var dialect: Dialect? = null, var snippets: Array? = null, var pdts_enabled: Boolean? = null, + var project_id: String? = null, var named_driver_version_requested: String? = null, var named_driver_version_actual: String? = null, var host: String? = null, @@ -2861,11 +2813,13 @@ data class DBConnection( var username: String? = null, var password: String? = null, var has_password: Boolean? = null, + var service_account_auth_enabled: Boolean? = null, var uses_oauth: Boolean? = null, var uses_key_pair_auth: Boolean? = null, var uses_instance_oauth: Boolean? = null, var uses_service_auth: Boolean? = null, var certificate: String? = null, + var user_attr_certificate: String? = null, var file_type: String? = null, var database: String? = null, var db_timezone: String? = null, @@ -2922,6 +2876,7 @@ data class DBConnection( * @property dialect * @property snippets SQL Runner snippets for this connection (read-only) * @property pdts_enabled True if PDTs are enabled on this connection (read-only) + * @property project_id ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. */ data class DBConnectionBase( var can: Map? = null, @@ -2929,6 +2884,7 @@ data class DBConnectionBase( var dialect: Dialect? = null, var snippets: Array? = null, var pdts_enabled: Boolean? = null, + var project_id: String? = null, ) : Serializable /** @@ -3134,6 +3090,7 @@ data class DialectInfo( * @property auth Has auth support (read-only) * @property cost_estimate Has configurable cost estimation (read-only) * @property disabled Disable this connection. This will prevent any queries from running on this connection. (read-only) + * @property query_holding_disabled Disable query holding for this connection. (read-only) * @property disable_context_comment Can disable query context comments (read-only) * @property host Host is required (read-only) * @property instance_name Instance name is required (read-only) @@ -3152,6 +3109,7 @@ data class DialectInfo( * @property username Username can be specified (read-only) * @property username_required Username is required (read-only) * @property supports_connection_pooling Has support for connection pooling (read-only) + * @property user_attribute_certificate Has user attribute certificate support (read-only) */ data class DialectInfoOptions( var additional_params: Boolean? = null, @@ -3160,6 +3118,7 @@ data class DialectInfoOptions( var auth: Boolean? = null, var cost_estimate: Boolean? = null, var disabled: Boolean? = null, + var query_holding_disabled: Boolean? = null, var disable_context_comment: Boolean? = null, var host: Boolean? = null, var instance_name: Boolean? = null, @@ -3178,6 +3137,7 @@ data class DialectInfoOptions( var username: Boolean? = null, var username_required: Boolean? = null, var supports_connection_pooling: Boolean? = null, + var user_attribute_certificate: Boolean? = null, ) : Serializable /** @@ -3223,6 +3183,7 @@ data class EgressIpAddresses( * @property embed_cookieless_v2 Is Cookieless embedding enabled for this Looker * @property embed_content_navigation Is embed content navigation enabled for this looker * @property embed_content_management Is embed content management enabled for this Looker + * @property embed_vis_modernization_default Default net new visualizations in embedded context to Modern theme (read-only) * @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. @@ -3238,6 +3199,7 @@ data class EmbedConfig( var embed_cookieless_v2: Boolean? = null, var embed_content_navigation: Boolean? = null, var embed_content_management: Boolean? = null, + var embed_vis_modernization_default: Boolean? = null, var strict_sameorigin_for_login: Boolean? = null, var look_filters: Boolean? = null, var hide_look_navigation: Boolean? = null, @@ -3577,21 +3539,6 @@ enum class Format : Serializable { vector_tile_region, } -/** - * @property type A URI reference that identifies the problem type (read-only) - * @property title Overview of the error (read-only) - * @property detail Detail of the error (read-only) - * @property status The HTTP status code for the problem (read-only) - * @property instance URI reference that identifies the specific occurrence of the problem (read-only) - */ -data class GenericError( - var type: String? = null, - var title: String? = null, - var detail: String? = null, - var status: String? = null, - var instance: String? = null, -) : Serializable - /** * @property can Operations the current user is able to perform on this object (read-only) * @property name The short name on the local. Updating `name` results in `git checkout ` @@ -3655,56 +3602,6 @@ data class GitConnectionTestResult( var status: String? = null, ) : Serializable -/** - * @property can Operations the current user is able to perform on this object (read-only) - * @property id Unique ID of the diagnostic issue. (read-only) - * @property report_id Parent diagnostic report ID. (read-only) - * @property project_id Target Looker Project ID. (read-only) - * @property project_type Environment scope (developer/production). (read-only) - * @property issue_type Git diagnostic issue category. (read-only) - * @property issue_version Version schema. (read-only) - * @property state Current execution status. (read-only) - * @property created_at Creation timestamp. (read-only) - * @property updated_at Last update timestamp. (read-only) - */ -data class GitDiagnosticIssue( - var can: Map? = null, - var id: String? = null, - var report_id: String? = null, - var project_id: String? = null, - var project_type: String? = null, - var issue_type: String? = null, - var issue_version: String? = null, - var state: String? = null, - var created_at: Date? = null, - var updated_at: Date? = null, -) : Serializable - -/** - * @property can Operations the current user is able to perform on this object (read-only) - * @property id Unique ID of the git diagnostic report. (read-only) - * @property project_id Target Looker Project ID. (read-only) - * @property user_id ID of the user initiating the diagnosis. (read-only) - * @property state Raw lifecycle state. (read-only) - * @property status Status derived from state. (read-only) - * @property created_at Creation time. (read-only) - * @property updated_at Update time. (read-only) - * @property project_type Project structure type. - * @property issues Diagnostic issues associated with this report. (read-only) - */ -data class GitDiagnosticReport( - var can: Map? = null, - var id: String? = null, - var project_id: String? = null, - var user_id: String? = null, - var state: String? = null, - var status: String? = null, - var created_at: Date? = null, - var updated_at: Date? = null, - var project_type: String? = null, - var issues: Array? = null, -) : Serializable - /** * @property action Git action: add, delete, etc (read-only) * @property conflict When true, changes to the local file conflict with the remote repository (read-only) @@ -3724,7 +3621,7 @@ data class GitStatus( * @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 is_active Whether this golden question should be utilized by the agent (read-only) * @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) @@ -3736,6 +3633,8 @@ data class GitStatus( * @property sorts Sorts of the associated Looker Query (read-only) * @property limit Limit of the associated Looker Query (read-only) * @property client_id Client ID of the associated Looker Query (read-only) + * @property pivots Pivots of the associated Looker Query (read-only) + * @property dynamic_fields Dynamic fields of the associated Looker Query (read-only) */ data class GoldenQuery( var can: Map? = null, @@ -3755,6 +3654,8 @@ data class GoldenQuery( var sorts: Array? = null, var limit: String? = null, var client_id: String? = null, + var pivots: Array? = null, + var dynamic_fields: String? = null, ) : Serializable /** @@ -3942,6 +3843,27 @@ data class HomepageSection( var visible_item_order: Array? = null, ) : Serializable +/** + * @property can Operations the current user is able to perform on this object (read-only) + * @property id Unique Id (read-only) + * @property file_name Original file name (read-only) + * @property format Image format (e.g. PNG, JPG) (read-only) + * @property label Accessibility label + * @property url URL of the image (read-only) + * @property created_at Creation timestamp (read-only) + * @property updated_at Update timestamp (read-only) + */ +data class Image( + var can: Map? = null, + var id: String? = null, + var file_name: String? = null, + var format: String? = null, + var label: String? = null, + var url: String? = null, + var created_at: Date? = null, + var updated_at: Date? = null, +) : Serializable + /** * @property name Dependency name (read-only) * @property url Url for a remote dependency (read-only) @@ -5130,59 +5052,6 @@ data class LookmlTestResult( var success: Boolean? = null, ) : Serializable -/** - * @property type A URI reference that identifies the problem type (read-only) - * @property title Overview of the error (read-only) - * @property detail Detail of the error (read-only) - * @property status The HTTP status code for the problem (read-only) - * @property instance URI reference that identifies the specific occurrence of the problem (read-only) - * @property model LookML model that contains the error (read-only) - * @property explore LookML Explore that contains the error (read-only) - * @property field_name LookML field that caused the error (read-only) - * @property message Message returned by the LookML validator (read-only) - * @property severity Severity of the error (warning, error, fatal, info, success) (read-only) - * @property line_number Line number of the error in the LookML file (read-only) - * @property lookml_url URL to the LookML that caused the error (read-only) - * @property file_path IDE folder path to the LookML file that caused the error (read-only) - */ -data class LookMLValidatorError( - var type: String? = null, - var title: String? = null, - var detail: String? = null, - var status: String? = null, - var instance: String? = null, - var model: String? = null, - var explore: String? = null, - var field_name: String? = null, - var message: String? = null, - var severity: String? = null, - var line_number: String? = null, - var lookml_url: String? = null, - var file_path: String? = null, -) : Serializable - -/** - * @property lookml_error - * @property generic_error - */ -data class LookMLValidatorErrorItem( - var lookml_error: LookMLValidatorError? = null, - var generic_error: GenericError? = null, -) : Serializable - -/** - * @property name Name of the validator (lookml) (read-only) - * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - * @property error_count Total number of failed LookML validations (read-only) - * @property errors Details of the LookML that failed validation (read-only) - */ -data class LookMLValidatorResult( - var name: String? = null, - var status: String? = null, - var error_count: Long? = null, - var errors: Array? = null, -) : Serializable - /** * @property id Model Id (read-only) * @property label Model Label (read-only) @@ -5393,6 +5262,7 @@ data class MaterializePDT( * @property get_dashboards * @property get_dimensions * @property get_explores + * @property get_field_value_suggestions * @property get_filters * @property get_looks * @property get_measures @@ -5419,6 +5289,8 @@ data class MaterializePDT( * @property get_lookml_tests * @property run_lookml_tests * @property create_view_from_table + * @property render_visualization + * @property render_dashboard */ data class McpTools( var enable_all: Boolean? = null, @@ -5436,6 +5308,7 @@ data class McpTools( var get_dashboards: McpToolSetting? = null, var get_dimensions: McpToolSetting? = null, var get_explores: McpToolSetting? = null, + var get_field_value_suggestions: McpToolSetting? = null, var get_filters: McpToolSetting? = null, var get_looks: McpToolSetting? = null, var get_measures: McpToolSetting? = null, @@ -5462,6 +5335,8 @@ data class McpTools( var get_lookml_tests: McpToolSetting? = null, var run_lookml_tests: McpToolSetting? = null, var create_view_from_table: McpToolSetting? = null, + var render_visualization: McpToolSetting? = null, + var render_dashboard: McpToolSetting? = null, ) : Serializable /** @@ -5662,7 +5537,8 @@ enum class Name : Serializable { /** * @property can Operations the current user is able to perform on this object (read-only) * @property client_guid The globally unique id of this application (read-only) - * @property redirect_uri The uri with which this application will receive an auth code by browser redirect. + * @property redirect_uri (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) + * @property redirect_uris The authorized uris for which this application will receive an auth code by browser redirect. * @property display_name The application's display name * @property description A description of the application that will be displayed to users * @property enabled When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. @@ -5674,6 +5550,7 @@ data class OauthClientApp( var can: Map? = null, var client_guid: String? = null, var redirect_uri: String? = null, + var redirect_uris: Array? = null, var display_name: String? = null, var description: String? = null, var enabled: Boolean? = null, @@ -5976,6 +5853,113 @@ data class Project( var dependency_status: String? = null, ) : Serializable +/** + * @property can Operations the current user is able to perform on this object (read-only) + * @property id ID of the CI suite (read-only) + * @property name Name of the CI suite + * @property project_id ID of the LookML project (read-only) + * @property created_at Time and date that the CI suite was created (read-only) + * @property updated_at Time and date that the CI suite was updated (read-only) + * @property schedule_trigger_is_enabled Whether the CI suite schedule trigger is active + * @property schedule_trigger_crontab Crontab that the CI suite is scheduled to run + * @property schedule_trigger_timezone Timezone for the CI suite schedule + * @property alerting_enabled Whether alerting is enabled for the CI suite + * @property alert_email_addresses Email addresses to send alerts to + * @property alert_on_failed_status Whether to alert on failed status + * @property alert_on_error_status Whether to alert on error status + * @property alert_on_passed_status Whether to alert on passed status + * @property alert_on_cancelled_status Whether to alert on cancelled status + * @property change_request_trigger_is_enabled Whether the CI suite change request trigger is active + * @property change_request_trigger_hook_id ID of the hook that triggers the CI Suite to run (read-only) + * @property change_request_trigger_target_branch Git branch that should be compared against when the CI suite is run, used when the run is incremental + * @property guid GUID of the CI suite (read-only) + * @property dbt_cloud_trigger_is_enabled Whether the CI suite dbt Cloud trigger is active + * @property dbt_cloud_trigger_job_id Job ID of the dbt Cloud job + * @property dbt_cloud_trigger_user_attribute_id User Attribute ID used for schema substitution + * @property dbt_cloud_webhook_id Webhook ID registered in dbt Cloud (read-only) + * @property webhook_secret (Write-Only) Webhook secret used to authenticate incoming webhook requests + * @property has_webhook_secret Whether the CI suite has a webhook secret configured (read-only) + * @property assert_validator_config_is_enabled Whether assert validation is enabled for the CI suite + * @property assert_validator_config_concurrency Number of tests that should run concurrently during assert validation + * @property assert_validator_config_selectors Explores that assert validation should run for (model_name/explore_name) + * @property assert_validator_config_exclusions Explores that should be excluded from assert validation (model_name/explore_name) + * @property content_validator_config_is_enabled Whether content validation is enabled for the CI suite + * @property content_validator_config_exclude_personal Whether content validation should ignore personal folders + * @property content_validator_config_incremental Whether content should validate incrementally + * @property content_validator_config_exclude_folders Folders whose content should not be validated + * @property content_validator_config_include_folders Folders whose content should be validated + * @property content_validator_config_selectors Explores whose content should be validated (model_name/explore_name) + * @property content_validator_config_exclusions Explores that should be excluded from content validation (model_name/explore_name) + * @property lookml_validator_config_is_enabled Whether LookML validation is enabled for the CI suite + * @property lookml_validator_config_severity Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + * @property lookml_validator_config_timeout Amount of time after which LookML Validation should stop running + * @property style_validator_config_is_enabled Whether LookML Style Validator is enabled for the CI suite + * @property style_validator_config_incremental Whether LookML Style Validator should run incrementally on changed LookML files only + * @property sql_validator_config_is_enabled Whether SQL validation is enabled for the CI suite + * @property sql_validator_config_fail_fast Whether SQL validation should stop after the first failure + * @property sql_validator_config_incremental Whether SQL should validate incrementally + * @property sql_validator_config_ignore_hidden Whether SQL validation should ignore hidden fields + * @property sql_validator_config_query_concurrency Number of queries that should run concurrently during SQL validation + * @property sql_validator_config_chunk_size The max number of rows that should be returned for each query + * @property sql_validator_config_selectors Explores whose sql should be validated (model_name/explore_name) + * @property sql_validator_config_exclusions Explores that should be excluded from SQL validation (model_name/explore_name) + * @property upstream_trigger_is_enabled Whether the CI suite upstream project imports trigger is active + * @property upstream_projects Names of upstream projects subscribed for pull request triggers + */ +data class ProjectCISuite( + var can: Map? = null, + var id: String? = null, + var name: String? = null, + var project_id: String? = null, + var created_at: Date? = null, + var updated_at: Date? = null, + var schedule_trigger_is_enabled: Boolean? = null, + var schedule_trigger_crontab: String? = null, + var schedule_trigger_timezone: String? = null, + var alerting_enabled: Boolean? = null, + var alert_email_addresses: Array? = null, + var alert_on_failed_status: Boolean? = null, + var alert_on_error_status: Boolean? = null, + var alert_on_passed_status: Boolean? = null, + var alert_on_cancelled_status: Boolean? = null, + var change_request_trigger_is_enabled: Boolean? = null, + var change_request_trigger_hook_id: String? = null, + var change_request_trigger_target_branch: String? = null, + var guid: String? = null, + var dbt_cloud_trigger_is_enabled: Boolean? = null, + var dbt_cloud_trigger_job_id: Long? = null, + var dbt_cloud_trigger_user_attribute_id: String? = null, + var dbt_cloud_webhook_id: String? = null, + var webhook_secret: String? = null, + var has_webhook_secret: Boolean? = null, + var assert_validator_config_is_enabled: Boolean? = null, + var assert_validator_config_concurrency: Long? = null, + var assert_validator_config_selectors: Array? = null, + var assert_validator_config_exclusions: Array? = null, + var content_validator_config_is_enabled: Boolean? = null, + var content_validator_config_exclude_personal: Boolean? = null, + var content_validator_config_incremental: Boolean? = null, + var content_validator_config_exclude_folders: Array? = null, + var content_validator_config_include_folders: Array? = null, + var content_validator_config_selectors: Array? = null, + var content_validator_config_exclusions: Array? = null, + var lookml_validator_config_is_enabled: Boolean? = null, + var lookml_validator_config_severity: String? = null, + var lookml_validator_config_timeout: Long? = null, + var style_validator_config_is_enabled: Boolean? = null, + var style_validator_config_incremental: Boolean? = null, + var sql_validator_config_is_enabled: Boolean? = null, + var sql_validator_config_fail_fast: Boolean? = null, + var sql_validator_config_incremental: Boolean? = null, + var sql_validator_config_ignore_hidden: Boolean? = null, + var sql_validator_config_query_concurrency: Long? = null, + var sql_validator_config_chunk_size: Long? = null, + var sql_validator_config_selectors: Array? = null, + var sql_validator_config_exclusions: Array? = null, + var upstream_trigger_is_enabled: Boolean? = null, + var upstream_projects: Array? = null, +) : Serializable + /** * @property code A stable token that uniquely identifies this class of error, ignoring parameter values. Error message text may vary due to parameters or localization, but error codes do not. For example, a "File not found" error will have the same error code regardless of the filename in question or the user's display language (read-only) * @property severity Severity: fatal, error, warning, info, success (read-only) @@ -6028,13 +6012,6 @@ data class ProjectFile( var git_status: GitStatus? = null, ) : Serializable -/** - * @property run - */ -data class ProjectRun( - var run: Run? = null, -) : Serializable - /** * @property errors A list of project errors (read-only) * @property project_digest A hash value computed from the project's current state (read-only) @@ -6421,43 +6398,6 @@ data class RoleSearch( var users_url: String? = null, ) : Serializable -/** - * @property run_id ID of the CI run (read-only) - * @property created_at Time and date that the CI run was initiated (read-only) - * @property started_at Time and date that the CI run began executing (read-only) - * @property finished_at Time and date that the CI run completed (read-only) - * @property status_url Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite (read-only) - * @property status Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - * @property git_service Git service for CI run (e.g. GitHub) (read-only) - * @property git_state - * @property result - * @property schedule - * @property target_branch Git branch that the CI run compares against during validation, used for incremental runs (read-only) - * @property title Name of the CI suite (read-only) - * @property trigger Trigger for CI run (unknown, manual, schedule, change_request) (read-only) - * @property change_request - * @property suite_id ID of the CI suite (read-only) - * @property username Username of the user who triggered the CI run, if the CI run was manually triggered (read-only) - */ -data class Run( - var run_id: String? = null, - var created_at: Date? = null, - var started_at: Date? = null, - var finished_at: Date? = null, - var status_url: String? = null, - var status: String? = null, - var git_service: String? = null, - var git_state: CIGitState? = null, - var result: RunResult? = null, - var schedule: CIScheduleTrigger? = null, - var target_branch: String? = null, - var title: String? = null, - var trigger: String? = null, - var change_request: CIChangeRequest? = null, - var suite_id: String? = null, - var username: String? = null, -) : Serializable - /** * @property can Operations the current user is able to perform on this object (read-only) * @property id Unique Id (read-only) @@ -6507,29 +6447,6 @@ data class RunningQueries( var sql_interface_sql: String? = null, ) : Serializable -/** - * @property sql_result - * @property sql_error - * @property assert_result - * @property assert_error - * @property content_result - * @property content_error - * @property lookml_result - * @property lookml_error - * @property generic_error - */ -data class RunResult( - var sql_result: SqlValidatorResult? = null, - var sql_error: GenericError? = null, - var assert_result: AssertValidatorResult? = null, - var assert_error: GenericError? = null, - var content_result: ContentValidatorResult? = null, - var content_error: GenericError? = null, - var lookml_result: LookMLValidatorResult? = null, - var lookml_error: GenericError? = null, - var generic_error: GenericError? = null, -) : Serializable - /** * @property can Operations the current user is able to perform on this object (read-only) * @property enabled Enable/Disable Saml authentication for the server @@ -6718,6 +6635,7 @@ data class SamlUserAttributeWrite( * @property color_theme Color scheme of the dashboard if applicable * @property long_tables Whether or not to expand table vis to full length * @property pdf_page_breaks Whether or not to add page breaks between tabs + * @property include_filters Whether or not to include filters context * @property tab_ids IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) * @property inline_table_width The pixel width at which we render the inline table visualizations * @property query_id Query id @@ -6725,9 +6643,11 @@ data class SamlUserAttributeWrite( * @property created_at Date and time when ScheduledPlan was created (read-only) * @property updated_at Date and time when ScheduledPlan was last updated (read-only) * @property title Title (read-only) + * @property content_title Title of the underlying content (Dashboard, Look, LookML Dashboard, or Explore) associated with this ScheduledPlan (read-only) * @property user * @property next_run_at When the ScheduledPlan will next run (null if running once) (read-only) * @property last_run_at When the ScheduledPlan was last run (read-only) + * @property last_run_status Status of the last run for this ScheduledPlan (read-only) * @property can Operations the current user is able to perform on this object (read-only) */ data class ScheduledPlan( @@ -6761,6 +6681,7 @@ data class ScheduledPlan( var color_theme: String? = null, var long_tables: Boolean? = null, var pdf_page_breaks: Boolean? = null, + var include_filters: Boolean? = null, var tab_ids: Array? = null, var inline_table_width: Long? = null, var query_id: String? = null, @@ -6768,9 +6689,11 @@ data class ScheduledPlan( var created_at: Date? = null, var updated_at: Date? = null, var title: String? = null, + var content_title: String? = null, var user: UserPublic? = null, var next_run_at: Date? = null, var last_run_at: Date? = null, + var last_run_status: String? = null, var can: Map? = null, ) : Serializable @@ -6785,6 +6708,7 @@ data class ScheduledPlan( * @property type Type of the address ('email', 'webhook', 's3', or 'sftp') * @property parameters JSON object containing parameters for external scheduling. For Amazon S3, this requires keys and values for access_key_id and region. For SFTP, this requires a key and value for username. * @property secret_parameters (Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password. + * @property include_filters Whether or not to include filters context * @property message Optional message to be included in scheduled emails */ data class ScheduledPlanDestination( @@ -6798,6 +6722,7 @@ data class ScheduledPlanDestination( var type: String? = null, var parameters: String? = null, var secret_parameters: String? = null, + var include_filters: Boolean? = null, var message: String? = null, ) : Serializable @@ -7016,6 +6941,7 @@ data class SessionConfig( * @property override_warnings (Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings. * @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_vis_modernization_default Default net new visualizations in embedded context to Modern theme * @property embed_enabled True if embedding is enabled https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise (read-only) * @property embed_config * @property login_notification_enabled Login notification enabled (read-only) @@ -7050,6 +6976,7 @@ data class Setting( var override_warnings: Boolean? = null, var email_domain_allowlist: Array? = null, var embed_cookieless_v2: Boolean? = null, + var embed_vis_modernization_default: Boolean? = null, var embed_enabled: Boolean? = null, var embed_config: EmbedConfig? = null, var login_notification_enabled: Boolean? = null, @@ -7216,74 +7143,6 @@ data class SqlQueryCreate( var vis_config: Map? = null, ) : Serializable -/** - * @property type A URI reference that identifies the problem type (read-only) - * @property title Overview of the error (read-only) - * @property detail Detail of the error (read-only) - * @property status The HTTP status code for the problem (read-only) - * @property instance URI reference that identifies the specific occurrence of the problem (read-only) - * @property model LookML model that contains the Explore that failed SQL validation (read-only) - * @property explore LookML Explore that failed SQL validation (read-only) - * @property message Message returned by the SQL validation (read-only) - * @property explore_url URL to the Explore (read-only) - * @property lookml_url URL to the LookML that caused the error (read-only) - * @property dimension LookML dimension that caused the error (read-only) - * @property line_number Line of the error in the LookML file (read-only) - */ -data class SqlValidatorError( - var type: String? = null, - var title: String? = null, - var detail: String? = null, - var status: String? = null, - var instance: String? = null, - var model: String? = null, - var explore: String? = null, - var message: String? = null, - var explore_url: String? = null, - var lookml_url: String? = null, - var dimension: String? = null, - var line_number: String? = null, -) : Serializable - -/** - * @property sql_error - * @property generic_error - */ -data class SqlValidatorErrorItem( - var sql_error: SqlValidatorError? = null, - var generic_error: GenericError? = null, -) : Serializable - -/** - * @property name Name of the validator (sql) (read-only) - * @property incremental Whether the validation was incremental (read-only) - * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - * @property result The results of tested Explores (read-only) - */ -data class SqlValidatorResult( - var name: String? = null, - var incremental: Boolean? = null, - var status: String? = null, - var result: Array? = null, -) : Serializable - -/** - * @property model LookML model that was tested (read-only) - * @property explore LookML Explore that was tested (read-only) - * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - * @property skip_reason Reason the validation was skipped (read-only) - * @property error_count Total number of failed validations (read-only) - * @property errors Details of the LookML that failed SQL validation (read-only) - */ -data class SqlValidatorTestedExplore( - var model: String? = null, - var explore: String? = null, - var status: String? = null, - var skip_reason: String? = null, - var error_count: Long? = null, - var errors: Array? = null, -) : Serializable - /** * @property public_key The SSH public key created for this instance (read-only) */ @@ -7493,6 +7352,9 @@ data class Theme( /** * @property background_color Default background color + * @property background_image_url URL for background image + * @property background_image_id Optional. ID of theme background image. + * @property background_opacity Background image opacity (0.0 to 1.0). * @property base_font_size Base font size for scaling fonts (only supported by legacy dashboards) * @property color_collection_id Optional. ID of color collection to use with the theme. Use an empty string for none. * @property font_color Default font color @@ -7540,6 +7402,9 @@ data class Theme( */ data class ThemeSettings( var background_color: String? = null, + var background_image_url: String? = null, + var background_image_id: String? = null, + var background_opacity: Float? = null, var base_font_size: String? = null, var color_collection_id: String? = null, var font_color: String? = null, @@ -7711,7 +7576,7 @@ data class User( * @property id Unique Id (read-only) * @property name Name of user attribute * @property label Human-friendly label for user attribute - * @property type Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + * @property type Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") * @property default_value Default value for when no value is set on the user * @property is_system Attribute is a system default (read-only) * @property is_permanent Attribute is permanent and cannot be deleted (read-only) @@ -7811,6 +7676,41 @@ data class UserAttributeWithValue( var hidden_value_domain_whitelist: String? = null, ) : Serializable +/** + * @property can Operations the current user is able to perform on this object (read-only) + * @property id ID of the connection (read-only) + * @property name Name of the connection (must match virtual namespace pattern) (read-only) + * @property user_id ID of the user who owns the connection (read-only) + * @property dialect Database dialect name (read-only) + * @property auth_type Authentication type (oauth, service_account, password) (read-only) + * @property host Host name/address of server (read-only) + * @property port Port number on server (read-only) + * @property database Database name (read-only) + * @property schema Schema name (read-only) + * @property jdbc_additional_params Additional JDBC parameters (read-only) + * @property oauth_application_id OAuth application ID (if auth_type is oauth) (read-only) + * @property enabled Whether this connection is enabled + * @property created_at When the connection was created (read-only) + * @property updated_at When the connection was last updated (read-only) + */ +data class UserDbConnection( + var can: Map? = null, + var id: String? = null, + var name: String? = null, + var user_id: Long? = null, + var dialect: String? = null, + var auth_type: String? = null, + var host: String? = null, + var port: String? = null, + var database: String? = null, + var schema: String? = null, + var jdbc_additional_params: String? = null, + var oauth_application_id: Long? = null, + var enabled: Boolean? = null, + var created_at: Date? = null, + var updated_at: Date? = null, +) : Serializable + /** * @property email Email Address */ @@ -7987,7 +7887,7 @@ data class Workspace( /** * Dynamic writeable type for Agent removes: - * 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 + * 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, is_lookml, lookml_agent_id, lookml_edit_uri * * @property created_by_user_id User that created the Agent * @property name Agent name @@ -8236,7 +8136,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_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 + * 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, is_lookml, lookml_agent_id, lookml_edit_uri */ data class WriteConversation( var name: String? = null, @@ -8376,6 +8276,7 @@ data class WriteCredentialsEmail( * @property tile_text_color Tile text color * @property title_color Title color * @property appearance + * @property layout_granularity The layout granularity to apply to this dashboard (ie: default or granular) * @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 */ @@ -8408,6 +8309,7 @@ data class WriteDashboard( var tile_text_color: String? = null, var title_color: String? = null, var appearance: DashboardAppearance? = null, + var layout_granularity: String? = null, var preserve_desktop_layout: Boolean? = null, var download_settings: DashboardDownloadSettings? = null, ) : Serializable @@ -8428,7 +8330,7 @@ data class WriteDashboardBase( /** * Dynamic writeable type for DashboardElement removes: - * can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html + * can, body_text_as_html, group_id, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html, images * * @property body_text Text tile body text * @property dashboard_id Id of Dashboard @@ -8458,6 +8360,7 @@ data class WriteDashboardBase( * @property aria_description Custom ARIA description text * @property certification_metadata Dynamic writeable type for Certification removes: * ui_status, user_name, updated_at + * @property image_id ID of Dashboard Image */ data class WriteDashboardElement( var body_text: String? = null, @@ -8484,6 +8387,7 @@ data class WriteDashboardElement( var extension_id: String? = null, var aria_description: String? = null, var certification_metadata: WriteCertification? = null, + var image_id: String? = null, ) : Serializable /** @@ -8559,6 +8463,7 @@ data class WriteDashboardLayout( * @property granular_column Column (granular layout) * @property granular_width Width (granular layout) * @property granular_height Height (granular layout) + * @property group_id Id of parent Dashboard Layout Component group */ data class WriteDashboardLayoutComponent( var dashboard_layout_id: String? = null, @@ -8572,6 +8477,7 @@ data class WriteDashboardLayoutComponent( var granular_column: Long? = null, var granular_width: Long? = null, var granular_height: Long? = null, + var group_id: String? = null, ) : Serializable /** @@ -8603,13 +8509,16 @@ data class WriteDatagroup( * can, dialect, snippets, pdts_enabled, named_driver_version_actual, has_password, uses_oauth, uses_instance_oauth, uses_service_auth, supports_data_studio_link, created_at, user_id, example, last_regen_at, last_reap_at, managed, default_bq_connection, p4sa_name * * @property name Name of the connection. Also used as the unique identifier + * @property project_id ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. * @property named_driver_version_requested Requested JDBC driver version name * @property host Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. * @property port Port number on server. If the connection is over an SSH tunnel, then the local port associated with the SSH tunnel. * @property username Username for server authentication * @property password (Write-Only) Password for server authentication + * @property service_account_auth_enabled Whether Service Account OAuth authentication is enabled for this connection * @property uses_key_pair_auth Whether the connection uses key-pair for authentication. * @property certificate (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + * @property user_attr_certificate The name of the user attribute containing the connection certificate. * @property file_type (Write-Only) Certificate keyfile type - .json, .p8 or .p12 * @property database Database name * @property db_timezone Time zone of database @@ -8653,13 +8562,16 @@ data class WriteDatagroup( */ data class WriteDBConnection( var name: String? = null, + var project_id: String? = null, var named_driver_version_requested: String? = null, var host: String? = null, var port: String? = null, var username: String? = null, var password: String? = null, + var service_account_auth_enabled: Boolean? = null, var uses_key_pair_auth: Boolean? = null, var certificate: String? = null, + var user_attr_certificate: String? = null, var file_type: String? = null, var database: String? = null, var db_timezone: String? = null, @@ -8755,7 +8667,7 @@ data class WriteDBConnectionOverride( /** * Dynamic writeable type for EmbedConfig removes: - * permissions, embed_enabled + * embed_vis_modernization_default, 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 @@ -8841,28 +8753,16 @@ data class WriteGitBranch( var ref: String? = null, ) : Serializable -/** - * Dynamic writeable type for GitDiagnosticReport removes: - * can, id, project_id, user_id, state, status, created_at, updated_at, issues - * - * @property project_type Project structure type. - */ -data class WriteGitDiagnosticReport( - var project_type: 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, explore, model, fields, filters, sorts, limit, client_id + * can, id, query_id, is_active, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at, explore, model, fields, filters, sorts, limit, client_id, pivots, dynamic_fields * * @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 /** @@ -9105,6 +9005,8 @@ data class WriteLookWithQuery( * description, category, access_level * @property get_explores Dynamic writeable type for McpToolSetting removes: * description, category, access_level + * @property get_field_value_suggestions Dynamic writeable type for McpToolSetting removes: + * description, category, access_level * @property get_filters Dynamic writeable type for McpToolSetting removes: * description, category, access_level * @property get_looks Dynamic writeable type for McpToolSetting removes: @@ -9157,6 +9059,10 @@ data class WriteLookWithQuery( * description, category, access_level * @property create_view_from_table Dynamic writeable type for McpToolSetting removes: * description, category, access_level + * @property render_visualization Dynamic writeable type for McpToolSetting removes: + * description, category, access_level + * @property render_dashboard Dynamic writeable type for McpToolSetting removes: + * description, category, access_level */ data class WriteMcpTools( var enable_all: Boolean? = null, @@ -9174,6 +9080,7 @@ data class WriteMcpTools( var get_dashboards: WriteMcpToolSetting? = null, var get_dimensions: WriteMcpToolSetting? = null, var get_explores: WriteMcpToolSetting? = null, + var get_field_value_suggestions: WriteMcpToolSetting? = null, var get_filters: WriteMcpToolSetting? = null, var get_looks: WriteMcpToolSetting? = null, var get_measures: WriteMcpToolSetting? = null, @@ -9200,6 +9107,8 @@ data class WriteMcpTools( var get_lookml_tests: WriteMcpToolSetting? = null, var run_lookml_tests: WriteMcpToolSetting? = null, var create_view_from_table: WriteMcpToolSetting? = null, + var render_visualization: WriteMcpToolSetting? = null, + var render_dashboard: WriteMcpToolSetting? = null, ) : Serializable /** @@ -9264,7 +9173,8 @@ data class WriteModelSet( * Dynamic writeable type for OauthClientApp removes: * can, client_guid, tokens_invalid_before, activated_users * - * @property redirect_uri The uri with which this application will receive an auth code by browser redirect. + * @property redirect_uri (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) + * @property redirect_uris The authorized uris for which this application will receive an auth code by browser redirect. * @property display_name The application's display name * @property description A description of the application that will be displayed to users * @property enabled When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. @@ -9272,6 +9182,7 @@ data class WriteModelSet( */ data class WriteOauthClientApp( var redirect_uri: String? = null, + var redirect_uris: Array? = null, var display_name: String? = null, var description: String? = null, var enabled: Boolean? = null, @@ -9444,6 +9355,98 @@ data class WriteProject( var dependency_status: String? = null, ) : Serializable +/** + * Dynamic writeable type for ProjectCISuite removes: + * can, id, project_id, created_at, updated_at, change_request_trigger_hook_id, guid, dbt_cloud_webhook_id, has_webhook_secret + * + * @property name Name of the CI suite + * @property schedule_trigger_is_enabled Whether the CI suite schedule trigger is active + * @property schedule_trigger_crontab Crontab that the CI suite is scheduled to run + * @property schedule_trigger_timezone Timezone for the CI suite schedule + * @property alerting_enabled Whether alerting is enabled for the CI suite + * @property alert_email_addresses Email addresses to send alerts to + * @property alert_on_failed_status Whether to alert on failed status + * @property alert_on_error_status Whether to alert on error status + * @property alert_on_passed_status Whether to alert on passed status + * @property alert_on_cancelled_status Whether to alert on cancelled status + * @property change_request_trigger_is_enabled Whether the CI suite change request trigger is active + * @property change_request_trigger_target_branch Git branch that should be compared against when the CI suite is run, used when the run is incremental + * @property dbt_cloud_trigger_is_enabled Whether the CI suite dbt Cloud trigger is active + * @property dbt_cloud_trigger_job_id Job ID of the dbt Cloud job + * @property dbt_cloud_trigger_user_attribute_id User Attribute ID used for schema substitution + * @property webhook_secret (Write-Only) Webhook secret used to authenticate incoming webhook requests + * @property assert_validator_config_is_enabled Whether assert validation is enabled for the CI suite + * @property assert_validator_config_concurrency Number of tests that should run concurrently during assert validation + * @property assert_validator_config_selectors Explores that assert validation should run for (model_name/explore_name) + * @property assert_validator_config_exclusions Explores that should be excluded from assert validation (model_name/explore_name) + * @property content_validator_config_is_enabled Whether content validation is enabled for the CI suite + * @property content_validator_config_exclude_personal Whether content validation should ignore personal folders + * @property content_validator_config_incremental Whether content should validate incrementally + * @property content_validator_config_exclude_folders Folders whose content should not be validated + * @property content_validator_config_include_folders Folders whose content should be validated + * @property content_validator_config_selectors Explores whose content should be validated (model_name/explore_name) + * @property content_validator_config_exclusions Explores that should be excluded from content validation (model_name/explore_name) + * @property lookml_validator_config_is_enabled Whether LookML validation is enabled for the CI suite + * @property lookml_validator_config_severity Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + * @property lookml_validator_config_timeout Amount of time after which LookML Validation should stop running + * @property style_validator_config_is_enabled Whether LookML Style Validator is enabled for the CI suite + * @property style_validator_config_incremental Whether LookML Style Validator should run incrementally on changed LookML files only + * @property sql_validator_config_is_enabled Whether SQL validation is enabled for the CI suite + * @property sql_validator_config_fail_fast Whether SQL validation should stop after the first failure + * @property sql_validator_config_incremental Whether SQL should validate incrementally + * @property sql_validator_config_ignore_hidden Whether SQL validation should ignore hidden fields + * @property sql_validator_config_query_concurrency Number of queries that should run concurrently during SQL validation + * @property sql_validator_config_chunk_size The max number of rows that should be returned for each query + * @property sql_validator_config_selectors Explores whose sql should be validated (model_name/explore_name) + * @property sql_validator_config_exclusions Explores that should be excluded from SQL validation (model_name/explore_name) + * @property upstream_trigger_is_enabled Whether the CI suite upstream project imports trigger is active + * @property upstream_projects Names of upstream projects subscribed for pull request triggers + */ +data class WriteProjectCISuite( + var name: String? = null, + var schedule_trigger_is_enabled: Boolean? = null, + var schedule_trigger_crontab: String? = null, + var schedule_trigger_timezone: String? = null, + var alerting_enabled: Boolean? = null, + var alert_email_addresses: Array? = null, + var alert_on_failed_status: Boolean? = null, + var alert_on_error_status: Boolean? = null, + var alert_on_passed_status: Boolean? = null, + var alert_on_cancelled_status: Boolean? = null, + var change_request_trigger_is_enabled: Boolean? = null, + var change_request_trigger_target_branch: String? = null, + var dbt_cloud_trigger_is_enabled: Boolean? = null, + var dbt_cloud_trigger_job_id: Long? = null, + var dbt_cloud_trigger_user_attribute_id: String? = null, + var webhook_secret: String? = null, + var assert_validator_config_is_enabled: Boolean? = null, + var assert_validator_config_concurrency: Long? = null, + var assert_validator_config_selectors: Array? = null, + var assert_validator_config_exclusions: Array? = null, + var content_validator_config_is_enabled: Boolean? = null, + var content_validator_config_exclude_personal: Boolean? = null, + var content_validator_config_incremental: Boolean? = null, + var content_validator_config_exclude_folders: Array? = null, + var content_validator_config_include_folders: Array? = null, + var content_validator_config_selectors: Array? = null, + var content_validator_config_exclusions: Array? = null, + var lookml_validator_config_is_enabled: Boolean? = null, + var lookml_validator_config_severity: String? = null, + var lookml_validator_config_timeout: Long? = null, + var style_validator_config_is_enabled: Boolean? = null, + var style_validator_config_incremental: Boolean? = null, + var sql_validator_config_is_enabled: Boolean? = null, + var sql_validator_config_fail_fast: Boolean? = null, + var sql_validator_config_incremental: Boolean? = null, + var sql_validator_config_ignore_hidden: Boolean? = null, + var sql_validator_config_query_concurrency: Long? = null, + var sql_validator_config_chunk_size: Long? = null, + var sql_validator_config_selectors: Array? = null, + var sql_validator_config_exclusions: Array? = null, + var upstream_trigger_is_enabled: Boolean? = null, + var upstream_projects: Array? = null, +) : Serializable + /** * Dynamic writeable type for Query removes: * can, id, slug, share_url, expanded_share_url, url, has_table_calculations @@ -9611,7 +9614,7 @@ data class WriteSamlConfig( /** * Dynamic writeable type for ScheduledPlan removes: - * id, created_at, updated_at, title, user, next_run_at, last_run_at, can + * id, created_at, updated_at, title, content_title, user, next_run_at, last_run_at, last_run_status, can * * @property name Name of this scheduled plan * @property user_id User Id which owns this scheduled plan @@ -9643,6 +9646,7 @@ data class WriteSamlConfig( * @property color_theme Color scheme of the dashboard if applicable * @property long_tables Whether or not to expand table vis to full length * @property pdf_page_breaks Whether or not to add page breaks between tabs + * @property include_filters Whether or not to include filters context * @property tab_ids IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) * @property inline_table_width The pixel width at which we render the inline table visualizations * @property query_id Query id @@ -9678,6 +9682,7 @@ data class WriteScheduledPlan( var color_theme: String? = null, var long_tables: Boolean? = null, var pdf_page_breaks: Boolean? = null, + var include_filters: Boolean? = null, var tab_ids: Array? = null, var inline_table_width: Long? = null, var query_id: String? = null, @@ -9734,8 +9739,9 @@ data class WriteSessionConfig( * @property override_warnings (Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings. * @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_vis_modernization_default Default net new visualizations in embedded context to Modern theme * @property embed_config Dynamic writeable type for EmbedConfig removes: - * permissions, embed_enabled + * embed_vis_modernization_default, 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 @@ -9764,6 +9770,7 @@ data class WriteSetting( var override_warnings: Boolean? = null, var email_domain_allowlist: Array? = null, var embed_cookieless_v2: Boolean? = null, + var embed_vis_modernization_default: Boolean? = null, var embed_config: WriteEmbedConfig? = null, var dashboard_auto_refresh_restriction: Boolean? = null, var dashboard_auto_refresh_minimum_interval: String? = null, @@ -9870,7 +9877,7 @@ data class WriteUser( * * @property name Name of user attribute * @property label Human-friendly label for user attribute - * @property type Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + * @property type Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") * @property default_value Default value for when no value is set on the user * @property value_is_hidden If true, users will not be able to view values of this attribute * @property user_can_view Non-admin users can see the values of their attributes and use them in filters @@ -9902,6 +9909,16 @@ data class WriteUserAttributeWithValue( var value: String? = null, ) : Serializable +/** + * Dynamic writeable type for UserDbConnection removes: + * can, id, name, user_id, dialect, auth_type, host, port, database, schema, jdbc_additional_params, oauth_application_id, created_at, updated_at + * + * @property enabled Whether this connection is enabled + */ +data class WriteUserDbConnection( + var enabled: Boolean? = null, +) : Serializable + /** * Dynamic writeable type for WhitelabelConfiguration removes: * id, logo_url, favicon_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 f1eebb866..efa04c24a 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 @@ */ /** - * 518 API methods + * 529 API methods */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -2519,6 +2519,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -2565,6 +2566,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -3139,6 +3141,58 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { return this.get("/ssh_public_key", mapOf()) } + /** + * ### Get All User DB Connections + * + * Returns a list of user DB connections. + * + * @param {String} fields Requested fields. + * + * GET /user_db_connections -> ByteArray + */ + @JvmOverloads fun all_user_db_connections( + fields: String? = null, + ): SDKResponse { + return this.get( + "/user_db_connections", + mapOf("fields" to fields), + ) + } + + /** + * ### Update User DB Connection + * + * Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + * + * @param {String} user_db_connection_id Id of user DB connection + * @param {WriteUserDbConnection} body + * + * PATCH /user_db_connections/{user_db_connection_id} -> ByteArray + */ + fun update_user_db_connection( + user_db_connection_id: String, + body: WriteUserDbConnection, + ): SDKResponse { + val path_user_db_connection_id = encodeParam(user_db_connection_id) + return this.patch("/user_db_connections/${path_user_db_connection_id}", mapOf(), body) + } + + /** + * ### Delete User DB Connection + * + * Deletes an existing user DB connection. + * + * @param {String} user_db_connection_id Id of user DB connection + * + * DELETE /user_db_connections/{user_db_connection_id} -> ByteArray + */ + fun delete_user_db_connection( + user_db_connection_id: String, + ): SDKResponse { + val path_user_db_connection_id = encodeParam(user_db_connection_id) + return this.delete("/user_db_connections/${path_user_db_connection_id}", mapOf()) + } + //endregion Connection: Manage Database Connections //region Content: Manage Content @@ -3799,6 +3853,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Get LookML of a UDD Agent + * + * Returns the LookML representation of a user-defined (UDD) agent. + * + * @param {String} agent_id Id of agent + * + * GET /agents/lookml/{agent_id} -> ByteArray + */ + fun agent_lookml( + agent_id: String, + ): SDKResponse { + val path_agent_id = encodeParam(agent_id) + return this.get("/agents/lookml/${path_agent_id}", mapOf()) + } + /** * ### Get All Conversation Messages * @@ -3925,6 +3995,34 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Get Agent Responses for User Message + * + * Get all agent response messages generated for a specific user prompt. + * + * An agent response often consists of multiple message blocks (such as text explanations, + * visualizations, and follow-up suggestions). This endpoint returns all response messages + * following the specified user message up to the next user prompt. + * + * @param {String} conversation_id Conversation ID + * @param {String} user_message_id User Conversation Message ID + * @param {String} fields Requested fields + * + * GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> ByteArray + */ + @JvmOverloads fun get_conversation_message_responses( + conversation_id: String, + user_message_id: String, + fields: String? = null, + ): SDKResponse { + val path_conversation_id = encodeParam(conversation_id) + val path_user_message_id = encodeParam(user_message_id) + return this.get( + "/conversations/${path_conversation_id}/messages/${path_user_message_id}/responses", + mapOf("fields" to fields), + ) + } + /** * ### Search Conversations * @@ -4426,6 +4524,27 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { return this.delete("/dashboards/${path_dashboard_id}", mapOf()) } + /** + * ### Get Dashboard Image + * + * Returns the image content for a dashboard element. + * + * @param {String} dashboard_id Id of dashboard + * @param {String} image_slug Slug of image + * + * GET /dashboards/{dashboard_id}/images/{image_slug} -> ByteArray + * + * **Note**: Binary content may be returned by this method. + */ + fun get_dashboard_image( + dashboard_id: String, + image_slug: String, + ): SDKResponse { + val path_dashboard_id = encodeParam(dashboard_id) + val path_image_slug = encodeParam(image_slug) + return this.get("/dashboards/${path_dashboard_id}/images/${path_image_slug}", mapOf()) + } + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -4470,17 +4589,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * Boolean search params accept only "true" and "false" as values. * * + * **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + * * The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. * * Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) * * @param {String} folder_id Filter on a particular folder. - * @param {String} title Match LookML Dashboard title. + * @param {String} title Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title. * @param {String} content_favorite_id Filter on a content favorite id. * @param {String} fields Requested fields. * @param {Long} limit Number of results to return. (used with offset and takes priority over page and per_page) * @param {Long} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - * @param {String} sorts One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status] + * @param {String} sorts One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title. * * GET /dashboards/lookml/search -> ByteArray */ @@ -4533,17 +4654,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * @param {String} dashboard_id Dashboard id to move. * @param {String} folder_id Folder id to move to. + * @param {String} project_name LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. * * PATCH /dashboards/{dashboard_id}/move -> ByteArray */ - fun move_dashboard( + @JvmOverloads fun move_dashboard( dashboard_id: String, folder_id: String, + project_name: String? = null, ): SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.patch( "/dashboards/${path_dashboard_id}/move", - mapOf("folder_id" to folder_id), + mapOf( + "folder_id" to folder_id, + "project_name" to project_name, + ), ) } @@ -6553,6 +6679,8 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {String} look_id Id of look * @param {String} result_format Format of result * @param {Long} limit Row limit (may override the limit in the saved query). @@ -7073,57 +7201,170 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { //region Project: Manage Projects /** - * ### Fetches a CI Run. + * ### Search Continuous Integration Runs for a project. * - * This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + * Returns an array of Continuous Integration Run objects that match the specified search criteria. * * @param {String} project_id Project Id - * @param {String} run_id Run Id * @param {String} fields Requested fields + * @param {String} suite_id Filter by suite id. Can be a comma-separated list of ids. + * @param {String} status Filter by status. Can be a comma-separated list of statuses. + * @param {String} user_id Filter by user id. Can be a comma-separated list of ids. + * @param {String} trigger_type Filter by trigger type. Can be a comma-separated list of types. + * @param {Long} limit Number of results to return (min 1, max 100, default 50, used with offset) + * @param {Long} offset Number of results to skip before returning. (used with limit) + * @param {String} sorts One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at * - * GET /projects/{project_id}/ci/runs/{run_id} -> ByteArray + * GET /projects/{project_id}/continuous_integration/runs/search -> ByteArray */ - @Deprecated(message = "Deprecated method") - @JvmOverloads - fun get_ci_run( + @JvmOverloads fun search_continuous_integration_runs( project_id: String, - run_id: String, fields: String? = null, + suite_id: String? = null, + status: String? = null, + user_id: String? = null, + trigger_type: String? = null, + limit: Long? = null, + offset: Long? = null, + sorts: String? = null, ): SDKResponse { val path_project_id = encodeParam(project_id) - val path_run_id = encodeParam(run_id) return this.get( - "/projects/${path_project_id}/ci/runs/${path_run_id}", - mapOf("fields" to fields), + "/projects/${path_project_id}/continuous_integration/runs/search", + mapOf( + "fields" to fields, + "suite_id" to suite_id, + "status" to status, + "user_id" to user_id, + "trigger_type" to trigger_type, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + ), ) } /** - * ### Creates a CI Run. + * ### Fetches Multiple CI Suite Configurations for Project. + * + * @param {String} project_id Project Id + * @param {String} fields Requested fields + * @param {Long} limit Number of suites to return (min 1, max 100, default 50) + * @param {Long} offset Row offset at which to fetch suites + * @param {Date} created_at Time at which to fetch suites * - * This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + * GET /projects/{project_id}/continuous_integration/suites -> ByteArray + */ + @JvmOverloads fun get_continuous_integration_suites( + project_id: String, + fields: String? = null, + limit: Long? = null, + offset: Long? = null, + created_at: Date? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.get( + "/projects/${path_project_id}/continuous_integration/suites", + mapOf( + "fields" to fields, + "limit" to limit, + "offset" to offset, + "created_at" to created_at, + ), + ) + } + + /** + * ### Fetches a CI Suite Configuration. * * @param {String} project_id Project Id - * @param {CreateCIRunRequest} body + * @param {WriteProjectCISuite} body * @param {String} fields Requested fields * - * POST /projects/{project_id}/ci/run -> ByteArray + * POST /projects/{project_id}/continuous_integration/suites -> ByteArray */ - @Deprecated(message = "Deprecated method") - @JvmOverloads - fun create_ci_run( + @JvmOverloads fun create_continuous_integration_suite( project_id: String, - body: CreateCIRunRequest, + body: WriteProjectCISuite, fields: String? = null, ): SDKResponse { val path_project_id = encodeParam(project_id) return this.post( - "/projects/${path_project_id}/ci/run", + "/projects/${path_project_id}/continuous_integration/suites", + mapOf("fields" to fields), + body, + ) + } + + /** + * ### Fetches a CI Suite Configuration. + * + * @param {String} project_id Project Id + * @param {String} suite_id Suite Id + * @param {String} fields Requested fields + * + * GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> ByteArray + */ + @JvmOverloads fun get_continuous_integration_suite( + project_id: String, + suite_id: String, + fields: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_suite_id = encodeParam(suite_id) + return this.get( + "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields), + ) + } + + /** + * ### Updates a Continuous Integration Suite. + * + * @param {String} project_id Project Id + * @param {String} suite_id Suite Id + * @param {WriteProjectCISuite} body + * @param {String} fields Requested fields + * + * PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> ByteArray + */ + @JvmOverloads fun update_continuous_integration_suite( + project_id: String, + suite_id: String, + body: WriteProjectCISuite, + fields: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_suite_id = encodeParam(suite_id) + return this.patch( + "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", mapOf("fields" to fields), body, ) } + /** + * ### Deletes a Continuous Integration Suite. + * + * @param {String} project_id Project Id + * @param {String} suite_id Suite Id + * @param {String} fields Requested fields + * + * DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> ByteArray + */ + @JvmOverloads fun delete_continuous_integration_suite( + project_id: String, + suite_id: String, + fields: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_suite_id = encodeParam(suite_id) + return this.delete( + "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields), + ) + } + /** * ### Creates and queues a Continuous Integration Run. * @@ -7146,6 +7387,28 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Duplicates and queues a Continuous Integration Run. + * + * @param {String} project_id Project Id + * @param {String} run_id Run ID to duplicate and re-run + * @param {String} fields Requested fields + * + * POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> ByteArray + */ + @JvmOverloads fun duplicate_continuous_integration_run( + project_id: String, + run_id: String, + fields: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_run_id = encodeParam(run_id) + return this.post( + "/projects/${path_project_id}/continuous_integration/runs/${path_run_id}/duplicate", + mapOf("fields" to fields), + ) + } + /** * ### Gets a Continuous Integration run. * @@ -7168,6 +7431,23 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Cancels a Continuous Integration Run. + * + * @param {String} project_id Project Id + * @param {String} run_id Run Id + * + * DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> ByteArray + */ + fun cancel_continuous_integration_run( + project_id: String, + run_id: String, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_run_id = encodeParam(run_id) + return this.delete("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", mapOf()) + } + /** * ### Generate Lockfile for All LookML Dependencies * @@ -7446,6 +7726,36 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { return this.post("/projects/${path_project_id}/reset_to_remote", mapOf()) } + /** + * ### Pull from Production + * Pulls changes from the remote production branch into the current development workspace. + * + * @param {String} project_id Id of project + * + * POST /projects/{project_id}/pull_from_production -> ByteArray + */ + fun pull_project_from_production( + project_id: String, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.post("/projects/${path_project_id}/pull_from_production", mapOf()) + } + + /** + * ### Pull from Remote + * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + * + * @param {String} project_id Id of project + * + * POST /projects/{project_id}/pull_from_remote -> ByteArray + */ + fun pull_project_from_remote( + project_id: String, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.post("/projects/${path_project_id}/pull_from_remote", mapOf()) + } + /** * ### Get All Projects * @@ -7870,58 +8180,6 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } - /** - * ### Initiate Git Diagnosis Suite - * - * @param {String} project_id Looker Project ID - * @param {WriteGitDiagnosticReport} body - * - * POST /projects/{project_id}/git_diagnostic_report -> ByteArray - */ - fun create_git_diagnostic_report( - project_id: String, - body: WriteGitDiagnosticReport, - ): SDKResponse { - val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/git_diagnostic_report", mapOf(), body) - } - - /** - * ### Retrieve Live Git Diagnostic Suite Execution Status - * - * @param {String} project_id Looker Project ID - * @param {String} report_id Report ID - * - * GET /projects/{project_id}/git_diagnostic_report/{report_id} -> ByteArray - */ - fun get_git_diagnostic_report( - project_id: String, - report_id: String, - ): SDKResponse { - val path_project_id = encodeParam(project_id) - val path_report_id = encodeParam(report_id) - return this.get("/projects/${path_project_id}/git_diagnostic_report/${path_report_id}", mapOf()) - } - - /** - * ### Repair Git Configuration Issues - * - * @param {String} project_id Looker Project ID - * @param {String} report_id Report ID - * @param {WriteGitDiagnosticReport} body - * - * POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> ByteArray - */ - fun repair_git_diagnostic_report( - project_id: String, - report_id: String, - body: WriteGitDiagnosticReport, - ): SDKResponse { - val path_project_id = encodeParam(project_id) - val path_report_id = encodeParam(report_id) - return this.post("/projects/${path_project_id}/git_diagnostic_report/${path_report_id}/repair", mapOf(), body) - } - /** * ### Configure Repository Credential for a remote dependency * @@ -7996,6 +8254,8 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. * After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {WriteCreateQueryTask} body * @param {Long} limit Row limit (may override the limit in the saved query). * @param {Boolean} apply_formatting Apply model-specified formatting to each result. @@ -8247,6 +8507,8 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {String} query_id Id of query * @param {String} result_format Format of result * @param {Long} limit Row limit (may override the limit in the saved query). @@ -8356,6 +8618,8 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {String} result_format Format of result * @param {WriteQuery} body * @param {Long} limit Row limit (may override the limit in the saved query). @@ -8467,6 +8731,8 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * @param {String} model_name Model name * @param {String} view_name View name * @param {String} result_format Format of result @@ -9789,6 +10055,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * @param {String} recipient Match recipient address. * @param {String} destination_type Match scheduled plan's destination type. * @param {String} delivery_format Match scheduled plan's delivery format. + * @param {Boolean} all_states Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag). + * @param {Boolean} run_once Match Scheduled plan's run_once. + * @param {Boolean} enabled Match Scheduled plan's enabled status. + * @param {String} last_run_status Match scheduled plan's last run status. * @param {Boolean} filter_or Combine given search criteria in a boolean OR expression * * GET /scheduled_plans/search -> ByteArray @@ -9809,6 +10079,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { recipient: String? = null, destination_type: String? = null, delivery_format: String? = null, + all_states: Boolean? = null, + run_once: Boolean? = null, + enabled: Boolean? = null, + last_run_status: String? = null, filter_or: Boolean? = null, ): SDKResponse { return this.get( @@ -9829,6 +10103,10 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { "recipient" to recipient, "destination_type" to destination_type, "delivery_format" to delivery_format, + "all_states" to all_states, + "run_once" to run_once, + "enabled" to enabled, + "last_run_status" to last_run_status, "filter_or" to filter_or, ), ) @@ -10637,17 +10915,327 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { } /** - * ### Get information about the current user; i.e. the user account currently calling the API. + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * + * @param {String} user_id Id of user * @param {String} fields Requested fields. * - * GET /user -> ByteArray + * GET /users/{user_id}/credentials_email -> ByteArray */ - @JvmOverloads fun me( + @JvmOverloads fun user_credentials_email( + user_id: String, fields: String? = null, ): SDKResponse { + val path_user_id = encodeParam(user_id) return this.get( - "/user", + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + ) + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {WriteCredentialsEmail} body + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/credentials_email -> ByteArray + */ + @JvmOverloads fun create_user_credentials_email( + user_id: String, + body: WriteCredentialsEmail, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + body, + ) + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {WriteCredentialsEmail} body + * @param {String} fields Requested fields. + * + * PATCH /users/{user_id}/credentials_email -> ByteArray + */ + @JvmOverloads fun update_user_credentials_email( + user_id: String, + body: WriteCredentialsEmail, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.patch( + "/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), + body, + ) + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_email -> ByteArray + */ + fun delete_user_credentials_email( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_email", mapOf()) + } + + /** + * ### Create a password reset token. + * This will create a cryptographically secure random password reset token for the user. + * If the user already has a password reset token then this invalidates the old token and creates a new one. + * The token is expressed as the 'password_reset_url' of the user's email/password credential object. + * This takes an optional 'expires' param to indicate if the new token should be an expiring token. + * Tokens that expire are typically used for self-service password resets for existing users. + * Invitation emails for new users typically are not set to expire. + * The expire period is always 60 minutes when expires is enabled. + * This method can be called with an empty body. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {Boolean} expires Expiring token. + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/credentials_email/password_reset -> ByteArray + */ + @JvmOverloads fun create_user_credentials_email_password_reset( + user_id: String, + expires: Boolean? = null, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post( + "/users/${path_user_id}/credentials_email/password_reset", + mapOf( + "expires" to expires, + "fields" to fields, + ), + ) + } + + /** + * ### Send a password reset token. + * This will send a password reset email to the user. If a password reset token does not already exist + * for this user, it will create one and then send it. + * If the user has not yet set up their account, it will send a setup email to the user. + * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + * Password reset URLs will expire in 60 minutes. + * This method can be called with an empty body. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/credentials_email/send_password_reset -> ByteArray + */ + @JvmOverloads fun send_user_credentials_email_password_reset( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post( + "/users/${path_user_id}/credentials_email/send_password_reset", + mapOf("fields" to fields), + ) + } + + /** + * ### Google authentication login information for the specified user. + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * GET /users/{user_id}/credentials_google -> ByteArray + */ + @JvmOverloads fun user_credentials_google( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_google", + mapOf("fields" to fields), + ) + } + + /** + * ### Delete Google authentication login information for the specified user. + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_google -> ByteArray + */ + fun delete_user_credentials_google( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_google", mapOf()) + } + + /** + * ### Looker Openid login information for the specified user. Used by Looker Analysts. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * GET /users/{user_id}/credentials_looker_openid -> ByteArray + */ + @JvmOverloads fun user_credentials_looker_openid( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_looker_openid", + mapOf("fields" to fields), + ) + } + + /** + * ### Looker Openid login information for the specified user. Used by Looker Analysts. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_looker_openid -> ByteArray + */ + fun delete_user_credentials_looker_openid( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) + } + + /** + * ### Saml authentication login information for the specified user. + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * GET /users/{user_id}/credentials_saml -> ByteArray + */ + @JvmOverloads fun user_credentials_saml( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_saml", + mapOf("fields" to fields), + ) + } + + /** + * ### Delete Saml authentication login information for the specified user. + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_saml -> ByteArray + */ + fun delete_user_credentials_saml( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) + } + + /** + * ### Get two-factor login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {String} fields Requested fields. + * + * GET /users/{user_id}/credentials_totp -> ByteArray + */ + @JvmOverloads fun user_credentials_totp( + user_id: String, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.get( + "/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), + ) + } + + /** + * ### Create two-factor login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * @param {CredentialsTotp} body WARNING: no writeable properties found for POST, PUT, or PATCH + * @param {String} fields Requested fields. + * + * POST /users/{user_id}/credentials_totp -> ByteArray + */ + @JvmOverloads fun create_user_credentials_totp( + user_id: String, + body: CredentialsTotp? = null, + fields: String? = null, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.post( + "/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), + body, + ) + } + + /** + * ### Delete two-factor login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * @param {String} user_id Id of user + * + * DELETE /users/{user_id}/credentials_totp -> ByteArray + */ + fun delete_user_credentials_totp( + user_id: String, + ): SDKResponse { + val path_user_id = encodeParam(user_id) + return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) + } + + /** + * ### Get information about the current user; i.e. the user account currently calling the API. + * + * @param {String} fields Requested fields. + * + * GET /user -> ByteArray + */ + @JvmOverloads fun me( + fields: String? = null, + ): SDKResponse { + return this.get( + "/user", mapOf("fields" to fields), ) } @@ -10870,422 +11458,210 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { /** * ### Get information about the user with a specific id. * - * If the caller is an admin or the caller is the user being specified, then full user information will - * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains - * The user name and avatar url, but no sensitive information. - * - * @param {String} user_id Id of user - * @param {String} fields Requested fields. - * - * GET /users/{user_id} -> ByteArray - */ - @JvmOverloads fun user( - user_id: String, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}", - mapOf("fields" to fields), - ) - } - - /** - * ### Update information about the user with a specific id. - * - * @param {String} user_id Id of user - * @param {WriteUser} body - * @param {String} fields Requested fields. - * - * PATCH /users/{user_id} -> ByteArray - */ - @JvmOverloads fun update_user( - user_id: String, - body: WriteUser, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.patch( - "/users/${path_user_id}", - mapOf("fields" to fields), - body, - ) - } - - /** - * ### Delete the user with a specific id. - * - * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the users or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. - * - * The user cannot delete themselves. - * The last administrator user cannot be deleted. - * - * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - * Please use the dedicated `delete_service_account` endpoint. - * - * @param {String} user_id Id of user - * - * DELETE /users/{user_id} -> ByteArray - */ - fun delete_user( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}", mapOf()) - } - - /** - * ### Get information about the user with a credential of given type with specific id. - * - * This is used to do things like find users by their embed external_user_id. Or, find the user with - * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - * for the user and is specific to each type of credential. - * - * An example using the Ruby sdk might look like: - * - * `sdk.user_for_credential('embed', 'customer-4959425')` - * - * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - * which field in the given credential type is actually searched when finding a user with the supplied - * 'credential_id'. - * - * | Credential Types | Id Field Matched | - * | ---------------- | ---------------- | - * | email | email | - * | google | google_user_id | - * | saml | saml_user_id | - * | oidc | oidc_user_id | - * | ldap | ldap_id | - * | api | token | - * | api3 | client_id | - * | embed | external_user_id | - * | looker_openid | email | - * - * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} credential_type Type name of credential - * @param {String} credential_id Id of credential - * @param {String} fields Requested fields. - * - * GET /users/credential/{credential_type}/{credential_id} -> ByteArray - */ - @JvmOverloads fun user_for_credential( - credential_type: String, - credential_id: String, - fields: String? = null, - ): SDKResponse { - val path_credential_type = encodeParam(credential_type) - val path_credential_id = encodeParam(credential_id) - return this.get( - "/users/credential/${path_credential_type}/${path_credential_id}", - mapOf("fields" to fields), - ) - } - - /** - * ### Update information for a specific service account. This action is restricted to Looker admins. - * - * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. - * - * @param {String} user_id Id of service account - * @param {WriteServiceAccount} body - * @param {String} fields Requested fields. - * - * PATCH /users/service_accounts/{user_id} -> ByteArray - */ - @JvmOverloads fun update_service_account( - user_id: String, - body: WriteServiceAccount, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.patch( - "/users/service_accounts/${path_user_id}", - mapOf("fields" to fields), - body, - ) - } - - /** - * ### Delete the service account with a specific id. - * - * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the service account or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. - * - * The service account cannot delete itself. - * - * @param {String} user_id Id of service account user - * - * DELETE /users/service_accounts/{user_id} -> ByteArray - */ - fun delete_service_account( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/service_accounts/${path_user_id}", mapOf()) - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {String} fields Requested fields. - * - * GET /users/{user_id}/credentials_email -> ByteArray - */ - @JvmOverloads fun user_credentials_email( - user_id: String, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - ) - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {WriteCredentialsEmail} body - * @param {String} fields Requested fields. - * - * POST /users/{user_id}/credentials_email -> ByteArray - */ - @JvmOverloads fun create_user_credentials_email( - user_id: String, - body: WriteCredentialsEmail, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - body, - ) - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {WriteCredentialsEmail} body - * @param {String} fields Requested fields. - * - * PATCH /users/{user_id}/credentials_email -> ByteArray - */ - @JvmOverloads fun update_user_credentials_email( - user_id: String, - body: WriteCredentialsEmail, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.patch( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - body, - ) - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * - * DELETE /users/{user_id}/credentials_email -> ByteArray - */ - fun delete_user_credentials_email( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_email", mapOf()) - } - - /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * If the caller is an admin or the caller is the user being specified, then full user information will + * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains + * The user name and avatar url, but no sensitive information. * * @param {String} user_id Id of user * @param {String} fields Requested fields. * - * GET /users/{user_id}/credentials_totp -> ByteArray + * GET /users/{user_id} -> ByteArray */ - @JvmOverloads fun user_credentials_totp( + @JvmOverloads fun user( user_id: String, fields: String? = null, ): SDKResponse { val path_user_id = encodeParam(user_id) return this.get( - "/users/${path_user_id}/credentials_totp", + "/users/${path_user_id}", mapOf("fields" to fields), ) } /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Update information about the user with a specific id. * * @param {String} user_id Id of user - * @param {CredentialsTotp} body WARNING: no writeable properties found for POST, PUT, or PATCH + * @param {WriteUser} body * @param {String} fields Requested fields. * - * POST /users/{user_id}/credentials_totp -> ByteArray + * PATCH /users/{user_id} -> ByteArray */ - @JvmOverloads fun create_user_credentials_totp( + @JvmOverloads fun update_user( user_id: String, - body: CredentialsTotp? = null, + body: WriteUser, fields: String? = null, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_totp", + return this.patch( + "/users/${path_user_id}", mapOf("fields" to fields), body, ) } /** - * ### Two-factor login information for the specified user. + * ### Delete the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. + * + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the users or that use their content will be deleted. + * * Alerts owned by the users will be deleted. + * + * The user cannot delete themselves. + * The last administrator user cannot be deleted. + * + * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + * Please use the dedicated `delete_service_account` endpoint. * * @param {String} user_id Id of user * - * DELETE /users/{user_id}/credentials_totp -> ByteArray + * DELETE /users/{user_id} -> ByteArray */ - fun delete_user_credentials_totp( + fun delete_user( user_id: String, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) + return this.delete("/users/${path_user_id}", mapOf()) } /** - * ### LDAP login information for the specified user. + * ### Get information about the user with a credential of given type with specific id. + * + * This is used to do things like find users by their embed external_user_id. Or, find the user with + * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + * for the user and is specific to each type of credential. + * + * An example using the Ruby sdk might look like: + * + * `sdk.user_for_credential('embed', 'customer-4959425')` + * + * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + * which field in the given credential type is actually searched when finding a user with the supplied + * 'credential_id'. + * + * | Credential Types | Id Field Matched | + * | ---------------- | ---------------- | + * | email | email | + * | google | google_user_id | + * | saml | saml_user_id | + * | oidc | oidc_user_id | + * | ldap | ldap_id | + * | api | token | + * | api3 | client_id | + * | embed | external_user_id | + * | looker_openid | email | + * + * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * @param {String} user_id Id of user + * @param {String} credential_type Type name of credential + * @param {String} credential_id Id of credential * @param {String} fields Requested fields. * - * GET /users/{user_id}/credentials_ldap -> ByteArray + * GET /users/credential/{credential_type}/{credential_id} -> ByteArray */ - @JvmOverloads fun user_credentials_ldap( - user_id: String, + @JvmOverloads fun user_for_credential( + credential_type: String, + credential_id: String, fields: String? = null, ): SDKResponse { - val path_user_id = encodeParam(user_id) + val path_credential_type = encodeParam(credential_type) + val path_credential_id = encodeParam(credential_id) return this.get( - "/users/${path_user_id}/credentials_ldap", + "/users/credential/${path_credential_type}/${path_credential_id}", mapOf("fields" to fields), ) } /** - * ### LDAP login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user + * ### Update information for a specific service account. This action is restricted to Looker admins. * - * DELETE /users/{user_id}/credentials_ldap -> ByteArray - */ - fun delete_user_credentials_ldap( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) - } - - /** - * ### Google authentication login information for the specified user. + * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. * - * @param {String} user_id Id of user + * @param {String} user_id Id of service account + * @param {WriteServiceAccount} body * @param {String} fields Requested fields. * - * GET /users/{user_id}/credentials_google -> ByteArray + * PATCH /users/service_accounts/{user_id} -> ByteArray */ - @JvmOverloads fun user_credentials_google( + @JvmOverloads fun update_service_account( user_id: String, + body: WriteServiceAccount, fields: String? = null, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_google", + return this.patch( + "/users/service_accounts/${path_user_id}", mapOf("fields" to fields), + body, ) } /** - * ### Google authentication login information for the specified user. + * ### Delete the service account with a specific id. * - * @param {String} user_id Id of user + * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. * - * DELETE /users/{user_id}/credentials_google -> ByteArray + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the service account or that use their content will be deleted. + * * Alerts owned by the service account will be deleted. + * + * The service account cannot delete itself. + * + * @param {String} user_id Id of service account user + * + * DELETE /users/service_accounts/{user_id} -> ByteArray */ - fun delete_user_credentials_google( + fun delete_service_account( user_id: String, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_google", mapOf()) + return this.delete("/users/service_accounts/${path_user_id}", mapOf()) } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * * @param {String} user_id Id of user * @param {String} fields Requested fields. * - * GET /users/{user_id}/credentials_saml -> ByteArray + * GET /users/{user_id}/credentials_ldap -> ByteArray */ - @JvmOverloads fun user_credentials_saml( + @JvmOverloads fun user_credentials_ldap( user_id: String, fields: String? = null, ): SDKResponse { val path_user_id = encodeParam(user_id) return this.get( - "/users/${path_user_id}/credentials_saml", + "/users/${path_user_id}/credentials_ldap", mapOf("fields" to fields), ) } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * * @param {String} user_id Id of user * - * DELETE /users/{user_id}/credentials_saml -> ByteArray + * DELETE /users/{user_id}/credentials_ldap -> ByteArray */ - fun delete_user_credentials_saml( + fun delete_user_credentials_ldap( user_id: String, ): SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) + return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) } /** @@ -11487,43 +11863,6 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {String} fields Requested fields. - * - * GET /users/{user_id}/credentials_looker_openid -> ByteArray - */ - @JvmOverloads fun user_credentials_looker_openid( - user_id: String, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_looker_openid", - mapOf("fields" to fields), - ) - } - - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * - * DELETE /users/{user_id}/credentials_looker_openid -> ByteArray - */ - fun delete_user_credentials_looker_openid( - user_id: String, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) - } - /** * ### Web login session for the specified user. * @@ -11582,40 +11921,6 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } - /** - * ### Create a password reset token. - * This will create a cryptographically secure random password reset token for the user. - * If the user already has a password reset token then this invalidates the old token and creates a new one. - * The token is expressed as the 'password_reset_url' of the user's email/password credential object. - * This takes an optional 'expires' param to indicate if the new token should be an expiring token. - * Tokens that expire are typically used for self-service password resets for existing users. - * Invitation emails for new users typically are not set to expire. - * The expire period is always 60 minutes when expires is enabled. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {Boolean} expires Expiring token. - * @param {String} fields Requested fields. - * - * POST /users/{user_id}/credentials_email/password_reset -> ByteArray - */ - @JvmOverloads fun create_user_credentials_email_password_reset( - user_id: String, - expires: Boolean? = null, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email/password_reset", - mapOf( - "expires" to expires, - "fields" to fields, - ), - ) - } - /** * ### Get information about roles of a given user * @@ -11750,33 +12055,6 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { return this.delete("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf()) } - /** - * ### Send a password reset token. - * This will send a password reset email to the user. If a password reset token does not already exist - * for this user, it will create one and then send it. - * If the user has not yet set up their account, it will send a setup email to the user. - * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - * Password reset URLs will expire in 60 minutes. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * @param {String} user_id Id of user - * @param {String} fields Requested fields. - * - * POST /users/{user_id}/credentials_email/send_password_reset -> ByteArray - */ - @JvmOverloads fun send_user_credentials_email_password_reset( - user_id: String, - fields: String? = null, - ): SDKResponse { - val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email/send_password_reset", - mapOf("fields" to fields), - ) - } - /** * ### Change a disabled user's email addresses * diff --git a/kotlin/src/main/com/looker/sdk/Constants.kt b/kotlin/src/main/com/looker/sdk/Constants.kt index c4c714d3a..4b62f76de 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.12" +const val LOOKER_VERSION = "26.18" 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 91ec3b3bb..d6f2db58d 100644 --- a/packages/sdk/src/4.0/funcs.ts +++ b/packages/sdk/src/4.0/funcs.ts @@ -25,7 +25,7 @@ */ /** - * 518 API methods + * 529 API methods */ import type { @@ -47,6 +47,7 @@ import { sdkVersion } from '../constants'; import type { IAccessToken, IAgent, + IAgentLookml, IAlert, IAlertNotifications, IAlertPatch, @@ -77,8 +78,6 @@ import type { IConversationalAnalyticsChatRequest, IConversationMessage, ICostEstimate, - ICreateCIRunRequest, - ICreateCIRunResponse, ICreateContinuousIntegrationRunRequest, ICreateCostEstimate, ICreateCredentialsApi3, @@ -132,7 +131,6 @@ import type { IGitBranch, IGitConnectionTest, IGitConnectionTestResult, - IGitDiagnosticReport, IGoldenQuery, IGroup, IGroupHierarchy, @@ -173,8 +171,8 @@ import type { IPermission, IPermissionSet, IProject, + IProjectCISuite, IProjectFile, - IProjectRun, IProjectValidation, IProjectValidationCache, IProjectWorkspace, @@ -213,6 +211,7 @@ import type { IRequestDeployRefToProduction, IRequestFolderChildren, IRequestFolderChildrenSearch, + IRequestGetContinuousIntegrationSuites, IRequestGraphDerivedTablesForModel, IRequestGraphDerivedTablesForView, IRequestLogin, @@ -234,6 +233,7 @@ import type { IRequestSearchContent, IRequestSearchContentFavorites, IRequestSearchContentViews, + IRequestSearchContinuousIntegrationRuns, IRequestSearchConversations, IRequestSearchCredentialsEmail, IRequestSearchDashboardElements, @@ -293,6 +293,7 @@ import type { IUserAttribute, IUserAttributeGroupValue, IUserAttributeWithValue, + IUserDbConnection, IUserEmailOnly, IUserLoginLockout, IUserPublic, @@ -328,7 +329,6 @@ import type { IWriteEmbedSecret, IWriteExternalOauthApplication, IWriteGitBranch, - IWriteGitDiagnosticReport, IWriteGoldenQuery, IWriteGroup, IWriteIntegration, @@ -347,6 +347,7 @@ import type { IWritePasswordConfig, IWritePermissionSet, IWriteProject, + IWriteProjectCISuite, IWriteQuery, IWriteRepositoryCredential, IWriteRole, @@ -362,6 +363,7 @@ import type { IWriteUser, IWriteUserAttribute, IWriteUserAttributeWithValue, + IWriteUserDbConnection, IWriteWhitelabelConfiguration, } from './models'; @@ -3772,6 +3774,7 @@ export const mobile_settings = async ( * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -3825,6 +3828,7 @@ export const get_setting = async ( * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -4709,6 +4713,85 @@ export const ssh_public_key = async ( return sdk.get('/ssh_public_key', null, null, options); }; +/** + * ### Get All User DB Connections + * + * Returns a list of user DB connections. + * + * GET /user_db_connections -> IUserDbConnection[] + * + * @param sdk IAPIMethods implementation + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ +export const all_user_db_connections = async ( + sdk: IAPIMethods, + fields?: string, + options?: Partial +): Promise> => { + return sdk.get( + '/user_db_connections', + { fields }, + null, + options + ); +}; + +/** + * ### Update User DB Connection + * + * Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + * + * PATCH /user_db_connections/{user_db_connection_id} -> IUserDbConnection + * + * @param sdk IAPIMethods implementation + * @param user_db_connection_id Id of user DB connection + * @param body Partial + * @param options one-time API call overrides + * + */ +export const update_user_db_connection = async ( + sdk: IAPIMethods, + user_db_connection_id: string, + body: Partial, + options?: Partial +): Promise> => { + user_db_connection_id = encodeParam(user_db_connection_id); + return sdk.patch( + `/user_db_connections/${user_db_connection_id}`, + null, + body, + options + ); +}; + +/** + * ### Delete User DB Connection + * + * Deletes an existing user DB connection. + * + * DELETE /user_db_connections/{user_db_connection_id} -> void + * + * @param sdk IAPIMethods implementation + * @param user_db_connection_id Id of user DB connection + * @param options one-time API call overrides + * + */ +export const delete_user_db_connection = async ( + sdk: IAPIMethods, + user_db_connection_id: string, + options?: Partial +): Promise> => { + user_db_connection_id = encodeParam(user_db_connection_id); + return sdk.delete( + `/user_db_connections/${user_db_connection_id}`, + null, + null, + options + ); +}; + //#endregion Connection: Manage Database Connections //#region Content: Manage Content @@ -5410,6 +5493,32 @@ export const update_agent = async ( ); }; +/** + * ### Get LookML of a UDD Agent + * + * Returns the LookML representation of a user-defined (UDD) agent. + * + * GET /agents/lookml/{agent_id} -> IAgentLookml + * + * @param sdk IAPIMethods implementation + * @param agent_id Id of agent + * @param options one-time API call overrides + * + */ +export const agent_lookml = async ( + sdk: IAPIMethods, + agent_id: string, + options?: Partial +): Promise> => { + agent_id = encodeParam(agent_id); + return sdk.get( + `/agents/lookml/${agent_id}`, + null, + null, + options + ); +}; + /** * ### Get All Conversation Messages * @@ -5566,6 +5675,41 @@ export const update_conversation_message = async ( ); }; +/** + * ### Get Agent Responses for User Message + * + * Get all agent response messages generated for a specific user prompt. + * + * An agent response often consists of multiple message blocks (such as text explanations, + * visualizations, and follow-up suggestions). This endpoint returns all response messages + * following the specified user message up to the next user prompt. + * + * GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> IConversationMessage[] + * + * @param sdk IAPIMethods implementation + * @param conversation_id Conversation ID + * @param user_message_id User Conversation Message ID + * @param fields Requested fields + * @param options one-time API call overrides + * + */ +export const get_conversation_message_responses = async ( + sdk: IAPIMethods, + conversation_id: string, + user_message_id: string, + fields?: string, + options?: Partial +): Promise> => { + conversation_id = encodeParam(conversation_id); + user_message_id = encodeParam(user_message_id); + return sdk.get( + `/conversations/${conversation_id}/messages/${user_message_id}/responses`, + { fields }, + null, + options + ); +}; + /** * ### Search Conversations * @@ -6136,6 +6280,38 @@ export const delete_dashboard = async ( ); }; +/** + * ### Get Dashboard Image + * + * Returns the image content for a dashboard element. + * + * GET /dashboards/{dashboard_id}/images/{image_slug} -> string + * + * @remarks + * **NOTE**: Binary content may be returned by this function. + * + * @param sdk IAPIMethods implementation + * @param dashboard_id Id of dashboard + * @param image_slug Slug of image + * @param options one-time API call overrides + * + */ +export const get_dashboard_image = async ( + sdk: IAPIMethods, + dashboard_id: string, + image_slug: string, + options?: Partial +): Promise> => { + dashboard_id = encodeParam(dashboard_id); + image_slug = encodeParam(image_slug); + return sdk.get( + `/dashboards/${dashboard_id}/images/${image_slug}`, + null, + null, + options + ); +}; + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -6190,6 +6366,8 @@ export const dashboard_aggregate_table_lookml = async ( * Boolean search params accept only "true" and "false" as values. * * + * **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + * * The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. * * Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -6261,6 +6439,7 @@ export const dashboard_lookml = async ( * @param sdk IAPIMethods implementation * @param dashboard_id Dashboard id to move. * @param folder_id Folder id to move to. + * @param project_name LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. * @param options one-time API call overrides * */ @@ -6268,12 +6447,13 @@ export const move_dashboard = async ( sdk: IAPIMethods, dashboard_id: string, folder_id: string, + project_name?: string, options?: Partial ): Promise> => { dashboard_id = encodeParam(dashboard_id); return sdk.patch( `/dashboards/${dashboard_id}/move`, - { folder_id }, + { folder_id, project_name }, null, options ); @@ -8725,6 +8905,8 @@ export const delete_look = async ( * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /looks/{look_id}/run/{result_format} -> string * * @remarks @@ -9299,92 +9481,91 @@ export const connection_cost_estimate = async ( //#region Project: Manage Projects /** - * ### Fetches a CI Run. - * - * This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + * ### Search Continuous Integration Runs for a project. * - * GET /projects/{project_id}/ci/runs/{run_id} -> IProjectRun + * Returns an array of Continuous Integration Run objects that match the specified search criteria. * - * @deprecated + * GET /projects/{project_id}/continuous_integration/runs/search -> ICIRun[] * * @param sdk IAPIMethods implementation - * @param project_id Project Id - * @param run_id Run Id - * @param fields Requested fields + * @param request composed interface "IRequestSearchContinuousIntegrationRuns" for complex method parameters * @param options one-time API call overrides * */ -export const get_ci_run = async ( +export const search_continuous_integration_runs = async ( sdk: IAPIMethods, - project_id: string, - run_id: string, - fields?: string, + request: IRequestSearchContinuousIntegrationRuns, options?: Partial -): Promise> => { - project_id = encodeParam(project_id); - run_id = encodeParam(run_id); - return sdk.get( - `/projects/${project_id}/ci/runs/${run_id}`, - { fields }, +): Promise> => { + request.project_id = encodeParam(request.project_id); + return sdk.get( + `/projects/${request.project_id}/continuous_integration/runs/search`, + { + fields: request.fields, + suite_id: request.suite_id, + status: request.status, + user_id: request.user_id, + trigger_type: request.trigger_type, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + }, null, options ); }; /** - * ### Creates a CI Run. + * ### Fetches Multiple CI Suite Configurations for Project. * - * This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. - * - * POST /projects/{project_id}/ci/run -> ICreateCIRunResponse - * - * @deprecated + * GET /projects/{project_id}/continuous_integration/suites -> IProjectCISuite[] * * @param sdk IAPIMethods implementation - * @param project_id Project Id - * @param body Partial - * @param fields Requested fields + * @param request composed interface "IRequestGetContinuousIntegrationSuites" for complex method parameters * @param options one-time API call overrides * */ -export const create_ci_run = async ( +export const get_continuous_integration_suites = async ( sdk: IAPIMethods, - project_id: string, - body: Partial, - fields?: string, + request: IRequestGetContinuousIntegrationSuites, options?: Partial -): Promise> => { - project_id = encodeParam(project_id); - return sdk.post( - `/projects/${project_id}/ci/run`, - { fields }, - body, +): Promise> => { + request.project_id = encodeParam(request.project_id); + return sdk.get( + `/projects/${request.project_id}/continuous_integration/suites`, + { + fields: request.fields, + limit: request.limit, + offset: request.offset, + created_at: request.created_at, + }, + null, options ); }; /** - * ### Creates and queues a Continuous Integration Run. + * ### Fetches a CI Suite Configuration. * - * POST /projects/{project_id}/continuous_integration/runs -> ICIRun + * POST /projects/{project_id}/continuous_integration/suites -> IProjectCISuite * * @param sdk IAPIMethods implementation * @param project_id Project Id - * @param body Partial + * @param body Partial * @param fields Requested fields * @param options one-time API call overrides * */ -export const create_continuous_integration_run = async ( +export const create_continuous_integration_suite = async ( sdk: IAPIMethods, project_id: string, - body: Partial, + body: Partial, fields?: string, options?: Partial -): Promise> => { +): Promise> => { project_id = encodeParam(project_id); - return sdk.post( - `/projects/${project_id}/continuous_integration/runs`, + return sdk.post( + `/projects/${project_id}/continuous_integration/suites`, { fields }, body, options @@ -9392,28 +9573,28 @@ export const create_continuous_integration_run = async ( }; /** - * ### Gets a Continuous Integration run. + * ### Fetches a CI Suite Configuration. * - * GET /projects/{project_id}/continuous_integration/runs/{run_id} -> ICIRun + * GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> IProjectCISuite * * @param sdk IAPIMethods implementation * @param project_id Project Id - * @param run_id Run Id + * @param suite_id Suite Id * @param fields Requested fields * @param options one-time API call overrides * */ -export const get_continuous_integration_run = async ( +export const get_continuous_integration_suite = async ( sdk: IAPIMethods, project_id: string, - run_id: string, + suite_id: string, fields?: string, options?: Partial -): Promise> => { +): Promise> => { project_id = encodeParam(project_id); - run_id = encodeParam(run_id); - return sdk.get( - `/projects/${project_id}/continuous_integration/runs/${run_id}`, + suite_id = encodeParam(suite_id); + return sdk.get( + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, { fields }, null, options @@ -9421,129 +9602,302 @@ export const get_continuous_integration_run = async ( }; /** - * ### Generate Lockfile for All LookML Dependencies + * ### Updates a Continuous Integration Suite. * - * Git must have been configured, must be in dev mode and deploy permission required - * - * Install_all is a two step process - * 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref. - * 2. The project will then write out a lockfile including each remote_dependency with its resolved ref. - * - * POST /projects/{project_id}/manifest/lock_all -> string + * PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> IProjectCISuite * * @param sdk IAPIMethods implementation - * @param project_id Id of project + * @param project_id Project Id + * @param suite_id Suite Id + * @param body Partial * @param fields Requested fields * @param options one-time API call overrides * */ -export const lock_all = async ( +export const update_continuous_integration_suite = async ( sdk: IAPIMethods, project_id: string, + suite_id: string, + body: Partial, fields?: string, options?: Partial -): Promise> => { +): Promise> => { project_id = encodeParam(project_id); - return sdk.post( - `/projects/${project_id}/manifest/lock_all`, + suite_id = encodeParam(suite_id); + return sdk.patch( + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, { fields }, - null, + body, options ); }; /** - * ### Get All Git Branches + * ### Deletes a Continuous Integration Suite. * - * Returns a list of git branches in the project repository - * - * GET /projects/{project_id}/git_branches -> IGitBranch[] + * DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> string * * @param sdk IAPIMethods implementation * @param project_id Project Id + * @param suite_id Suite Id + * @param fields Requested fields * @param options one-time API call overrides * */ -export const all_git_branches = async ( +export const delete_continuous_integration_suite = async ( sdk: IAPIMethods, project_id: string, + suite_id: string, + fields?: string, options?: Partial -): Promise> => { +): Promise> => { project_id = encodeParam(project_id); - return sdk.get( - `/projects/${project_id}/git_branches`, - null, + suite_id = encodeParam(suite_id); + return sdk.delete( + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, + { fields }, null, options ); }; /** - * ### Get the Current Git Branch - * - * Returns the git branch currently checked out in the given project repository + * ### Creates and queues a Continuous Integration Run. * - * GET /projects/{project_id}/git_branch -> IGitBranch + * POST /projects/{project_id}/continuous_integration/runs -> ICIRun * * @param sdk IAPIMethods implementation * @param project_id Project Id + * @param body Partial + * @param fields Requested fields * @param options one-time API call overrides * */ -export const git_branch = async ( +export const create_continuous_integration_run = async ( sdk: IAPIMethods, project_id: string, + body: Partial, + fields?: string, options?: Partial -): Promise> => { +): Promise> => { project_id = encodeParam(project_id); - return sdk.get( - `/projects/${project_id}/git_branch`, - null, - null, + return sdk.post( + `/projects/${project_id}/continuous_integration/runs`, + { fields }, + body, options ); }; /** - * ### Checkout and/or reset --hard an existing Git Branch - * - * Only allowed in development mode - * - Call `update_session` to select the 'dev' workspace. - * - * Checkout an existing branch if name field is different from the name of the currently checked out branch. - * - * Optionally specify a branch name, tag name or commit SHA to which the branch should be reset. - * **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost. + * ### Duplicates and queues a Continuous Integration Run. * - * PUT /projects/{project_id}/git_branch -> IGitBranch + * POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> ICIRun * * @param sdk IAPIMethods implementation * @param project_id Project Id - * @param body Partial + * @param run_id Run ID to duplicate and re-run + * @param fields Requested fields * @param options one-time API call overrides * */ -export const update_git_branch = async ( +export const duplicate_continuous_integration_run = async ( sdk: IAPIMethods, project_id: string, - body: Partial, + run_id: string, + fields?: string, options?: Partial -): Promise> => { +): Promise> => { project_id = encodeParam(project_id); - return sdk.put( - `/projects/${project_id}/git_branch`, + run_id = encodeParam(run_id); + return sdk.post( + `/projects/${project_id}/continuous_integration/runs/${run_id}/duplicate`, + { fields }, null, - body, options ); }; /** - * ### Create and Checkout a Git Branch + * ### Gets a Continuous Integration run. * - * Creates and checks out a new branch in the given project repository - * Only allowed in development mode - * - Call `update_session` to select the 'dev' workspace. + * GET /projects/{project_id}/continuous_integration/runs/{run_id} -> ICIRun + * + * @param sdk IAPIMethods implementation + * @param project_id Project Id + * @param run_id Run Id + * @param fields Requested fields + * @param options one-time API call overrides + * + */ +export const get_continuous_integration_run = async ( + sdk: IAPIMethods, + project_id: string, + run_id: string, + fields?: string, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + run_id = encodeParam(run_id); + return sdk.get( + `/projects/${project_id}/continuous_integration/runs/${run_id}`, + { fields }, + null, + options + ); +}; + +/** + * ### Cancels a Continuous Integration Run. + * + * DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> string + * + * @param sdk IAPIMethods implementation + * @param project_id Project Id + * @param run_id Run Id + * @param options one-time API call overrides + * + */ +export const cancel_continuous_integration_run = async ( + sdk: IAPIMethods, + project_id: string, + run_id: string, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + run_id = encodeParam(run_id); + return sdk.delete( + `/projects/${project_id}/continuous_integration/runs/${run_id}`, + null, + null, + options + ); +}; + +/** + * ### Generate Lockfile for All LookML Dependencies + * + * Git must have been configured, must be in dev mode and deploy permission required + * + * Install_all is a two step process + * 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref. + * 2. The project will then write out a lockfile including each remote_dependency with its resolved ref. + * + * POST /projects/{project_id}/manifest/lock_all -> string + * + * @param sdk IAPIMethods implementation + * @param project_id Id of project + * @param fields Requested fields + * @param options one-time API call overrides + * + */ +export const lock_all = async ( + sdk: IAPIMethods, + project_id: string, + fields?: string, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + return sdk.post( + `/projects/${project_id}/manifest/lock_all`, + { fields }, + null, + options + ); +}; + +/** + * ### Get All Git Branches + * + * Returns a list of git branches in the project repository + * + * GET /projects/{project_id}/git_branches -> IGitBranch[] + * + * @param sdk IAPIMethods implementation + * @param project_id Project Id + * @param options one-time API call overrides + * + */ +export const all_git_branches = async ( + sdk: IAPIMethods, + project_id: string, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + return sdk.get( + `/projects/${project_id}/git_branches`, + null, + null, + options + ); +}; + +/** + * ### Get the Current Git Branch + * + * Returns the git branch currently checked out in the given project repository + * + * GET /projects/{project_id}/git_branch -> IGitBranch + * + * @param sdk IAPIMethods implementation + * @param project_id Project Id + * @param options one-time API call overrides + * + */ +export const git_branch = async ( + sdk: IAPIMethods, + project_id: string, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + return sdk.get( + `/projects/${project_id}/git_branch`, + null, + null, + options + ); +}; + +/** + * ### Checkout and/or reset --hard an existing Git Branch + * + * Only allowed in development mode + * - Call `update_session` to select the 'dev' workspace. + * + * Checkout an existing branch if name field is different from the name of the currently checked out branch. + * + * Optionally specify a branch name, tag name or commit SHA to which the branch should be reset. + * **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost. + * + * PUT /projects/{project_id}/git_branch -> IGitBranch + * + * @param sdk IAPIMethods implementation + * @param project_id Project Id + * @param body Partial + * @param options one-time API call overrides + * + */ +export const update_git_branch = async ( + sdk: IAPIMethods, + project_id: string, + body: Partial, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + return sdk.put( + `/projects/${project_id}/git_branch`, + null, + body, + options + ); +}; + +/** + * ### Create and Checkout a Git Branch + * + * Creates and checks out a new branch in the given project repository + * Only allowed in development mode + * - Call `update_session` to select the 'dev' workspace. * * Optionally specify a branch name, tag name or commit SHA as the start point in the ref field. * If no ref is specified, HEAD of the current branch will be used as the start point for the new branch. @@ -9804,6 +10158,56 @@ export const reset_project_to_remote = async ( ); }; +/** + * ### Pull from Production + * Pulls changes from the remote production branch into the current development workspace. + * + * POST /projects/{project_id}/pull_from_production -> string + * + * @param sdk IAPIMethods implementation + * @param project_id Id of project + * @param options one-time API call overrides + * + */ +export const pull_project_from_production = async ( + sdk: IAPIMethods, + project_id: string, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + return sdk.post( + `/projects/${project_id}/pull_from_production`, + null, + null, + options + ); +}; + +/** + * ### Pull from Remote + * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + * + * POST /projects/{project_id}/pull_from_remote -> string + * + * @param sdk IAPIMethods implementation + * @param project_id Id of project + * @param options one-time API call overrides + * + */ +export const pull_project_from_remote = async ( + sdk: IAPIMethods, + project_id: string, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + return sdk.post( + `/projects/${project_id}/pull_from_remote`, + null, + null, + options + ); +}; + /** * ### Get All Projects * @@ -10325,25 +10729,33 @@ export const tag_ref = async ( }; /** - * ### Initiate Git Diagnosis Suite + * ### Configure Repository Credential for a remote dependency + * + * Admin required. + * + * `root_project_id` is required. + * `credential_id` is required. * - * POST /projects/{project_id}/git_diagnostic_report -> IGitDiagnosticReport + * PUT /projects/{root_project_id}/credential/{credential_id} -> IRepositoryCredential * * @param sdk IAPIMethods implementation - * @param project_id Looker Project ID - * @param body Partial + * @param root_project_id Root Project Id + * @param credential_id Credential Id + * @param body Partial * @param options one-time API call overrides * */ -export const create_git_diagnostic_report = async ( +export const update_repository_credential = async ( sdk: IAPIMethods, - project_id: string, - body: Partial, + root_project_id: string, + credential_id: string, + body: Partial, options?: Partial -): Promise> => { - project_id = encodeParam(project_id); - return sdk.post( - `/projects/${project_id}/git_diagnostic_report`, +): Promise> => { + root_project_id = encodeParam(root_project_id); + credential_id = encodeParam(credential_id); + return sdk.put( + `/projects/${root_project_id}/credential/${credential_id}`, null, body, options @@ -10351,26 +10763,31 @@ export const create_git_diagnostic_report = async ( }; /** - * ### Retrieve Live Git Diagnostic Suite Execution Status + * ### Repository Credential for a remote dependency + * + * Admin required. + * + * `root_project_id` is required. + * `credential_id` is required. * - * GET /projects/{project_id}/git_diagnostic_report/{report_id} -> IGitDiagnosticReport + * DELETE /projects/{root_project_id}/credential/{credential_id} -> string * * @param sdk IAPIMethods implementation - * @param project_id Looker Project ID - * @param report_id Report ID + * @param root_project_id Root Project Id + * @param credential_id Credential Id * @param options one-time API call overrides * */ -export const get_git_diagnostic_report = async ( +export const delete_repository_credential = async ( sdk: IAPIMethods, - project_id: string, - report_id: string, + root_project_id: string, + credential_id: string, options?: Partial -): Promise> => { - project_id = encodeParam(project_id); - report_id = encodeParam(report_id); - return sdk.get( - `/projects/${project_id}/git_diagnostic_report/${report_id}`, +): Promise> => { + root_project_id = encodeParam(root_project_id); + credential_id = encodeParam(credential_id); + return sdk.delete( + `/projects/${root_project_id}/credential/${credential_id}`, null, null, options @@ -10378,104 +10795,9 @@ export const get_git_diagnostic_report = async ( }; /** - * ### Repair Git Configuration Issues + * ### Get all Repository Credentials for a project * - * POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> IGitDiagnosticReport - * - * @param sdk IAPIMethods implementation - * @param project_id Looker Project ID - * @param report_id Report ID - * @param body Partial - * @param options one-time API call overrides - * - */ -export const repair_git_diagnostic_report = async ( - sdk: IAPIMethods, - project_id: string, - report_id: string, - body: Partial, - options?: Partial -): Promise> => { - project_id = encodeParam(project_id); - report_id = encodeParam(report_id); - return sdk.post( - `/projects/${project_id}/git_diagnostic_report/${report_id}/repair`, - null, - body, - options - ); -}; - -/** - * ### Configure Repository Credential for a remote dependency - * - * Admin required. - * - * `root_project_id` is required. - * `credential_id` is required. - * - * PUT /projects/{root_project_id}/credential/{credential_id} -> IRepositoryCredential - * - * @param sdk IAPIMethods implementation - * @param root_project_id Root Project Id - * @param credential_id Credential Id - * @param body Partial - * @param options one-time API call overrides - * - */ -export const update_repository_credential = async ( - sdk: IAPIMethods, - root_project_id: string, - credential_id: string, - body: Partial, - options?: Partial -): Promise> => { - root_project_id = encodeParam(root_project_id); - credential_id = encodeParam(credential_id); - return sdk.put( - `/projects/${root_project_id}/credential/${credential_id}`, - null, - body, - options - ); -}; - -/** - * ### Repository Credential for a remote dependency - * - * Admin required. - * - * `root_project_id` is required. - * `credential_id` is required. - * - * DELETE /projects/{root_project_id}/credential/{credential_id} -> string - * - * @param sdk IAPIMethods implementation - * @param root_project_id Root Project Id - * @param credential_id Credential Id - * @param options one-time API call overrides - * - */ -export const delete_repository_credential = async ( - sdk: IAPIMethods, - root_project_id: string, - credential_id: string, - options?: Partial -): Promise> => { - root_project_id = encodeParam(root_project_id); - credential_id = encodeParam(credential_id); - return sdk.delete( - `/projects/${root_project_id}/credential/${credential_id}`, - null, - null, - options - ); -}; - -/** - * ### Get all Repository Credentials for a project - * - * `root_project_id` is required. + * `root_project_id` is required. * * GET /projects/{root_project_id}/credentials -> IRepositoryCredential[] * @@ -10510,6 +10832,8 @@ export const get_all_repository_credentials = async ( * Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. * After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /query_tasks -> IQueryTask * * @param sdk IAPIMethods implementation @@ -10789,6 +11113,8 @@ export const create_query = async ( * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/{query_id}/run/{result_format} -> string * * @remarks @@ -10880,6 +11206,8 @@ export const run_query = async ( * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /queries/run/{result_format} -> string * * @remarks @@ -10972,6 +11300,8 @@ export const run_inline_query = async ( * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> string * * @remarks @@ -11604,9 +11934,9 @@ export const delete_model_set = async ( sdk: IAPIMethods, model_set_id: string, options?: Partial -): Promise> => { +): Promise> => { model_set_id = encodeParam(model_set_id); - return sdk.delete( + return sdk.delete( `/model_sets/${model_set_id}`, null, null, @@ -11793,9 +12123,9 @@ export const delete_permission_set = async ( sdk: IAPIMethods, permission_set_id: string, options?: Partial -): Promise> => { +): Promise> => { permission_set_id = encodeParam(permission_set_id); - return sdk.delete( + return sdk.delete( `/permission_sets/${permission_set_id}`, null, null, @@ -12558,6 +12888,10 @@ export const search_scheduled_plans = async ( recipient: request.recipient, destination_type: request.destination_type, delivery_format: request.delivery_format, + all_states: request.all_states, + run_once: request.run_once, + enabled: request.enabled, + last_run_status: request.last_run_status, filter_or: request.filter_or, }, null, @@ -13500,73 +13834,87 @@ export const search_credentials_email = async ( }; /** - * ### Get information about the current user; i.e. the user account currently calling the API. + * ### Email/password login information for the specified user. * - * GET /user -> IUser + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_email -> ICredentialsEmail * * @param sdk IAPIMethods implementation + * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ -export const me = async ( +export const user_credentials_email = async ( sdk: IAPIMethods, + user_id: string, fields?: string, options?: Partial -): Promise> => { - return sdk.get('/user', { fields }, null, options); +): Promise> => { + user_id = encodeParam(user_id); + return sdk.get( + `/users/${user_id}/credentials_email`, + { fields }, + null, + options + ); }; /** - * ### Get information about all users. + * ### Email/password login information for the specified user. * - * GET /users -> IUser[] + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * POST /users/{user_id}/credentials_email -> ICredentialsEmail * * @param sdk IAPIMethods implementation - * @param request composed interface "IRequestAllUsers" for complex method parameters + * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. * @param options one-time API call overrides * */ -export const all_users = async ( +export const create_user_credentials_email = async ( sdk: IAPIMethods, - request: IRequestAllUsers, + user_id: string, + body: Partial, + fields?: string, options?: Partial -): Promise> => { - return sdk.get( - '/users', - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - ids: request.ids, - }, - null, +): Promise> => { + user_id = encodeParam(user_id); + return sdk.post( + `/users/${user_id}/credentials_email`, + { fields }, + body, options ); }; /** - * ### Create a user with the specified information. + * ### Email/password login information for the specified user. * - * POST /users -> IUser + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * PATCH /users/{user_id}/credentials_email -> ICredentialsEmail * * @param sdk IAPIMethods implementation - * @param body Partial + * @param user_id Id of user + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ -export const create_user = async ( +export const update_user_credentials_email = async ( sdk: IAPIMethods, - body?: Partial, + user_id: string, + body: Partial, fields?: string, options?: Partial -): Promise> => { - return sdk.post( - '/users', +): Promise> => { + user_id = encodeParam(user_id); + return sdk.patch( + `/users/${user_id}/credentials_email`, { fields }, body, options @@ -13574,127 +13922,77 @@ export const create_user = async ( }; /** - * ### Search users - * - * Returns all* user records that match the given search criteria. - * - * If multiple search params are given and `filter_or` is FALSE or not specified, - * search params are combined in a logical AND operation. - * Only rows that match *all* search param criteria will be returned. - * - * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - * Results will include rows that match **any** of the search criteria. - * - * String search params use case-insensitive matching. - * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - * example="dan%" will match "danger" and "Danzig" but not "David" - * example="D_m%" will match "Damage" and "dump" - * - * Integer search params can accept a single value or a comma separated list of values. The multiple - * values will be combined under a logical OR operation - results will match at least one of - * the given values. - * - * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - * or exclude (respectively) rows where the column is null. - * - * Boolean search params accept only "true" and "false" as values. - * + * ### Email/password login information for the specified user. * - * (*) Results are always filtered to the level of information the caller is permitted to view. - * Looker admins can see all user details; normal users in an open system can see - * names of other users but no details; normal users in a closed system can only see - * names of other users who are members of the same group as the user. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/search -> IUser[] + * DELETE /users/{user_id}/credentials_email -> string * * @param sdk IAPIMethods implementation - * @param request composed interface "IRequestSearchUsers" for complex method parameters + * @param user_id Id of user * @param options one-time API call overrides * */ -export const search_users = async ( +export const delete_user_credentials_email = async ( sdk: IAPIMethods, - request: IRequestSearchUsers, + user_id: string, options?: Partial -): Promise> => { - return sdk.get( - '/users/search', - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - id: request.id, - first_name: request.first_name, - last_name: request.last_name, - full_name: request.full_name, - verified_looker_employee: request.verified_looker_employee, - embed_user: request.embed_user, - email: request.email, - is_disabled: request.is_disabled, - filter_or: request.filter_or, - content_metadata_id: request.content_metadata_id, - group_id: request.group_id, - can_manage_api3_creds: request.can_manage_api3_creds, - is_service_account: request.is_service_account, - }, +): Promise> => { + user_id = encodeParam(user_id); + return sdk.delete( + `/users/${user_id}/credentials_email`, + null, null, options ); }; /** - * ### Search for user accounts by name + * ### Create a password reset token. + * This will create a cryptographically secure random password reset token for the user. + * If the user already has a password reset token then this invalidates the old token and creates a new one. + * The token is expressed as the 'password_reset_url' of the user's email/password credential object. + * This takes an optional 'expires' param to indicate if the new token should be an expiring token. + * Tokens that expire are typically used for self-service password resets for existing users. + * Invitation emails for new users typically are not set to expire. + * The expire period is always 60 minutes when expires is enabled. + * This method can be called with an empty body. * - * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. - * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * Any additional search params will be combined into a logical AND expression. - * - * GET /users/search/names/{pattern} -> IUser[] + * POST /users/{user_id}/credentials_email/password_reset -> ICredentialsEmail * * @param sdk IAPIMethods implementation - * @param request composed interface "IRequestSearchUsersNames" for complex method parameters + * @param request composed interface "IRequestCreateUserCredentialsEmailPasswordReset" for complex method parameters * @param options one-time API call overrides * */ -export const search_users_names = async ( +export const create_user_credentials_email_password_reset = async ( sdk: IAPIMethods, - request: IRequestSearchUsersNames, + request: IRequestCreateUserCredentialsEmailPasswordReset, options?: Partial -): Promise> => { - request.pattern = encodeParam(request.pattern); - return sdk.get( - `/users/search/names/${request.pattern}`, - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - id: request.id, - first_name: request.first_name, - last_name: request.last_name, - verified_looker_employee: request.verified_looker_employee, - email: request.email, - is_disabled: request.is_disabled, - }, +): Promise> => { + request.user_id = encodeParam(request.user_id); + return sdk.post( + `/users/${request.user_id}/credentials_email/password_reset`, + { expires: request.expires, fields: request.fields }, null, options ); }; /** - * ### Get information about the user with a specific id. + * ### Send a password reset token. + * This will send a password reset email to the user. If a password reset token does not already exist + * for this user, it will create one and then send it. + * If the user has not yet set up their account, it will send a setup email to the user. + * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + * Password reset URLs will expire in 60 minutes. + * This method can be called with an empty body. * - * If the caller is an admin or the caller is the user being specified, then full user information will - * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains - * The user name and avatar url, but no sensitive information. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/{user_id} -> IUser + * POST /users/{user_id}/credentials_email/send_password_reset -> ICredentialsEmail * * @param sdk IAPIMethods implementation * @param user_id Id of user @@ -13702,129 +14000,93 @@ export const search_users_names = async ( * @param options one-time API call overrides * */ -export const user = async ( +export const send_user_credentials_email_password_reset = async ( sdk: IAPIMethods, user_id: string, fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.get(`/users/${user_id}`, { fields }, null, options); + return sdk.post( + `/users/${user_id}/credentials_email/send_password_reset`, + { fields }, + null, + options + ); }; /** - * ### Update information about the user with a specific id. + * ### Google authentication login information for the specified user. * - * PATCH /users/{user_id} -> IUser + * GET /users/{user_id}/credentials_google -> ICredentialsGoogle * * @param sdk IAPIMethods implementation * @param user_id Id of user - * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ -export const update_user = async ( +export const user_credentials_google = async ( sdk: IAPIMethods, user_id: string, - body: Partial, fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.patch( - `/users/${user_id}`, + return sdk.get( + `/users/${user_id}/credentials_google`, { fields }, - body, + null, options ); }; /** - * ### Delete the user with a specific id. - * - * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the users or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. + * ### Delete Google authentication login information for the specified user. * - * The user cannot delete themselves. - * The last administrator user cannot be deleted. - * - * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - * Please use the dedicated `delete_service_account` endpoint. - * - * DELETE /users/{user_id} -> string + * DELETE /users/{user_id}/credentials_google -> string * * @param sdk IAPIMethods implementation * @param user_id Id of user * @param options one-time API call overrides * */ -export const delete_user = async ( +export const delete_user_credentials_google = async ( sdk: IAPIMethods, user_id: string, options?: Partial ): Promise> => { user_id = encodeParam(user_id); - return sdk.delete(`/users/${user_id}`, null, null, options); + return sdk.delete( + `/users/${user_id}/credentials_google`, + null, + null, + options + ); }; /** - * ### Get information about the user with a credential of given type with specific id. - * - * This is used to do things like find users by their embed external_user_id. Or, find the user with - * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - * for the user and is specific to each type of credential. - * - * An example using the Ruby sdk might look like: - * - * `sdk.user_for_credential('embed', 'customer-4959425')` - * - * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - * which field in the given credential type is actually searched when finding a user with the supplied - * 'credential_id'. - * - * | Credential Types | Id Field Matched | - * | ---------------- | ---------------- | - * | email | email | - * | google | google_user_id | - * | saml | saml_user_id | - * | oidc | oidc_user_id | - * | ldap | ldap_id | - * | api | token | - * | api3 | client_id | - * | embed | external_user_id | - * | looker_openid | email | - * - * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/credential/{credential_type}/{credential_id} -> IUser + * GET /users/{user_id}/credentials_looker_openid -> ICredentialsLookerOpenid * * @param sdk IAPIMethods implementation - * @param credential_type Type name of credential - * @param credential_id Id of credential + * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ -export const user_for_credential = async ( +export const user_credentials_looker_openid = async ( sdk: IAPIMethods, - credential_type: string, - credential_id: string, + user_id: string, fields?: string, options?: Partial -): Promise> => { - credential_type = encodeParam(credential_type); - credential_id = encodeParam(credential_id); - return sdk.get( - `/users/credential/${credential_type}/${credential_id}`, +): Promise> => { + user_id = encodeParam(user_id); + return sdk.get( + `/users/${user_id}/credentials_looker_openid`, { fields }, null, options @@ -13832,151 +14094,133 @@ export const user_for_credential = async ( }; /** - * ### Update information for a specific service account. This action is restricted to Looker admins. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * PATCH /users/service_accounts/{user_id} -> IServiceAccount + * DELETE /users/{user_id}/credentials_looker_openid -> string * * @param sdk IAPIMethods implementation - * @param user_id Id of service account - * @param body Partial - * @param fields Requested fields. + * @param user_id Id of user * @param options one-time API call overrides * */ -export const update_service_account = async ( +export const delete_user_credentials_looker_openid = async ( sdk: IAPIMethods, user_id: string, - body: Partial, - fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.patch( - `/users/service_accounts/${user_id}`, - { fields }, - body, + return sdk.delete( + `/users/${user_id}/credentials_looker_openid`, + null, + null, options ); }; /** - * ### Delete the service account with a specific id. - * - * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the service account or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. - * - * The service account cannot delete itself. + * ### Saml authentication login information for the specified user. * - * DELETE /users/service_accounts/{user_id} -> string + * GET /users/{user_id}/credentials_saml -> ICredentialsSaml * * @param sdk IAPIMethods implementation - * @param user_id Id of service account user + * @param user_id Id of user + * @param fields Requested fields. * @param options one-time API call overrides * */ -export const delete_service_account = async ( +export const user_credentials_saml = async ( sdk: IAPIMethods, user_id: string, + fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.delete( - `/users/service_accounts/${user_id}`, - null, + return sdk.get( + `/users/${user_id}/credentials_saml`, + { fields }, null, options ); }; /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Delete Saml authentication login information for the specified user. * - * GET /users/{user_id}/credentials_email -> ICredentialsEmail + * DELETE /users/{user_id}/credentials_saml -> string * * @param sdk IAPIMethods implementation * @param user_id Id of user - * @param fields Requested fields. * @param options one-time API call overrides * */ -export const user_credentials_email = async ( +export const delete_user_credentials_saml = async ( sdk: IAPIMethods, user_id: string, - fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.get( - `/users/${user_id}/credentials_email`, - { fields }, + return sdk.delete( + `/users/${user_id}/credentials_saml`, + null, null, options ); }; /** - * ### Email/password login information for the specified user. + * ### Get two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * POST /users/{user_id}/credentials_email -> ICredentialsEmail + * GET /users/{user_id}/credentials_totp -> ICredentialsTotp * * @param sdk IAPIMethods implementation * @param user_id Id of user - * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ -export const create_user_credentials_email = async ( +export const user_credentials_totp = async ( sdk: IAPIMethods, user_id: string, - body: Partial, fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.post( - `/users/${user_id}/credentials_email`, + return sdk.get( + `/users/${user_id}/credentials_totp`, { fields }, - body, + null, options ); }; /** - * ### Email/password login information for the specified user. + * ### Create two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * PATCH /users/{user_id}/credentials_email -> ICredentialsEmail + * POST /users/{user_id}/credentials_totp -> ICredentialsTotp * * @param sdk IAPIMethods implementation * @param user_id Id of user - * @param body Partial + * @param body WARNING: no writeable properties found for POST, PUT, or PATCH * @param fields Requested fields. * @param options one-time API call overrides * */ -export const update_user_credentials_email = async ( +export const create_user_credentials_totp = async ( sdk: IAPIMethods, user_id: string, - body: Partial, + body?: Partial, fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.patch( - `/users/${user_id}/credentials_email`, + return sdk.post( + `/users/${user_id}/credentials_totp`, { fields }, body, options @@ -13984,25 +14228,25 @@ export const update_user_credentials_email = async ( }; /** - * ### Email/password login information for the specified user. + * ### Delete two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * DELETE /users/{user_id}/credentials_email -> string + * DELETE /users/{user_id}/credentials_totp -> string * * @param sdk IAPIMethods implementation * @param user_id Id of user * @param options one-time API call overrides * */ -export const delete_user_credentials_email = async ( +export const delete_user_credentials_totp = async ( sdk: IAPIMethods, user_id: string, options?: Partial ): Promise> => { user_id = encodeParam(user_id); return sdk.delete( - `/users/${user_id}/credentials_email`, + `/users/${user_id}/credentials_totp`, null, null, options @@ -14010,187 +14254,395 @@ export const delete_user_credentials_email = async ( }; /** - * ### Two-factor login information for the specified user. + * ### Get information about the current user; i.e. the user account currently calling the API. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * GET /user -> IUser * - * GET /users/{user_id}/credentials_totp -> ICredentialsTotp + * @param sdk IAPIMethods implementation + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ +export const me = async ( + sdk: IAPIMethods, + fields?: string, + options?: Partial +): Promise> => { + return sdk.get('/user', { fields }, null, options); +}; + +/** + * ### Get information about all users. + * + * GET /users -> IUser[] * * @param sdk IAPIMethods implementation - * @param user_id Id of user + * @param request composed interface "IRequestAllUsers" for complex method parameters + * @param options one-time API call overrides + * + */ +export const all_users = async ( + sdk: IAPIMethods, + request: IRequestAllUsers, + options?: Partial +): Promise> => { + return sdk.get( + '/users', + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + ids: request.ids, + }, + null, + options + ); +}; + +/** + * ### Create a user with the specified information. + * + * POST /users -> IUser + * + * @param sdk IAPIMethods implementation + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ -export const user_credentials_totp = async ( +export const create_user = async ( sdk: IAPIMethods, - user_id: string, + body?: Partial, fields?: string, options?: Partial -): Promise> => { - user_id = encodeParam(user_id); - return sdk.get( - `/users/${user_id}/credentials_totp`, +): Promise> => { + return sdk.post( + '/users', { fields }, + body, + options + ); +}; + +/** + * ### Search users + * + * Returns all* user records that match the given search criteria. + * + * If multiple search params are given and `filter_or` is FALSE or not specified, + * search params are combined in a logical AND operation. + * Only rows that match *all* search param criteria will be returned. + * + * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. + * Results will include rows that match **any** of the search criteria. + * + * String search params use case-insensitive matching. + * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. + * example="dan%" will match "danger" and "Danzig" but not "David" + * example="D_m%" will match "Damage" and "dump" + * + * Integer search params can accept a single value or a comma separated list of values. The multiple + * values will be combined under a logical OR operation - results will match at least one of + * the given values. + * + * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match + * or exclude (respectively) rows where the column is null. + * + * Boolean search params accept only "true" and "false" as values. + * + * + * (*) Results are always filtered to the level of information the caller is permitted to view. + * Looker admins can see all user details; normal users in an open system can see + * names of other users but no details; normal users in a closed system can only see + * names of other users who are members of the same group as the user. + * + * GET /users/search -> IUser[] + * + * @param sdk IAPIMethods implementation + * @param request composed interface "IRequestSearchUsers" for complex method parameters + * @param options one-time API call overrides + * + */ +export const search_users = async ( + sdk: IAPIMethods, + request: IRequestSearchUsers, + options?: Partial +): Promise> => { + return sdk.get( + '/users/search', + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + id: request.id, + first_name: request.first_name, + last_name: request.last_name, + full_name: request.full_name, + verified_looker_employee: request.verified_looker_employee, + embed_user: request.embed_user, + email: request.email, + is_disabled: request.is_disabled, + filter_or: request.filter_or, + content_metadata_id: request.content_metadata_id, + group_id: request.group_id, + can_manage_api3_creds: request.can_manage_api3_creds, + is_service_account: request.is_service_account, + }, null, options ); }; /** - * ### Two-factor login information for the specified user. + * ### Search for user accounts by name * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. + * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. * - * POST /users/{user_id}/credentials_totp -> ICredentialsTotp + * Any additional search params will be combined into a logical AND expression. + * + * GET /users/search/names/{pattern} -> IUser[] + * + * @param sdk IAPIMethods implementation + * @param request composed interface "IRequestSearchUsersNames" for complex method parameters + * @param options one-time API call overrides + * + */ +export const search_users_names = async ( + sdk: IAPIMethods, + request: IRequestSearchUsersNames, + options?: Partial +): Promise> => { + request.pattern = encodeParam(request.pattern); + return sdk.get( + `/users/search/names/${request.pattern}`, + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + id: request.id, + first_name: request.first_name, + last_name: request.last_name, + verified_looker_employee: request.verified_looker_employee, + email: request.email, + is_disabled: request.is_disabled, + }, + null, + options + ); +}; + +/** + * ### Get information about the user with a specific id. + * + * If the caller is an admin or the caller is the user being specified, then full user information will + * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains + * The user name and avatar url, but no sensitive information. + * + * GET /users/{user_id} -> IUser * * @param sdk IAPIMethods implementation * @param user_id Id of user - * @param body WARNING: no writeable properties found for POST, PUT, or PATCH * @param fields Requested fields. * @param options one-time API call overrides * */ -export const create_user_credentials_totp = async ( +export const user = async ( sdk: IAPIMethods, user_id: string, - body?: Partial, fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.post( - `/users/${user_id}/credentials_totp`, - { fields }, - body, - options - ); + return sdk.get(`/users/${user_id}`, { fields }, null, options); }; /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Update information about the user with a specific id. * - * DELETE /users/{user_id}/credentials_totp -> string + * PATCH /users/{user_id} -> IUser * * @param sdk IAPIMethods implementation * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. * @param options one-time API call overrides * */ -export const delete_user_credentials_totp = async ( +export const update_user = async ( sdk: IAPIMethods, user_id: string, + body: Partial, + fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.delete( - `/users/${user_id}/credentials_totp`, - null, - null, + return sdk.patch( + `/users/${user_id}`, + { fields }, + body, options ); }; /** - * ### LDAP login information for the specified user. + * ### Delete the user with a specific id. + * + * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. + * + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the users or that use their content will be deleted. + * * Alerts owned by the users will be deleted. + * + * The user cannot delete themselves. + * The last administrator user cannot be deleted. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + * Please use the dedicated `delete_service_account` endpoint. * - * GET /users/{user_id}/credentials_ldap -> ICredentialsLDAP + * DELETE /users/{user_id} -> string * * @param sdk IAPIMethods implementation * @param user_id Id of user - * @param fields Requested fields. * @param options one-time API call overrides * */ -export const user_credentials_ldap = async ( +export const delete_user = async ( sdk: IAPIMethods, user_id: string, - fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.get( - `/users/${user_id}/credentials_ldap`, - { fields }, - null, - options - ); + return sdk.delete(`/users/${user_id}`, null, null, options); }; /** - * ### LDAP login information for the specified user. + * ### Get information about the user with a credential of given type with specific id. + * + * This is used to do things like find users by their embed external_user_id. Or, find the user with + * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + * for the user and is specific to each type of credential. + * + * An example using the Ruby sdk might look like: + * + * `sdk.user_for_credential('embed', 'customer-4959425')` + * + * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + * which field in the given credential type is actually searched when finding a user with the supplied + * 'credential_id'. + * + * | Credential Types | Id Field Matched | + * | ---------------- | ---------------- | + * | email | email | + * | google | google_user_id | + * | saml | saml_user_id | + * | oidc | oidc_user_id | + * | ldap | ldap_id | + * | api | token | + * | api3 | client_id | + * | embed | external_user_id | + * | looker_openid | email | + * + * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * DELETE /users/{user_id}/credentials_ldap -> string + * GET /users/credential/{credential_type}/{credential_id} -> IUser * * @param sdk IAPIMethods implementation - * @param user_id Id of user + * @param credential_type Type name of credential + * @param credential_id Id of credential + * @param fields Requested fields. * @param options one-time API call overrides * */ -export const delete_user_credentials_ldap = async ( +export const user_for_credential = async ( sdk: IAPIMethods, - user_id: string, + credential_type: string, + credential_id: string, + fields?: string, options?: Partial -): Promise> => { - user_id = encodeParam(user_id); - return sdk.delete( - `/users/${user_id}/credentials_ldap`, - null, +): Promise> => { + credential_type = encodeParam(credential_type); + credential_id = encodeParam(credential_id); + return sdk.get( + `/users/credential/${credential_type}/${credential_id}`, + { fields }, null, options ); }; /** - * ### Google authentication login information for the specified user. + * ### Update information for a specific service account. This action is restricted to Looker admins. * - * GET /users/{user_id}/credentials_google -> ICredentialsGoogle + * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. + * + * PATCH /users/service_accounts/{user_id} -> IServiceAccount * * @param sdk IAPIMethods implementation - * @param user_id Id of user + * @param user_id Id of service account + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ -export const user_credentials_google = async ( +export const update_service_account = async ( sdk: IAPIMethods, user_id: string, + body: Partial, fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.get( - `/users/${user_id}/credentials_google`, + return sdk.patch( + `/users/service_accounts/${user_id}`, { fields }, - null, + body, options ); }; /** - * ### Google authentication login information for the specified user. + * ### Delete the service account with a specific id. * - * DELETE /users/{user_id}/credentials_google -> string + * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. + * + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the service account or that use their content will be deleted. + * * Alerts owned by the service account will be deleted. + * + * The service account cannot delete itself. + * + * DELETE /users/service_accounts/{user_id} -> string * * @param sdk IAPIMethods implementation - * @param user_id Id of user + * @param user_id Id of service account user * @param options one-time API call overrides * */ -export const delete_user_credentials_google = async ( +export const delete_service_account = async ( sdk: IAPIMethods, user_id: string, options?: Partial ): Promise> => { user_id = encodeParam(user_id); return sdk.delete( - `/users/${user_id}/credentials_google`, + `/users/service_accounts/${user_id}`, null, null, options @@ -14198,9 +14650,11 @@ export const delete_user_credentials_google = async ( }; /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * GET /users/{user_id}/credentials_saml -> ICredentialsSaml + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_ldap -> ICredentialsLDAP * * @param sdk IAPIMethods implementation * @param user_id Id of user @@ -14208,15 +14662,15 @@ export const delete_user_credentials_google = async ( * @param options one-time API call overrides * */ -export const user_credentials_saml = async ( +export const user_credentials_ldap = async ( sdk: IAPIMethods, user_id: string, fields?: string, options?: Partial -): Promise> => { +): Promise> => { user_id = encodeParam(user_id); - return sdk.get( - `/users/${user_id}/credentials_saml`, + return sdk.get( + `/users/${user_id}/credentials_ldap`, { fields }, null, options @@ -14224,23 +14678,25 @@ export const user_credentials_saml = async ( }; /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * DELETE /users/{user_id}/credentials_saml -> string + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_ldap -> string * * @param sdk IAPIMethods implementation * @param user_id Id of user * @param options one-time API call overrides * */ -export const delete_user_credentials_saml = async ( +export const delete_user_credentials_ldap = async ( sdk: IAPIMethods, user_id: string, options?: Partial ): Promise> => { user_id = encodeParam(user_id); return sdk.delete( - `/users/${user_id}/credentials_saml`, + `/users/${user_id}/credentials_ldap`, null, null, options @@ -14524,60 +14980,6 @@ export const all_user_credentials_embeds = async ( ); }; -/** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * GET /users/{user_id}/credentials_looker_openid -> ICredentialsLookerOpenid - * - * @param sdk IAPIMethods implementation - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides - * - */ -export const user_credentials_looker_openid = async ( - sdk: IAPIMethods, - user_id: string, - fields?: string, - options?: Partial -): Promise> => { - user_id = encodeParam(user_id); - return sdk.get( - `/users/${user_id}/credentials_looker_openid`, - { fields }, - null, - options - ); -}; - -/** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * DELETE /users/{user_id}/credentials_looker_openid -> string - * - * @param sdk IAPIMethods implementation - * @param user_id Id of user - * @param options one-time API call overrides - * - */ -export const delete_user_credentials_looker_openid = async ( - sdk: IAPIMethods, - user_id: string, - options?: Partial -): Promise> => { - user_id = encodeParam(user_id); - return sdk.delete( - `/users/${user_id}/credentials_looker_openid`, - null, - null, - options - ); -}; - /** * ### Web login session for the specified user. * @@ -14660,40 +15062,6 @@ export const all_user_sessions = async ( ); }; -/** - * ### Create a password reset token. - * This will create a cryptographically secure random password reset token for the user. - * If the user already has a password reset token then this invalidates the old token and creates a new one. - * The token is expressed as the 'password_reset_url' of the user's email/password credential object. - * This takes an optional 'expires' param to indicate if the new token should be an expiring token. - * Tokens that expire are typically used for self-service password resets for existing users. - * Invitation emails for new users typically are not set to expire. - * The expire period is always 60 minutes when expires is enabled. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/password_reset -> ICredentialsEmail - * - * @param sdk IAPIMethods implementation - * @param request composed interface "IRequestCreateUserCredentialsEmailPasswordReset" for complex method parameters - * @param options one-time API call overrides - * - */ -export const create_user_credentials_email_password_reset = async ( - sdk: IAPIMethods, - request: IRequestCreateUserCredentialsEmailPasswordReset, - options?: Partial -): Promise> => { - request.user_id = encodeParam(request.user_id); - return sdk.post( - `/users/${request.user_id}/credentials_email/password_reset`, - { expires: request.expires, fields: request.fields }, - null, - options - ); -}; - /** * ### Get information about roles of a given user * @@ -14856,40 +15224,6 @@ export const delete_user_attribute_user_value = async ( ); }; -/** - * ### Send a password reset token. - * This will send a password reset email to the user. If a password reset token does not already exist - * for this user, it will create one and then send it. - * If the user has not yet set up their account, it will send a setup email to the user. - * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - * Password reset URLs will expire in 60 minutes. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/send_password_reset -> ICredentialsEmail - * - * @param sdk IAPIMethods implementation - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides - * - */ -export const send_user_credentials_email_password_reset = async ( - sdk: IAPIMethods, - user_id: string, - fields?: string, - options?: Partial -): Promise> => { - user_id = encodeParam(user_id); - return sdk.post( - `/users/${user_id}/credentials_email/send_password_reset`, - { fields }, - null, - options - ); -}; - /** * ### Change a disabled user's email addresses * diff --git a/packages/sdk/src/4.0/methods.ts b/packages/sdk/src/4.0/methods.ts index aeb084fb5..34aeb043c 100644 --- a/packages/sdk/src/4.0/methods.ts +++ b/packages/sdk/src/4.0/methods.ts @@ -25,7 +25,7 @@ */ /** - * 518 API methods + * 529 API methods */ import type { @@ -45,6 +45,7 @@ import type { ILooker40SDK } from './methodsInterface'; import type { IAccessToken, IAgent, + IAgentLookml, IAlert, IAlertNotifications, IAlertPatch, @@ -75,8 +76,6 @@ import type { IConversationalAnalyticsChatRequest, IConversationMessage, ICostEstimate, - ICreateCIRunRequest, - ICreateCIRunResponse, ICreateContinuousIntegrationRunRequest, ICreateCostEstimate, ICreateCredentialsApi3, @@ -130,7 +129,6 @@ import type { IGitBranch, IGitConnectionTest, IGitConnectionTestResult, - IGitDiagnosticReport, IGoldenQuery, IGroup, IGroupHierarchy, @@ -171,8 +169,8 @@ import type { IPermission, IPermissionSet, IProject, + IProjectCISuite, IProjectFile, - IProjectRun, IProjectValidation, IProjectValidationCache, IProjectWorkspace, @@ -211,6 +209,7 @@ import type { IRequestDeployRefToProduction, IRequestFolderChildren, IRequestFolderChildrenSearch, + IRequestGetContinuousIntegrationSuites, IRequestGraphDerivedTablesForModel, IRequestGraphDerivedTablesForView, IRequestLogin, @@ -232,6 +231,7 @@ import type { IRequestSearchContent, IRequestSearchContentFavorites, IRequestSearchContentViews, + IRequestSearchContinuousIntegrationRuns, IRequestSearchConversations, IRequestSearchCredentialsEmail, IRequestSearchDashboardElements, @@ -291,6 +291,7 @@ import type { IUserAttribute, IUserAttributeGroupValue, IUserAttributeWithValue, + IUserDbConnection, IUserEmailOnly, IUserLoginLockout, IUserPublic, @@ -326,7 +327,6 @@ import type { IWriteEmbedSecret, IWriteExternalOauthApplication, IWriteGitBranch, - IWriteGitDiagnosticReport, IWriteGoldenQuery, IWriteGroup, IWriteIntegration, @@ -345,6 +345,7 @@ import type { IWritePasswordConfig, IWritePermissionSet, IWriteProject, + IWriteProjectCISuite, IWriteQuery, IWriteRepositoryCredential, IWriteRole, @@ -360,6 +361,7 @@ import type { IWriteUser, IWriteUserAttribute, IWriteUserAttributeWithValue, + IWriteUserDbConnection, IWriteWhitelabelConfiguration, } from './models'; @@ -3554,6 +3556,7 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -3605,6 +3608,7 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -4427,6 +4431,79 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Get All User DB Connections + * + * Returns a list of user DB connections. + * + * GET /user_db_connections -> IUserDbConnection[] + * + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ + async all_user_db_connections( + fields?: string, + options?: Partial + ): Promise> { + return this.get( + '/user_db_connections', + { fields }, + null, + options + ); + } + + /** + * ### Update User DB Connection + * + * Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + * + * PATCH /user_db_connections/{user_db_connection_id} -> IUserDbConnection + * + * @param user_db_connection_id Id of user DB connection + * @param body Partial + * @param options one-time API call overrides + * + */ + async update_user_db_connection( + user_db_connection_id: string, + body: Partial, + options?: Partial + ): Promise> { + user_db_connection_id = encodeParam(user_db_connection_id); + return this.patch( + `/user_db_connections/${user_db_connection_id}`, + null, + body, + options + ); + } + + /** + * ### Delete User DB Connection + * + * Deletes an existing user DB connection. + * + * DELETE /user_db_connections/{user_db_connection_id} -> void + * + * @param user_db_connection_id Id of user DB connection + * @param options one-time API call overrides + * + */ + async delete_user_db_connection( + user_db_connection_id: string, + options?: Partial + ): Promise> { + user_db_connection_id = encodeParam(user_db_connection_id); + return this.delete( + `/user_db_connections/${user_db_connection_id}`, + null, + null, + options + ); + } + //#endregion Connection: Manage Database Connections //#region Content: Manage Content @@ -5089,6 +5166,30 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Get LookML of a UDD Agent + * + * Returns the LookML representation of a user-defined (UDD) agent. + * + * GET /agents/lookml/{agent_id} -> IAgentLookml + * + * @param agent_id Id of agent + * @param options one-time API call overrides + * + */ + async agent_lookml( + agent_id: string, + options?: Partial + ): Promise> { + agent_id = encodeParam(agent_id); + return this.get( + `/agents/lookml/${agent_id}`, + null, + null, + options + ); + } + /** * ### Get All Conversation Messages * @@ -5235,6 +5336,39 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Get Agent Responses for User Message + * + * Get all agent response messages generated for a specific user prompt. + * + * An agent response often consists of multiple message blocks (such as text explanations, + * visualizations, and follow-up suggestions). This endpoint returns all response messages + * following the specified user message up to the next user prompt. + * + * GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> IConversationMessage[] + * + * @param conversation_id Conversation ID + * @param user_message_id User Conversation Message ID + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + async get_conversation_message_responses( + conversation_id: string, + user_message_id: string, + fields?: string, + options?: Partial + ): Promise> { + conversation_id = encodeParam(conversation_id); + user_message_id = encodeParam(user_message_id); + return this.get( + `/conversations/${conversation_id}/messages/${user_message_id}/responses`, + { fields }, + null, + options + ); + } + /** * ### Search Conversations * @@ -5771,6 +5905,36 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Get Dashboard Image + * + * Returns the image content for a dashboard element. + * + * GET /dashboards/{dashboard_id}/images/{image_slug} -> string + * + * @remarks + * **NOTE**: Binary content may be returned by this function. + * + * @param dashboard_id Id of dashboard + * @param image_slug Slug of image + * @param options one-time API call overrides + * + */ + async get_dashboard_image( + dashboard_id: string, + image_slug: string, + options?: Partial + ): Promise> { + dashboard_id = encodeParam(dashboard_id); + image_slug = encodeParam(image_slug); + return this.get( + `/dashboards/${dashboard_id}/images/${image_slug}`, + null, + null, + options + ); + } + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -5823,6 +5987,8 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * Boolean search params accept only "true" and "false" as values. * * + * **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + * * The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. * * Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -5889,18 +6055,20 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * * @param dashboard_id Dashboard id to move. * @param folder_id Folder id to move to. + * @param project_name LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. * @param options one-time API call overrides * */ async move_dashboard( dashboard_id: string, folder_id: string, + project_name?: string, options?: Partial ): Promise> { dashboard_id = encodeParam(dashboard_id); return this.patch( `/dashboards/${dashboard_id}/move`, - { folder_id }, + { folder_id, project_name }, null, options ); @@ -8200,6 +8368,8 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /looks/{look_id}/run/{result_format} -> string * * @remarks @@ -8741,66 +8911,174 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { //#region Project: Manage Projects /** - * ### Fetches a CI Run. + * ### Search Continuous Integration Runs for a project. * - * This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + * Returns an array of Continuous Integration Run objects that match the specified search criteria. * - * GET /projects/{project_id}/ci/runs/{run_id} -> IProjectRun + * GET /projects/{project_id}/continuous_integration/runs/search -> ICIRun[] * - * @deprecated + * @param request composed interface "IRequestSearchContinuousIntegrationRuns" for complex method parameters + * @param options one-time API call overrides + * + */ + async search_continuous_integration_runs( + request: IRequestSearchContinuousIntegrationRuns, + options?: Partial + ): Promise> { + request.project_id = encodeParam(request.project_id); + return this.get( + `/projects/${request.project_id}/continuous_integration/runs/search`, + { + fields: request.fields, + suite_id: request.suite_id, + status: request.status, + user_id: request.user_id, + trigger_type: request.trigger_type, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + }, + null, + options + ); + } + + /** + * ### Fetches Multiple CI Suite Configurations for Project. + * + * GET /projects/{project_id}/continuous_integration/suites -> IProjectCISuite[] + * + * @param request composed interface "IRequestGetContinuousIntegrationSuites" for complex method parameters + * @param options one-time API call overrides + * + */ + async get_continuous_integration_suites( + request: IRequestGetContinuousIntegrationSuites, + options?: Partial + ): Promise> { + request.project_id = encodeParam(request.project_id); + return this.get( + `/projects/${request.project_id}/continuous_integration/suites`, + { + fields: request.fields, + limit: request.limit, + offset: request.offset, + created_at: request.created_at, + }, + null, + options + ); + } + + /** + * ### Fetches a CI Suite Configuration. + * + * POST /projects/{project_id}/continuous_integration/suites -> IProjectCISuite * * @param project_id Project Id - * @param run_id Run Id + * @param body Partial * @param fields Requested fields * @param options one-time API call overrides * */ - async get_ci_run( + async create_continuous_integration_suite( project_id: string, - run_id: string, + body: Partial, fields?: string, options?: Partial - ): Promise> { + ): Promise> { project_id = encodeParam(project_id); - run_id = encodeParam(run_id); - return this.get( - `/projects/${project_id}/ci/runs/${run_id}`, + return this.post( + `/projects/${project_id}/continuous_integration/suites`, { fields }, - null, + body, options ); } /** - * ### Creates a CI Run. + * ### Fetches a CI Suite Configuration. * - * This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + * GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> IProjectCISuite * - * POST /projects/{project_id}/ci/run -> ICreateCIRunResponse + * @param project_id Project Id + * @param suite_id Suite Id + * @param fields Requested fields + * @param options one-time API call overrides * - * @deprecated + */ + async get_continuous_integration_suite( + project_id: string, + suite_id: string, + fields?: string, + options?: Partial + ): Promise> { + project_id = encodeParam(project_id); + suite_id = encodeParam(suite_id); + return this.get( + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, + { fields }, + null, + options + ); + } + + /** + * ### Updates a Continuous Integration Suite. + * + * PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> IProjectCISuite * * @param project_id Project Id - * @param body Partial + * @param suite_id Suite Id + * @param body Partial * @param fields Requested fields * @param options one-time API call overrides * */ - async create_ci_run( + async update_continuous_integration_suite( project_id: string, - body: Partial, + suite_id: string, + body: Partial, fields?: string, options?: Partial - ): Promise> { + ): Promise> { project_id = encodeParam(project_id); - return this.post( - `/projects/${project_id}/ci/run`, + suite_id = encodeParam(suite_id); + return this.patch( + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, { fields }, body, options ); } + /** + * ### Deletes a Continuous Integration Suite. + * + * DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> string + * + * @param project_id Project Id + * @param suite_id Suite Id + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + async delete_continuous_integration_suite( + project_id: string, + suite_id: string, + fields?: string, + options?: Partial + ): Promise> { + project_id = encodeParam(project_id); + suite_id = encodeParam(suite_id); + return this.delete( + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, + { fields }, + null, + options + ); + } + /** * ### Creates and queues a Continuous Integration Run. * @@ -8827,6 +9105,33 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Duplicates and queues a Continuous Integration Run. + * + * POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> ICIRun + * + * @param project_id Project Id + * @param run_id Run ID to duplicate and re-run + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + async duplicate_continuous_integration_run( + project_id: string, + run_id: string, + fields?: string, + options?: Partial + ): Promise> { + project_id = encodeParam(project_id); + run_id = encodeParam(run_id); + return this.post( + `/projects/${project_id}/continuous_integration/runs/${run_id}/duplicate`, + { fields }, + null, + options + ); + } + /** * ### Gets a Continuous Integration run. * @@ -8854,6 +9159,31 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Cancels a Continuous Integration Run. + * + * DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> string + * + * @param project_id Project Id + * @param run_id Run Id + * @param options one-time API call overrides + * + */ + async cancel_continuous_integration_run( + project_id: string, + run_id: string, + options?: Partial + ): Promise> { + project_id = encodeParam(project_id); + run_id = encodeParam(run_id); + return this.delete( + `/projects/${project_id}/continuous_integration/runs/${run_id}`, + null, + null, + options + ); + } + /** * ### Generate Lockfile for All LookML Dependencies * @@ -9213,30 +9543,76 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Get All Projects - * - * Returns all projects visible to the current user + * ### Pull from Production + * Pulls changes from the remote production branch into the current development workspace. * - * GET /projects -> IProject[] + * POST /projects/{project_id}/pull_from_production -> string * - * @param fields Requested fields + * @param project_id Id of project * @param options one-time API call overrides * */ - async all_projects( - fields?: string, + async pull_project_from_production( + project_id: string, options?: Partial - ): Promise> { - return this.get('/projects', { fields }, null, options); + ): Promise> { + project_id = encodeParam(project_id); + return this.post( + `/projects/${project_id}/pull_from_production`, + null, + null, + options + ); } /** - * ### Create A Project + * ### Pull from Remote + * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. * - * dev mode required. - * - Call `update_session` to select the 'dev' workspace. + * POST /projects/{project_id}/pull_from_remote -> string * - * `name` is required. + * @param project_id Id of project + * @param options one-time API call overrides + * + */ + async pull_project_from_remote( + project_id: string, + options?: Partial + ): Promise> { + project_id = encodeParam(project_id); + return this.post( + `/projects/${project_id}/pull_from_remote`, + null, + null, + options + ); + } + + /** + * ### Get All Projects + * + * Returns all projects visible to the current user + * + * GET /projects -> IProject[] + * + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + async all_projects( + fields?: string, + options?: Partial + ): Promise> { + return this.get('/projects', { fields }, null, options); + } + + /** + * ### Create A Project + * + * dev mode required. + * - Call `update_session` to select the 'dev' workspace. + * + * `name` is required. * `git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`. * * POST /projects -> IProject @@ -9699,82 +10075,6 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } - /** - * ### Initiate Git Diagnosis Suite - * - * POST /projects/{project_id}/git_diagnostic_report -> IGitDiagnosticReport - * - * @param project_id Looker Project ID - * @param body Partial - * @param options one-time API call overrides - * - */ - async create_git_diagnostic_report( - project_id: string, - body: Partial, - options?: Partial - ): Promise> { - project_id = encodeParam(project_id); - return this.post( - `/projects/${project_id}/git_diagnostic_report`, - null, - body, - options - ); - } - - /** - * ### Retrieve Live Git Diagnostic Suite Execution Status - * - * GET /projects/{project_id}/git_diagnostic_report/{report_id} -> IGitDiagnosticReport - * - * @param project_id Looker Project ID - * @param report_id Report ID - * @param options one-time API call overrides - * - */ - async get_git_diagnostic_report( - project_id: string, - report_id: string, - options?: Partial - ): Promise> { - project_id = encodeParam(project_id); - report_id = encodeParam(report_id); - return this.get( - `/projects/${project_id}/git_diagnostic_report/${report_id}`, - null, - null, - options - ); - } - - /** - * ### Repair Git Configuration Issues - * - * POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> IGitDiagnosticReport - * - * @param project_id Looker Project ID - * @param report_id Report ID - * @param body Partial - * @param options one-time API call overrides - * - */ - async repair_git_diagnostic_report( - project_id: string, - report_id: string, - body: Partial, - options?: Partial - ): Promise> { - project_id = encodeParam(project_id); - report_id = encodeParam(report_id); - return this.post( - `/projects/${project_id}/git_diagnostic_report/${report_id}/repair`, - null, - body, - options - ); - } - /** * ### Configure Repository Credential for a remote dependency * @@ -9873,6 +10173,8 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. * After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /query_tasks -> IQueryTask * * @param request composed interface "IRequestCreateQueryTask" for complex method parameters @@ -10138,6 +10440,8 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/{query_id}/run/{result_format} -> string * * @remarks @@ -10227,6 +10531,8 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /queries/run/{result_format} -> string * * @remarks @@ -10317,6 +10623,8 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> string * * @remarks @@ -10911,9 +11219,9 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { async delete_model_set( model_set_id: string, options?: Partial - ): Promise> { + ): Promise> { model_set_id = encodeParam(model_set_id); - return this.delete( + return this.delete( `/model_sets/${model_set_id}`, null, null, @@ -11091,9 +11399,9 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { async delete_permission_set( permission_set_id: string, options?: Partial - ): Promise> { + ): Promise> { permission_set_id = encodeParam(permission_set_id); - return this.delete( + return this.delete( `/permission_sets/${permission_set_id}`, null, null, @@ -11819,6 +12127,10 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { recipient: request.recipient, destination_type: request.destination_type, delivery_format: request.delivery_format, + all_states: request.all_states, + run_once: request.run_once, + enabled: request.enabled, + last_run_status: request.last_run_status, filter_or: request.filter_or, }, null, @@ -12714,67 +13026,81 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Get information about the current user; i.e. the user account currently calling the API. + * ### Email/password login information for the specified user. * - * GET /user -> IUser + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_email -> ICredentialsEmail * + * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async me( + async user_credentials_email( + user_id: string, fields?: string, options?: Partial - ): Promise> { - return this.get('/user', { fields }, null, options); + ): Promise> { + user_id = encodeParam(user_id); + return this.get( + `/users/${user_id}/credentials_email`, + { fields }, + null, + options + ); } /** - * ### Get information about all users. + * ### Email/password login information for the specified user. * - * GET /users -> IUser[] + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * @param request composed interface "IRequestAllUsers" for complex method parameters + * POST /users/{user_id}/credentials_email -> ICredentialsEmail + * + * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. * @param options one-time API call overrides * */ - async all_users( - request: IRequestAllUsers, + async create_user_credentials_email( + user_id: string, + body: Partial, + fields?: string, options?: Partial - ): Promise> { - return this.get( - '/users', - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - ids: request.ids, - }, - null, + ): Promise> { + user_id = encodeParam(user_id); + return this.post( + `/users/${user_id}/credentials_email`, + { fields }, + body, options ); } /** - * ### Create a user with the specified information. + * ### Email/password login information for the specified user. * - * POST /users -> IUser + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * @param body Partial + * PATCH /users/{user_id}/credentials_email -> ICredentialsEmail + * + * @param user_id Id of user + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - async create_user( - body?: Partial, + async update_user_credentials_email( + user_id: string, + body: Partial, fields?: string, options?: Partial - ): Promise> { - return this.post( - '/users', + ): Promise> { + user_id = encodeParam(user_id); + return this.patch( + `/users/${user_id}/credentials_email`, { fields }, body, options @@ -12782,137 +13108,87 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Search users - * - * Returns all* user records that match the given search criteria. - * - * If multiple search params are given and `filter_or` is FALSE or not specified, - * search params are combined in a logical AND operation. - * Only rows that match *all* search param criteria will be returned. - * - * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - * Results will include rows that match **any** of the search criteria. - * - * String search params use case-insensitive matching. - * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - * example="dan%" will match "danger" and "Danzig" but not "David" - * example="D_m%" will match "Damage" and "dump" - * - * Integer search params can accept a single value or a comma separated list of values. The multiple - * values will be combined under a logical OR operation - results will match at least one of - * the given values. - * - * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - * or exclude (respectively) rows where the column is null. - * - * Boolean search params accept only "true" and "false" as values. - * + * ### Email/password login information for the specified user. * - * (*) Results are always filtered to the level of information the caller is permitted to view. - * Looker admins can see all user details; normal users in an open system can see - * names of other users but no details; normal users in a closed system can only see - * names of other users who are members of the same group as the user. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/search -> IUser[] + * DELETE /users/{user_id}/credentials_email -> string * - * @param request composed interface "IRequestSearchUsers" for complex method parameters + * @param user_id Id of user * @param options one-time API call overrides * */ - async search_users( - request: IRequestSearchUsers, + async delete_user_credentials_email( + user_id: string, options?: Partial - ): Promise> { - return this.get( - '/users/search', - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - id: request.id, - first_name: request.first_name, - last_name: request.last_name, - full_name: request.full_name, - verified_looker_employee: request.verified_looker_employee, - embed_user: request.embed_user, - email: request.email, - is_disabled: request.is_disabled, - filter_or: request.filter_or, - content_metadata_id: request.content_metadata_id, - group_id: request.group_id, - can_manage_api3_creds: request.can_manage_api3_creds, - is_service_account: request.is_service_account, - }, + ): Promise> { + user_id = encodeParam(user_id); + return this.delete( + `/users/${user_id}/credentials_email`, + null, null, options ); } /** - * ### Search for user accounts by name + * ### Create a password reset token. + * This will create a cryptographically secure random password reset token for the user. + * If the user already has a password reset token then this invalidates the old token and creates a new one. + * The token is expressed as the 'password_reset_url' of the user's email/password credential object. + * This takes an optional 'expires' param to indicate if the new token should be an expiring token. + * Tokens that expire are typically used for self-service password resets for existing users. + * Invitation emails for new users typically are not set to expire. + * The expire period is always 60 minutes when expires is enabled. + * This method can be called with an empty body. * - * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. - * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * Any additional search params will be combined into a logical AND expression. + * POST /users/{user_id}/credentials_email/password_reset -> ICredentialsEmail * - * GET /users/search/names/{pattern} -> IUser[] - * - * @param request composed interface "IRequestSearchUsersNames" for complex method parameters + * @param request composed interface "IRequestCreateUserCredentialsEmailPasswordReset" for complex method parameters * @param options one-time API call overrides * */ - async search_users_names( - request: IRequestSearchUsersNames, + async create_user_credentials_email_password_reset( + request: IRequestCreateUserCredentialsEmailPasswordReset, options?: Partial - ): Promise> { - request.pattern = encodeParam(request.pattern); - return this.get( - `/users/search/names/${request.pattern}`, - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - id: request.id, - first_name: request.first_name, - last_name: request.last_name, - verified_looker_employee: request.verified_looker_employee, - email: request.email, - is_disabled: request.is_disabled, - }, + ): Promise> { + request.user_id = encodeParam(request.user_id); + return this.post( + `/users/${request.user_id}/credentials_email/password_reset`, + { expires: request.expires, fields: request.fields }, null, options ); } /** - * ### Get information about the user with a specific id. + * ### Send a password reset token. + * This will send a password reset email to the user. If a password reset token does not already exist + * for this user, it will create one and then send it. + * If the user has not yet set up their account, it will send a setup email to the user. + * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + * Password reset URLs will expire in 60 minutes. + * This method can be called with an empty body. * - * If the caller is an admin or the caller is the user being specified, then full user information will - * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains - * The user name and avatar url, but no sensitive information. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/{user_id} -> IUser + * POST /users/{user_id}/credentials_email/send_password_reset -> ICredentialsEmail * * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async user( + async send_user_credentials_email_password_reset( user_id: string, fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.get( - `/users/${user_id}`, + return this.post( + `/users/${user_id}/credentials_email/send_password_reset`, { fields }, null, options @@ -12920,61 +13196,45 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Update information about the user with a specific id. + * ### Google authentication login information for the specified user. * - * PATCH /users/{user_id} -> IUser + * GET /users/{user_id}/credentials_google -> ICredentialsGoogle * * @param user_id Id of user - * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - async update_user( + async user_credentials_google( user_id: string, - body: Partial, fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.patch( - `/users/${user_id}`, + return this.get( + `/users/${user_id}/credentials_google`, { fields }, - body, + null, options ); } /** - * ### Delete the user with a specific id. - * - * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. + * ### Delete Google authentication login information for the specified user. * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the users or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. - * - * The user cannot delete themselves. - * The last administrator user cannot be deleted. - * - * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - * Please use the dedicated `delete_service_account` endpoint. - * - * DELETE /users/{user_id} -> string + * DELETE /users/{user_id}/credentials_google -> string * * @param user_id Id of user * @param options one-time API call overrides * */ - async delete_user( + async delete_user_credentials_google( user_id: string, options?: Partial ): Promise> { user_id = encodeParam(user_id); return this.delete( - `/users/${user_id}`, + `/users/${user_id}/credentials_google`, null, null, options @@ -12982,55 +13242,25 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Get information about the user with a credential of given type with specific id. - * - * This is used to do things like find users by their embed external_user_id. Or, find the user with - * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - * for the user and is specific to each type of credential. - * - * An example using the Ruby sdk might look like: - * - * `sdk.user_for_credential('embed', 'customer-4959425')` - * - * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - * which field in the given credential type is actually searched when finding a user with the supplied - * 'credential_id'. - * - * | Credential Types | Id Field Matched | - * | ---------------- | ---------------- | - * | email | email | - * | google | google_user_id | - * | saml | saml_user_id | - * | oidc | oidc_user_id | - * | ldap | ldap_id | - * | api | token | - * | api3 | client_id | - * | embed | external_user_id | - * | looker_openid | email | - * - * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/credential/{credential_type}/{credential_id} -> IUser + * GET /users/{user_id}/credentials_looker_openid -> ICredentialsLookerOpenid * - * @param credential_type Type name of credential - * @param credential_id Id of credential + * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_for_credential( - credential_type: string, - credential_id: string, + async user_credentials_looker_openid( + user_id: string, fields?: string, options?: Partial - ): Promise> { - credential_type = encodeParam(credential_type); - credential_id = encodeParam(credential_id); - return this.get( - `/users/credential/${credential_type}/${credential_id}`, + ): Promise> { + user_id = encodeParam(user_id); + return this.get( + `/users/${user_id}/credentials_looker_openid`, { fields }, null, options @@ -13038,59 +13268,69 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Update information for a specific service account. This action is restricted to Looker admins. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * PATCH /users/service_accounts/{user_id} -> IServiceAccount + * DELETE /users/{user_id}/credentials_looker_openid -> string * - * @param user_id Id of service account - * @param body Partial - * @param fields Requested fields. + * @param user_id Id of user * @param options one-time API call overrides * */ - async update_service_account( + async delete_user_credentials_looker_openid( user_id: string, - body: Partial, - fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.patch( - `/users/service_accounts/${user_id}`, - { fields }, - body, + return this.delete( + `/users/${user_id}/credentials_looker_openid`, + null, + null, options ); } /** - * ### Delete the service account with a specific id. + * ### Saml authentication login information for the specified user. * - * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. + * GET /users/{user_id}/credentials_saml -> ICredentialsSaml * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the service account or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. + * @param user_id Id of user + * @param fields Requested fields. + * @param options one-time API call overrides * - * The service account cannot delete itself. + */ + async user_credentials_saml( + user_id: string, + fields?: string, + options?: Partial + ): Promise> { + user_id = encodeParam(user_id); + return this.get( + `/users/${user_id}/credentials_saml`, + { fields }, + null, + options + ); + } + + /** + * ### Delete Saml authentication login information for the specified user. * - * DELETE /users/service_accounts/{user_id} -> string + * DELETE /users/{user_id}/credentials_saml -> string * - * @param user_id Id of service account user + * @param user_id Id of user * @param options one-time API call overrides * */ - async delete_service_account( + async delete_user_credentials_saml( user_id: string, options?: Partial ): Promise> { user_id = encodeParam(user_id); return this.delete( - `/users/service_accounts/${user_id}`, + `/users/${user_id}/credentials_saml`, null, null, options @@ -13098,25 +13338,25 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Email/password login information for the specified user. + * ### Get two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/{user_id}/credentials_email -> ICredentialsEmail + * GET /users/{user_id}/credentials_totp -> ICredentialsTotp * * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_credentials_email( + async user_credentials_totp( user_id: string, fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.get( - `/users/${user_id}/credentials_email`, + return this.get( + `/users/${user_id}/credentials_totp`, { fields }, null, options @@ -13124,27 +13364,27 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Email/password login information for the specified user. + * ### Create two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * POST /users/{user_id}/credentials_email -> ICredentialsEmail + * POST /users/{user_id}/credentials_totp -> ICredentialsTotp * * @param user_id Id of user - * @param body Partial + * @param body WARNING: no writeable properties found for POST, PUT, or PATCH * @param fields Requested fields. * @param options one-time API call overrides * */ - async create_user_credentials_email( + async create_user_credentials_totp( user_id: string, - body: Partial, + body?: Partial, fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.post( - `/users/${user_id}/credentials_email`, + return this.post( + `/users/${user_id}/credentials_totp`, { fields }, body, options @@ -13152,27 +13392,91 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Email/password login information for the specified user. + * ### Delete two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * PATCH /users/{user_id}/credentials_email -> ICredentialsEmail + * DELETE /users/{user_id}/credentials_totp -> string * * @param user_id Id of user - * @param body Partial - * @param fields Requested fields. * @param options one-time API call overrides * */ - async update_user_credentials_email( + async delete_user_credentials_totp( user_id: string, - body: Partial, - fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.patch( - `/users/${user_id}/credentials_email`, + return this.delete( + `/users/${user_id}/credentials_totp`, + null, + null, + options + ); + } + + /** + * ### Get information about the current user; i.e. the user account currently calling the API. + * + * GET /user -> IUser + * + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ + async me( + fields?: string, + options?: Partial + ): Promise> { + return this.get('/user', { fields }, null, options); + } + + /** + * ### Get information about all users. + * + * GET /users -> IUser[] + * + * @param request composed interface "IRequestAllUsers" for complex method parameters + * @param options one-time API call overrides + * + */ + async all_users( + request: IRequestAllUsers, + options?: Partial + ): Promise> { + return this.get( + '/users', + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + ids: request.ids, + }, + null, + options + ); + } + + /** + * ### Create a user with the specified information. + * + * POST /users -> IUser + * + * @param body Partial + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ + async create_user( + body?: Partial, + fields?: string, + options?: Partial + ): Promise> { + return this.post( + '/users', { fields }, body, options @@ -13180,49 +13484,137 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Email/password login information for the specified user. + * ### Search users * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all* user records that match the given search criteria. * - * DELETE /users/{user_id}/credentials_email -> string + * If multiple search params are given and `filter_or` is FALSE or not specified, + * search params are combined in a logical AND operation. + * Only rows that match *all* search param criteria will be returned. * - * @param user_id Id of user + * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. + * Results will include rows that match **any** of the search criteria. + * + * String search params use case-insensitive matching. + * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. + * example="dan%" will match "danger" and "Danzig" but not "David" + * example="D_m%" will match "Damage" and "dump" + * + * Integer search params can accept a single value or a comma separated list of values. The multiple + * values will be combined under a logical OR operation - results will match at least one of + * the given values. + * + * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match + * or exclude (respectively) rows where the column is null. + * + * Boolean search params accept only "true" and "false" as values. + * + * + * (*) Results are always filtered to the level of information the caller is permitted to view. + * Looker admins can see all user details; normal users in an open system can see + * names of other users but no details; normal users in a closed system can only see + * names of other users who are members of the same group as the user. + * + * GET /users/search -> IUser[] + * + * @param request composed interface "IRequestSearchUsers" for complex method parameters * @param options one-time API call overrides * */ - async delete_user_credentials_email( - user_id: string, + async search_users( + request: IRequestSearchUsers, options?: Partial - ): Promise> { - user_id = encodeParam(user_id); - return this.delete( - `/users/${user_id}/credentials_email`, + ): Promise> { + return this.get( + '/users/search', + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + id: request.id, + first_name: request.first_name, + last_name: request.last_name, + full_name: request.full_name, + verified_looker_employee: request.verified_looker_employee, + embed_user: request.embed_user, + email: request.email, + is_disabled: request.is_disabled, + filter_or: request.filter_or, + content_metadata_id: request.content_metadata_id, + group_id: request.group_id, + can_manage_api3_creds: request.can_manage_api3_creds, + is_service_account: request.is_service_account, + }, null, + options + ); + } + + /** + * ### Search for user accounts by name + * + * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. + * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. + * + * Any additional search params will be combined into a logical AND expression. + * + * GET /users/search/names/{pattern} -> IUser[] + * + * @param request composed interface "IRequestSearchUsersNames" for complex method parameters + * @param options one-time API call overrides + * + */ + async search_users_names( + request: IRequestSearchUsersNames, + options?: Partial + ): Promise> { + request.pattern = encodeParam(request.pattern); + return this.get( + `/users/search/names/${request.pattern}`, + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + id: request.id, + first_name: request.first_name, + last_name: request.last_name, + verified_looker_employee: request.verified_looker_employee, + email: request.email, + is_disabled: request.is_disabled, + }, null, options ); } /** - * ### Two-factor login information for the specified user. + * ### Get information about the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * If the caller is an admin or the caller is the user being specified, then full user information will + * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains + * The user name and avatar url, but no sensitive information. * - * GET /users/{user_id}/credentials_totp -> ICredentialsTotp + * GET /users/{user_id} -> IUser * * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_credentials_totp( + async user( user_id: string, fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.get( - `/users/${user_id}/credentials_totp`, + return this.get( + `/users/${user_id}`, { fields }, null, options @@ -13230,27 +13622,25 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Update information about the user with a specific id. * - * POST /users/{user_id}/credentials_totp -> ICredentialsTotp + * PATCH /users/{user_id} -> IUser * * @param user_id Id of user - * @param body WARNING: no writeable properties found for POST, PUT, or PATCH + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - async create_user_credentials_totp( + async update_user( user_id: string, - body?: Partial, + body: Partial, fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.post( - `/users/${user_id}/credentials_totp`, + return this.patch( + `/users/${user_id}`, { fields }, body, options @@ -13258,23 +13648,35 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Two-factor login information for the specified user. + * ### Delete the user with a specific id. + * + * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. + * + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the users or that use their content will be deleted. + * * Alerts owned by the users will be deleted. + * + * The user cannot delete themselves. + * The last administrator user cannot be deleted. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + * Please use the dedicated `delete_service_account` endpoint. * - * DELETE /users/{user_id}/credentials_totp -> string + * DELETE /users/{user_id} -> string * * @param user_id Id of user * @param options one-time API call overrides * */ - async delete_user_credentials_totp( + async delete_user( user_id: string, options?: Partial ): Promise> { user_id = encodeParam(user_id); return this.delete( - `/users/${user_id}/credentials_totp`, + `/users/${user_id}`, null, null, options @@ -13282,95 +13684,115 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### LDAP login information for the specified user. + * ### Get information about the user with a credential of given type with specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * This is used to do things like find users by their embed external_user_id. Or, find the user with + * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + * for the user and is specific to each type of credential. * - * GET /users/{user_id}/credentials_ldap -> ICredentialsLDAP + * An example using the Ruby sdk might look like: * - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides + * `sdk.user_for_credential('embed', 'customer-4959425')` * - */ - async user_credentials_ldap( - user_id: string, - fields?: string, - options?: Partial - ): Promise> { - user_id = encodeParam(user_id); - return this.get( - `/users/${user_id}/credentials_ldap`, - { fields }, - null, - options - ); - } - - /** - * ### LDAP login information for the specified user. + * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + * which field in the given credential type is actually searched when finding a user with the supplied + * 'credential_id'. + * + * | Credential Types | Id Field Matched | + * | ---------------- | ---------------- | + * | email | email | + * | google | google_user_id | + * | saml | saml_user_id | + * | oidc | oidc_user_id | + * | ldap | ldap_id | + * | api | token | + * | api3 | client_id | + * | embed | external_user_id | + * | looker_openid | email | + * + * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * DELETE /users/{user_id}/credentials_ldap -> string + * GET /users/credential/{credential_type}/{credential_id} -> IUser * - * @param user_id Id of user + * @param credential_type Type name of credential + * @param credential_id Id of credential + * @param fields Requested fields. * @param options one-time API call overrides * */ - async delete_user_credentials_ldap( - user_id: string, + async user_for_credential( + credential_type: string, + credential_id: string, + fields?: string, options?: Partial - ): Promise> { - user_id = encodeParam(user_id); - return this.delete( - `/users/${user_id}/credentials_ldap`, - null, + ): Promise> { + credential_type = encodeParam(credential_type); + credential_id = encodeParam(credential_id); + return this.get( + `/users/credential/${credential_type}/${credential_id}`, + { fields }, null, options ); } /** - * ### Google authentication login information for the specified user. + * ### Update information for a specific service account. This action is restricted to Looker admins. * - * GET /users/{user_id}/credentials_google -> ICredentialsGoogle + * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. * - * @param user_id Id of user + * PATCH /users/service_accounts/{user_id} -> IServiceAccount + * + * @param user_id Id of service account + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_credentials_google( + async update_service_account( user_id: string, + body: Partial, fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.get( - `/users/${user_id}/credentials_google`, + return this.patch( + `/users/service_accounts/${user_id}`, { fields }, - null, + body, options ); } /** - * ### Google authentication login information for the specified user. + * ### Delete the service account with a specific id. * - * DELETE /users/{user_id}/credentials_google -> string + * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. * - * @param user_id Id of user + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the service account or that use their content will be deleted. + * * Alerts owned by the service account will be deleted. + * + * The service account cannot delete itself. + * + * DELETE /users/service_accounts/{user_id} -> string + * + * @param user_id Id of service account user * @param options one-time API call overrides * */ - async delete_user_credentials_google( + async delete_service_account( user_id: string, options?: Partial ): Promise> { user_id = encodeParam(user_id); return this.delete( - `/users/${user_id}/credentials_google`, + `/users/service_accounts/${user_id}`, null, null, options @@ -13378,23 +13800,25 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * GET /users/{user_id}/credentials_saml -> ICredentialsSaml + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_ldap -> ICredentialsLDAP * * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_credentials_saml( + async user_credentials_ldap( user_id: string, fields?: string, options?: Partial - ): Promise> { + ): Promise> { user_id = encodeParam(user_id); - return this.get( - `/users/${user_id}/credentials_saml`, + return this.get( + `/users/${user_id}/credentials_ldap`, { fields }, null, options @@ -13402,21 +13826,23 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * DELETE /users/{user_id}/credentials_saml -> string + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_ldap -> string * * @param user_id Id of user * @param options one-time API call overrides * */ - async delete_user_credentials_saml( + async delete_user_credentials_ldap( user_id: string, options?: Partial ): Promise> { user_id = encodeParam(user_id); return this.delete( - `/users/${user_id}/credentials_saml`, + `/users/${user_id}/credentials_ldap`, null, null, options @@ -13680,56 +14106,6 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * GET /users/{user_id}/credentials_looker_openid -> ICredentialsLookerOpenid - * - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides - * - */ - async user_credentials_looker_openid( - user_id: string, - fields?: string, - options?: Partial - ): Promise> { - user_id = encodeParam(user_id); - return this.get( - `/users/${user_id}/credentials_looker_openid`, - { fields }, - null, - options - ); - } - - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * DELETE /users/{user_id}/credentials_looker_openid -> string - * - * @param user_id Id of user - * @param options one-time API call overrides - * - */ - async delete_user_credentials_looker_openid( - user_id: string, - options?: Partial - ): Promise> { - user_id = encodeParam(user_id); - return this.delete( - `/users/${user_id}/credentials_looker_openid`, - null, - null, - options - ); - } - /** * ### Web login session for the specified user. * @@ -13806,38 +14182,6 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } - /** - * ### Create a password reset token. - * This will create a cryptographically secure random password reset token for the user. - * If the user already has a password reset token then this invalidates the old token and creates a new one. - * The token is expressed as the 'password_reset_url' of the user's email/password credential object. - * This takes an optional 'expires' param to indicate if the new token should be an expiring token. - * Tokens that expire are typically used for self-service password resets for existing users. - * Invitation emails for new users typically are not set to expire. - * The expire period is always 60 minutes when expires is enabled. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/password_reset -> ICredentialsEmail - * - * @param request composed interface "IRequestCreateUserCredentialsEmailPasswordReset" for complex method parameters - * @param options one-time API call overrides - * - */ - async create_user_credentials_email_password_reset( - request: IRequestCreateUserCredentialsEmailPasswordReset, - options?: Partial - ): Promise> { - request.user_id = encodeParam(request.user_id); - return this.post( - `/users/${request.user_id}/credentials_email/password_reset`, - { expires: request.expires, fields: request.fields }, - null, - options - ); - } - /** * ### Get information about roles of a given user * @@ -13990,38 +14334,6 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } - /** - * ### Send a password reset token. - * This will send a password reset email to the user. If a password reset token does not already exist - * for this user, it will create one and then send it. - * If the user has not yet set up their account, it will send a setup email to the user. - * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - * Password reset URLs will expire in 60 minutes. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/send_password_reset -> ICredentialsEmail - * - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides - * - */ - async send_user_credentials_email_password_reset( - user_id: string, - fields?: string, - options?: Partial - ): Promise> { - user_id = encodeParam(user_id); - return this.post( - `/users/${user_id}/credentials_email/send_password_reset`, - { fields }, - null, - options - ); - } - /** * ### Change a disabled user's email addresses * diff --git a/packages/sdk/src/4.0/methodsInterface.ts b/packages/sdk/src/4.0/methodsInterface.ts index 1efbea712..1478312b5 100644 --- a/packages/sdk/src/4.0/methodsInterface.ts +++ b/packages/sdk/src/4.0/methodsInterface.ts @@ -25,7 +25,7 @@ */ /** - * 518 API methods + * 529 API methods */ import type { @@ -42,6 +42,7 @@ import type { import type { IAccessToken, IAgent, + IAgentLookml, IAlert, IAlertNotifications, IAlertPatch, @@ -72,8 +73,6 @@ import type { IConversationalAnalyticsChatRequest, IConversationMessage, ICostEstimate, - ICreateCIRunRequest, - ICreateCIRunResponse, ICreateContinuousIntegrationRunRequest, ICreateCostEstimate, ICreateCredentialsApi3, @@ -127,7 +126,6 @@ import type { IGitBranch, IGitConnectionTest, IGitConnectionTestResult, - IGitDiagnosticReport, IGoldenQuery, IGroup, IGroupHierarchy, @@ -168,8 +166,8 @@ import type { IPermission, IPermissionSet, IProject, + IProjectCISuite, IProjectFile, - IProjectRun, IProjectValidation, IProjectValidationCache, IProjectWorkspace, @@ -208,6 +206,7 @@ import type { IRequestDeployRefToProduction, IRequestFolderChildren, IRequestFolderChildrenSearch, + IRequestGetContinuousIntegrationSuites, IRequestGraphDerivedTablesForModel, IRequestGraphDerivedTablesForView, IRequestLogin, @@ -229,6 +228,7 @@ import type { IRequestSearchContent, IRequestSearchContentFavorites, IRequestSearchContentViews, + IRequestSearchContinuousIntegrationRuns, IRequestSearchConversations, IRequestSearchCredentialsEmail, IRequestSearchDashboardElements, @@ -288,6 +288,7 @@ import type { IUserAttribute, IUserAttributeGroupValue, IUserAttributeWithValue, + IUserDbConnection, IUserEmailOnly, IUserLoginLockout, IUserPublic, @@ -323,7 +324,6 @@ import type { IWriteEmbedSecret, IWriteExternalOauthApplication, IWriteGitBranch, - IWriteGitDiagnosticReport, IWriteGoldenQuery, IWriteGroup, IWriteIntegration, @@ -342,6 +342,7 @@ import type { IWritePasswordConfig, IWritePermissionSet, IWriteProject, + IWriteProjectCISuite, IWriteQuery, IWriteRepositoryCredential, IWriteRole, @@ -357,6 +358,7 @@ import type { IWriteUser, IWriteUserAttribute, IWriteUserAttributeWithValue, + IWriteUserDbConnection, IWriteWhitelabelConfiguration, } from './models'; @@ -2660,6 +2662,7 @@ export interface ILooker40SDK extends IAPIMethods { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -2704,6 +2707,7 @@ export interface ILooker40SDK extends IAPIMethods { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -3262,6 +3266,56 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Get All User DB Connections + * + * Returns a list of user DB connections. + * + * GET /user_db_connections -> IUserDbConnection[] + * + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ + all_user_db_connections( + fields?: string, + options?: Partial + ): Promise>; + + /** + * ### Update User DB Connection + * + * Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + * + * PATCH /user_db_connections/{user_db_connection_id} -> IUserDbConnection + * + * @param user_db_connection_id Id of user DB connection + * @param body Partial + * @param options one-time API call overrides + * + */ + update_user_db_connection( + user_db_connection_id: string, + body: Partial, + options?: Partial + ): Promise>; + + /** + * ### Delete User DB Connection + * + * Deletes an existing user DB connection. + * + * DELETE /user_db_connections/{user_db_connection_id} -> void + * + * @param user_db_connection_id Id of user DB connection + * @param options one-time API call overrides + * + */ + delete_user_db_connection( + user_db_connection_id: string, + options?: Partial + ): Promise>; + //#endregion Connection: Manage Database Connections //#region Content: Manage Content @@ -3690,6 +3744,22 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Get LookML of a UDD Agent + * + * Returns the LookML representation of a user-defined (UDD) agent. + * + * GET /agents/lookml/{agent_id} -> IAgentLookml + * + * @param agent_id Id of agent + * @param options one-time API call overrides + * + */ + agent_lookml( + agent_id: string, + options?: Partial + ): Promise>; + /** * ### Get All Conversation Messages * @@ -3794,6 +3864,30 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Get Agent Responses for User Message + * + * Get all agent response messages generated for a specific user prompt. + * + * An agent response often consists of multiple message blocks (such as text explanations, + * visualizations, and follow-up suggestions). This endpoint returns all response messages + * following the specified user message up to the next user prompt. + * + * GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> IConversationMessage[] + * + * @param conversation_id Conversation ID + * @param user_message_id User Conversation Message ID + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + get_conversation_message_responses( + conversation_id: string, + user_message_id: string, + fields?: string, + options?: Partial + ): Promise>; + /** * ### Search Conversations * @@ -4171,6 +4265,27 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Get Dashboard Image + * + * Returns the image content for a dashboard element. + * + * GET /dashboards/{dashboard_id}/images/{image_slug} -> string + * + * @remarks + * **NOTE**: Binary content may be returned by this function. + * + * @param dashboard_id Id of dashboard + * @param image_slug Slug of image + * @param options one-time API call overrides + * + */ + get_dashboard_image( + dashboard_id: string, + image_slug: string, + options?: Partial + ): Promise>; + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -4215,6 +4330,8 @@ export interface ILooker40SDK extends IAPIMethods { * Boolean search params accept only "true" and "false" as values. * * + * **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + * * The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. * * Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -4258,12 +4375,14 @@ export interface ILooker40SDK extends IAPIMethods { * * @param dashboard_id Dashboard id to move. * @param folder_id Folder id to move to. + * @param project_name LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. * @param options one-time API call overrides * */ move_dashboard( dashboard_id: string, folder_id: string, + project_name?: string, options?: Partial ): Promise>; @@ -5812,6 +5931,8 @@ export interface ILooker40SDK extends IAPIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /looks/{look_id}/run/{result_format} -> string * * @remarks @@ -6157,48 +6278,108 @@ export interface ILooker40SDK extends IAPIMethods { //#region Project: Manage Projects /** - * ### Fetches a CI Run. + * ### Search Continuous Integration Runs for a project. * - * This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + * Returns an array of Continuous Integration Run objects that match the specified search criteria. * - * GET /projects/{project_id}/ci/runs/{run_id} -> IProjectRun + * GET /projects/{project_id}/continuous_integration/runs/search -> ICIRun[] * - * @deprecated + * @param request composed interface "IRequestSearchContinuousIntegrationRuns" for complex method parameters + * @param options one-time API call overrides + * + */ + search_continuous_integration_runs( + request: IRequestSearchContinuousIntegrationRuns, + options?: Partial + ): Promise>; + + /** + * ### Fetches Multiple CI Suite Configurations for Project. + * + * GET /projects/{project_id}/continuous_integration/suites -> IProjectCISuite[] + * + * @param request composed interface "IRequestGetContinuousIntegrationSuites" for complex method parameters + * @param options one-time API call overrides + * + */ + get_continuous_integration_suites( + request: IRequestGetContinuousIntegrationSuites, + options?: Partial + ): Promise>; + + /** + * ### Fetches a CI Suite Configuration. + * + * POST /projects/{project_id}/continuous_integration/suites -> IProjectCISuite * * @param project_id Project Id - * @param run_id Run Id + * @param body Partial * @param fields Requested fields * @param options one-time API call overrides * */ - get_ci_run( + create_continuous_integration_suite( project_id: string, - run_id: string, + body: Partial, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Creates a CI Run. + * ### Fetches a CI Suite Configuration. * - * This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + * GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> IProjectCISuite * - * POST /projects/{project_id}/ci/run -> ICreateCIRunResponse + * @param project_id Project Id + * @param suite_id Suite Id + * @param fields Requested fields + * @param options one-time API call overrides * - * @deprecated + */ + get_continuous_integration_suite( + project_id: string, + suite_id: string, + fields?: string, + options?: Partial + ): Promise>; + + /** + * ### Updates a Continuous Integration Suite. + * + * PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> IProjectCISuite + * + * @param project_id Project Id + * @param suite_id Suite Id + * @param body Partial + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + update_continuous_integration_suite( + project_id: string, + suite_id: string, + body: Partial, + fields?: string, + options?: Partial + ): Promise>; + + /** + * ### Deletes a Continuous Integration Suite. + * + * DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> string * * @param project_id Project Id - * @param body Partial + * @param suite_id Suite Id * @param fields Requested fields * @param options one-time API call overrides * */ - create_ci_run( + delete_continuous_integration_suite( project_id: string, - body: Partial, + suite_id: string, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** * ### Creates and queues a Continuous Integration Run. @@ -6218,6 +6399,24 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Duplicates and queues a Continuous Integration Run. + * + * POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> ICIRun + * + * @param project_id Project Id + * @param run_id Run ID to duplicate and re-run + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + duplicate_continuous_integration_run( + project_id: string, + run_id: string, + fields?: string, + options?: Partial + ): Promise>; + /** * ### Gets a Continuous Integration run. * @@ -6236,6 +6435,22 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Cancels a Continuous Integration Run. + * + * DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> string + * + * @param project_id Project Id + * @param run_id Run Id + * @param options one-time API call overrides + * + */ + cancel_continuous_integration_run( + project_id: string, + run_id: string, + options?: Partial + ): Promise>; + /** * ### Generate Lockfile for All LookML Dependencies * @@ -6488,6 +6703,36 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Pull from Production + * Pulls changes from the remote production branch into the current development workspace. + * + * POST /projects/{project_id}/pull_from_production -> string + * + * @param project_id Id of project + * @param options one-time API call overrides + * + */ + pull_project_from_production( + project_id: string, + options?: Partial + ): Promise>; + + /** + * ### Pull from Remote + * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + * + * POST /projects/{project_id}/pull_from_remote -> string + * + * @param project_id Id of project + * @param options one-time API call overrides + * + */ + pull_project_from_remote( + project_id: string, + options?: Partial + ): Promise>; + /** * ### Get All Projects * @@ -6838,56 +7083,6 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; - /** - * ### Initiate Git Diagnosis Suite - * - * POST /projects/{project_id}/git_diagnostic_report -> IGitDiagnosticReport - * - * @param project_id Looker Project ID - * @param body Partial - * @param options one-time API call overrides - * - */ - create_git_diagnostic_report( - project_id: string, - body: Partial, - options?: Partial - ): Promise>; - - /** - * ### Retrieve Live Git Diagnostic Suite Execution Status - * - * GET /projects/{project_id}/git_diagnostic_report/{report_id} -> IGitDiagnosticReport - * - * @param project_id Looker Project ID - * @param report_id Report ID - * @param options one-time API call overrides - * - */ - get_git_diagnostic_report( - project_id: string, - report_id: string, - options?: Partial - ): Promise>; - - /** - * ### Repair Git Configuration Issues - * - * POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> IGitDiagnosticReport - * - * @param project_id Looker Project ID - * @param report_id Report ID - * @param body Partial - * @param options one-time API call overrides - * - */ - repair_git_diagnostic_report( - project_id: string, - report_id: string, - body: Partial, - options?: Partial - ): Promise>; - /** * ### Configure Repository Credential for a remote dependency * @@ -6960,6 +7155,8 @@ export interface ILooker40SDK extends IAPIMethods { * Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. * After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /query_tasks -> IQueryTask * * @param request composed interface "IRequestCreateQueryTask" for complex method parameters @@ -7160,6 +7357,8 @@ export interface ILooker40SDK extends IAPIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/{query_id}/run/{result_format} -> string * * @remarks @@ -7227,6 +7426,8 @@ export interface ILooker40SDK extends IAPIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /queries/run/{result_format} -> string * * @remarks @@ -7296,6 +7497,8 @@ export interface ILooker40SDK extends IAPIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> string * * @remarks @@ -7715,7 +7918,7 @@ export interface ILooker40SDK extends IAPIMethods { delete_model_set( model_set_id: string, options?: Partial - ): Promise>; + ): Promise>; /** * ### Get information about all model sets. @@ -7837,7 +8040,7 @@ export interface ILooker40SDK extends IAPIMethods { delete_permission_set( permission_set_id: string, options?: Partial - ): Promise>; + ): Promise>; /** * ### Get information about all permission sets. @@ -9037,486 +9240,568 @@ export interface ILooker40SDK extends IAPIMethods { ): Promise>; /** - * ### Get information about the current user; i.e. the user account currently calling the API. + * ### Email/password login information for the specified user. * - * GET /user -> IUser + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_email -> ICredentialsEmail * + * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - me( + user_credentials_email( + user_id: string, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Get information about all users. + * ### Email/password login information for the specified user. * - * GET /users -> IUser[] + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * @param request composed interface "IRequestAllUsers" for complex method parameters + * POST /users/{user_id}/credentials_email -> ICredentialsEmail + * + * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. * @param options one-time API call overrides * */ - all_users( - request: IRequestAllUsers, + create_user_credentials_email( + user_id: string, + body: Partial, + fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Create a user with the specified information. + * ### Email/password login information for the specified user. * - * POST /users -> IUser + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * @param body Partial + * PATCH /users/{user_id}/credentials_email -> ICredentialsEmail + * + * @param user_id Id of user + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - create_user( - body?: Partial, + update_user_credentials_email( + user_id: string, + body: Partial, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Search users + * ### Email/password login information for the specified user. * - * Returns all* user records that match the given search criteria. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * If multiple search params are given and `filter_or` is FALSE or not specified, - * search params are combined in a logical AND operation. - * Only rows that match *all* search param criteria will be returned. + * DELETE /users/{user_id}/credentials_email -> string * - * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - * Results will include rows that match **any** of the search criteria. - * - * String search params use case-insensitive matching. - * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - * example="dan%" will match "danger" and "Danzig" but not "David" - * example="D_m%" will match "Damage" and "dump" - * - * Integer search params can accept a single value or a comma separated list of values. The multiple - * values will be combined under a logical OR operation - results will match at least one of - * the given values. - * - * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - * or exclude (respectively) rows where the column is null. - * - * Boolean search params accept only "true" and "false" as values. + * @param user_id Id of user + * @param options one-time API call overrides * + */ + delete_user_credentials_email( + user_id: string, + options?: Partial + ): Promise>; + + /** + * ### Create a password reset token. + * This will create a cryptographically secure random password reset token for the user. + * If the user already has a password reset token then this invalidates the old token and creates a new one. + * The token is expressed as the 'password_reset_url' of the user's email/password credential object. + * This takes an optional 'expires' param to indicate if the new token should be an expiring token. + * Tokens that expire are typically used for self-service password resets for existing users. + * Invitation emails for new users typically are not set to expire. + * The expire period is always 60 minutes when expires is enabled. + * This method can be called with an empty body. * - * (*) Results are always filtered to the level of information the caller is permitted to view. - * Looker admins can see all user details; normal users in an open system can see - * names of other users but no details; normal users in a closed system can only see - * names of other users who are members of the same group as the user. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/search -> IUser[] + * POST /users/{user_id}/credentials_email/password_reset -> ICredentialsEmail * - * @param request composed interface "IRequestSearchUsers" for complex method parameters + * @param request composed interface "IRequestCreateUserCredentialsEmailPasswordReset" for complex method parameters * @param options one-time API call overrides * */ - search_users( - request: IRequestSearchUsers, + create_user_credentials_email_password_reset( + request: IRequestCreateUserCredentialsEmailPasswordReset, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Search for user accounts by name - * - * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. - * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. + * ### Send a password reset token. + * This will send a password reset email to the user. If a password reset token does not already exist + * for this user, it will create one and then send it. + * If the user has not yet set up their account, it will send a setup email to the user. + * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + * Password reset URLs will expire in 60 minutes. + * This method can be called with an empty body. * - * Any additional search params will be combined into a logical AND expression. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/search/names/{pattern} -> IUser[] + * POST /users/{user_id}/credentials_email/send_password_reset -> ICredentialsEmail * - * @param request composed interface "IRequestSearchUsersNames" for complex method parameters + * @param user_id Id of user + * @param fields Requested fields. * @param options one-time API call overrides * */ - search_users_names( - request: IRequestSearchUsersNames, + send_user_credentials_email_password_reset( + user_id: string, + fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Get information about the user with a specific id. - * - * If the caller is an admin or the caller is the user being specified, then full user information will - * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains - * The user name and avatar url, but no sensitive information. + * ### Google authentication login information for the specified user. * - * GET /users/{user_id} -> IUser + * GET /users/{user_id}/credentials_google -> ICredentialsGoogle * * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - user( + user_credentials_google( user_id: string, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Update information about the user with a specific id. + * ### Delete Google authentication login information for the specified user. * - * PATCH /users/{user_id} -> IUser + * DELETE /users/{user_id}/credentials_google -> string * * @param user_id Id of user - * @param body Partial - * @param fields Requested fields. * @param options one-time API call overrides * */ - update_user( + delete_user_credentials_google( user_id: string, - body: Partial, - fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Delete the user with a specific id. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the users or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. + * GET /users/{user_id}/credentials_looker_openid -> ICredentialsLookerOpenid * - * The user cannot delete themselves. - * The last administrator user cannot be deleted. + * @param user_id Id of user + * @param fields Requested fields. + * @param options one-time API call overrides * - * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - * Please use the dedicated `delete_service_account` endpoint. + */ + user_credentials_looker_openid( + user_id: string, + fields?: string, + options?: Partial + ): Promise>; + + /** + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * DELETE /users/{user_id} -> string + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_looker_openid -> string * * @param user_id Id of user * @param options one-time API call overrides * */ - delete_user( + delete_user_credentials_looker_openid( user_id: string, options?: Partial ): Promise>; /** - * ### Get information about the user with a credential of given type with specific id. + * ### Saml authentication login information for the specified user. * - * This is used to do things like find users by their embed external_user_id. Or, find the user with - * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - * for the user and is specific to each type of credential. + * GET /users/{user_id}/credentials_saml -> ICredentialsSaml * - * An example using the Ruby sdk might look like: + * @param user_id Id of user + * @param fields Requested fields. + * @param options one-time API call overrides * - * `sdk.user_for_credential('embed', 'customer-4959425')` + */ + user_credentials_saml( + user_id: string, + fields?: string, + options?: Partial + ): Promise>; + + /** + * ### Delete Saml authentication login information for the specified user. * - * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - * which field in the given credential type is actually searched when finding a user with the supplied - * 'credential_id'. + * DELETE /users/{user_id}/credentials_saml -> string * - * | Credential Types | Id Field Matched | - * | ---------------- | ---------------- | - * | email | email | - * | google | google_user_id | - * | saml | saml_user_id | - * | oidc | oidc_user_id | - * | ldap | ldap_id | - * | api | token | - * | api3 | client_id | - * | embed | external_user_id | - * | looker_openid | email | + * @param user_id Id of user + * @param options one-time API call overrides * - * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. + */ + delete_user_credentials_saml( + user_id: string, + options?: Partial + ): Promise>; + + /** + * ### Get two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/credential/{credential_type}/{credential_id} -> IUser + * GET /users/{user_id}/credentials_totp -> ICredentialsTotp * - * @param credential_type Type name of credential - * @param credential_id Id of credential + * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - user_for_credential( - credential_type: string, - credential_id: string, + user_credentials_totp( + user_id: string, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Update information for a specific service account. This action is restricted to Looker admins. + * ### Create two-factor login information for the specified user. * - * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * PATCH /users/service_accounts/{user_id} -> IServiceAccount + * POST /users/{user_id}/credentials_totp -> ICredentialsTotp * - * @param user_id Id of service account - * @param body Partial + * @param user_id Id of user + * @param body WARNING: no writeable properties found for POST, PUT, or PATCH * @param fields Requested fields. * @param options one-time API call overrides * */ - update_service_account( + create_user_credentials_totp( user_id: string, - body: Partial, + body?: Partial, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Delete the service account with a specific id. - * - * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the service account or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. + * ### Delete two-factor login information for the specified user. * - * The service account cannot delete itself. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * DELETE /users/service_accounts/{user_id} -> string + * DELETE /users/{user_id}/credentials_totp -> string * - * @param user_id Id of service account user + * @param user_id Id of user * @param options one-time API call overrides * */ - delete_service_account( + delete_user_credentials_totp( user_id: string, options?: Partial ): Promise>; /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Get information about the current user; i.e. the user account currently calling the API. * - * GET /users/{user_id}/credentials_email -> ICredentialsEmail + * GET /user -> IUser * - * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - user_credentials_email( - user_id: string, + me( fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Email/password login information for the specified user. + * ### Get information about all users. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * GET /users -> IUser[] * - * POST /users/{user_id}/credentials_email -> ICredentialsEmail + * @param request composed interface "IRequestAllUsers" for complex method parameters + * @param options one-time API call overrides * - * @param user_id Id of user - * @param body Partial + */ + all_users( + request: IRequestAllUsers, + options?: Partial + ): Promise>; + + /** + * ### Create a user with the specified information. + * + * POST /users -> IUser + * + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - create_user_credentials_email( - user_id: string, - body: Partial, + create_user( + body?: Partial, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Email/password login information for the specified user. + * ### Search users * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all* user records that match the given search criteria. + * + * If multiple search params are given and `filter_or` is FALSE or not specified, + * search params are combined in a logical AND operation. + * Only rows that match *all* search param criteria will be returned. + * + * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. + * Results will include rows that match **any** of the search criteria. + * + * String search params use case-insensitive matching. + * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. + * example="dan%" will match "danger" and "Danzig" but not "David" + * example="D_m%" will match "Damage" and "dump" + * + * Integer search params can accept a single value or a comma separated list of values. The multiple + * values will be combined under a logical OR operation - results will match at least one of + * the given values. + * + * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match + * or exclude (respectively) rows where the column is null. + * + * Boolean search params accept only "true" and "false" as values. + * + * + * (*) Results are always filtered to the level of information the caller is permitted to view. + * Looker admins can see all user details; normal users in an open system can see + * names of other users but no details; normal users in a closed system can only see + * names of other users who are members of the same group as the user. * - * PATCH /users/{user_id}/credentials_email -> ICredentialsEmail + * GET /users/search -> IUser[] * - * @param user_id Id of user - * @param body Partial - * @param fields Requested fields. + * @param request composed interface "IRequestSearchUsers" for complex method parameters * @param options one-time API call overrides * */ - update_user_credentials_email( - user_id: string, - body: Partial, - fields?: string, + search_users( + request: IRequestSearchUsers, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Email/password login information for the specified user. + * ### Search for user accounts by name * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. + * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. * - * DELETE /users/{user_id}/credentials_email -> string + * Any additional search params will be combined into a logical AND expression. * - * @param user_id Id of user + * GET /users/search/names/{pattern} -> IUser[] + * + * @param request composed interface "IRequestSearchUsersNames" for complex method parameters * @param options one-time API call overrides * */ - delete_user_credentials_email( - user_id: string, + search_users_names( + request: IRequestSearchUsersNames, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Two-factor login information for the specified user. + * ### Get information about the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * If the caller is an admin or the caller is the user being specified, then full user information will + * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains + * The user name and avatar url, but no sensitive information. * - * GET /users/{user_id}/credentials_totp -> ICredentialsTotp + * GET /users/{user_id} -> IUser * * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - user_credentials_totp( + user( user_id: string, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Update information about the user with a specific id. * - * POST /users/{user_id}/credentials_totp -> ICredentialsTotp + * PATCH /users/{user_id} -> IUser * * @param user_id Id of user - * @param body WARNING: no writeable properties found for POST, PUT, or PATCH + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - create_user_credentials_totp( + update_user( user_id: string, - body?: Partial, + body: Partial, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Two-factor login information for the specified user. + * ### Delete the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. * - * DELETE /users/{user_id}/credentials_totp -> string + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the users or that use their content will be deleted. + * * Alerts owned by the users will be deleted. + * + * The user cannot delete themselves. + * The last administrator user cannot be deleted. + * + * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + * Please use the dedicated `delete_service_account` endpoint. + * + * DELETE /users/{user_id} -> string * * @param user_id Id of user * @param options one-time API call overrides * */ - delete_user_credentials_totp( + delete_user( user_id: string, options?: Partial ): Promise>; /** - * ### LDAP login information for the specified user. + * ### Get information about the user with a credential of given type with specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * This is used to do things like find users by their embed external_user_id. Or, find the user with + * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + * for the user and is specific to each type of credential. * - * GET /users/{user_id}/credentials_ldap -> ICredentialsLDAP + * An example using the Ruby sdk might look like: * - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides + * `sdk.user_for_credential('embed', 'customer-4959425')` * - */ - user_credentials_ldap( - user_id: string, - fields?: string, - options?: Partial - ): Promise>; - - /** - * ### LDAP login information for the specified user. + * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + * which field in the given credential type is actually searched when finding a user with the supplied + * 'credential_id'. + * + * | Credential Types | Id Field Matched | + * | ---------------- | ---------------- | + * | email | email | + * | google | google_user_id | + * | saml | saml_user_id | + * | oidc | oidc_user_id | + * | ldap | ldap_id | + * | api | token | + * | api3 | client_id | + * | embed | external_user_id | + * | looker_openid | email | + * + * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * DELETE /users/{user_id}/credentials_ldap -> string + * GET /users/credential/{credential_type}/{credential_id} -> IUser * - * @param user_id Id of user + * @param credential_type Type name of credential + * @param credential_id Id of credential + * @param fields Requested fields. * @param options one-time API call overrides * */ - delete_user_credentials_ldap( - user_id: string, + user_for_credential( + credential_type: string, + credential_id: string, + fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Google authentication login information for the specified user. + * ### Update information for a specific service account. This action is restricted to Looker admins. * - * GET /users/{user_id}/credentials_google -> ICredentialsGoogle + * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. * - * @param user_id Id of user + * PATCH /users/service_accounts/{user_id} -> IServiceAccount + * + * @param user_id Id of service account + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - user_credentials_google( + update_service_account( user_id: string, + body: Partial, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Google authentication login information for the specified user. + * ### Delete the service account with a specific id. * - * DELETE /users/{user_id}/credentials_google -> string + * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. * - * @param user_id Id of user + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the service account or that use their content will be deleted. + * * Alerts owned by the service account will be deleted. + * + * The service account cannot delete itself. + * + * DELETE /users/service_accounts/{user_id} -> string + * + * @param user_id Id of service account user * @param options one-time API call overrides * */ - delete_user_credentials_google( + delete_service_account( user_id: string, options?: Partial ): Promise>; /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * GET /users/{user_id}/credentials_saml -> ICredentialsSaml + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_ldap -> ICredentialsLDAP * * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - user_credentials_saml( + user_credentials_ldap( user_id: string, fields?: string, options?: Partial - ): Promise>; + ): Promise>; /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * DELETE /users/{user_id}/credentials_saml -> string + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_ldap -> string * * @param user_id Id of user * @param options one-time API call overrides * */ - delete_user_credentials_saml( + delete_user_credentials_ldap( user_id: string, options?: Partial ): Promise>; @@ -9693,40 +9978,6 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * GET /users/{user_id}/credentials_looker_openid -> ICredentialsLookerOpenid - * - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides - * - */ - user_credentials_looker_openid( - user_id: string, - fields?: string, - options?: Partial - ): Promise>; - - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * DELETE /users/{user_id}/credentials_looker_openid -> string - * - * @param user_id Id of user - * @param options one-time API call overrides - * - */ - delete_user_credentials_looker_openid( - user_id: string, - options?: Partial - ): Promise>; - /** * ### Web login session for the specified user. * @@ -9777,30 +10028,6 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; - /** - * ### Create a password reset token. - * This will create a cryptographically secure random password reset token for the user. - * If the user already has a password reset token then this invalidates the old token and creates a new one. - * The token is expressed as the 'password_reset_url' of the user's email/password credential object. - * This takes an optional 'expires' param to indicate if the new token should be an expiring token. - * Tokens that expire are typically used for self-service password resets for existing users. - * Invitation emails for new users typically are not set to expire. - * The expire period is always 60 minutes when expires is enabled. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/password_reset -> ICredentialsEmail - * - * @param request composed interface "IRequestCreateUserCredentialsEmailPasswordReset" for complex method parameters - * @param options one-time API call overrides - * - */ - create_user_credentials_email_password_reset( - request: IRequestCreateUserCredentialsEmailPasswordReset, - options?: Partial - ): Promise>; - /** * ### Get information about roles of a given user * @@ -9903,30 +10130,6 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; - /** - * ### Send a password reset token. - * This will send a password reset email to the user. If a password reset token does not already exist - * for this user, it will create one and then send it. - * If the user has not yet set up their account, it will send a setup email to the user. - * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - * Password reset URLs will expire in 60 minutes. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/send_password_reset -> ICredentialsEmail - * - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides - * - */ - send_user_credentials_email_password_reset( - user_id: string, - fields?: string, - options?: Partial - ): Promise>; - /** * ### Change a disabled user's email addresses * diff --git a/packages/sdk/src/4.0/models.ts b/packages/sdk/src/4.0/models.ts index f51927ab7..2ff826299 100644 --- a/packages/sdk/src/4.0/models.ts +++ b/packages/sdk/src/4.0/models.ts @@ -25,7 +25,7 @@ */ /** - * 537 API models: 363 Spec, 76 Request, 72 Write, 26 Enum + * 520 API models: 343 Spec, 78 Request, 73 Write, 26 Enum */ import type { IDictionary, DelimArray } from '@looker/sdk-rtl'; @@ -136,6 +136,29 @@ export interface IAgent { */ studio_agent_id?: string | null; workflow_params?: IWorkflowParams; + /** + * Whether the agent is defined in LookML (read-only) + */ + is_lookml?: boolean; + /** + * LookML Agent ID (read-only) + */ + lookml_agent_id?: string | null; + /** + * URI to edit the LookML definition of this agent (read-only) + */ + lookml_edit_uri?: string | null; +} + +export interface IAgentLookml { + /** + * Id of Agent (read-only) + */ + agent_id?: string | null; + /** + * lookml of UDD Agent (read-only) + */ + lookml?: string | null; } export interface IAlert { @@ -583,95 +606,6 @@ export interface IArtifactUsage { usage: number; } -export interface IAssertValidatorErrorItem { - assert_error?: IAssertValidatorTestError; - generic_error?: IGenericError; -} - -export interface IAssertValidatorResult { - /** - * Name of the validator (assert) (read-only) - */ - name?: string; - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - status?: string; - /** - * Results of the validation (read-only) - */ - results?: IAssertValidatorTestedExplore[]; -} - -export interface IAssertValidatorTestedExplore { - /** - * Total number of failed data tests (read-only) - */ - error_count?: number | null; - /** - * Details of data tests that failed validation (read-only) - */ - errors?: IAssertValidatorErrorItem[]; - /** - * Total number of successful data tests (read-only) - */ - success_count?: string; - /** - * Details of data tests that passed validation (read-only) - */ - successes?: IAssertValidatorTestSuccess[]; -} - -export interface IAssertValidatorTestError { - /** - * LookML model that contains the data test (read-only) - */ - model?: string; - /** - * LookML Explore that is used as the explore_source for the data test (read-only) - */ - explore?: string; - /** - * Name of the data test (read-only) - */ - test_name?: string; - /** - * URL to the Explore (read-only) - */ - explore_url?: string; - /** - * URL to the LookML file where the data test is defined (read-only) - */ - lookml_url?: string; - /** - * Message returned by the data test (read-only) - */ - message?: string; -} - -export interface IAssertValidatorTestSuccess { - /** - * LookML model that contains the data test (read-only) - */ - model?: string; - /** - * LookML Explore that is used as the explore_source for the data test (read-only) - */ - explore?: string; - /** - * Name of the data test (read-only) - */ - test_name?: string; - /** - * URL to the Explore (read-only) - */ - explore_url?: string; - /** - * URL to the LookML file where the data test is defined (read-only) - */ - lookml_url?: string; -} - export interface IAsyncDeployResponse { /** * Status of the async deploy request (e.g., 'queued') (read-only) @@ -1146,25 +1080,6 @@ export interface ICIAssertValidatorTestSuccess { lookml_url?: string; } -export interface ICIChangeRequest { - /** - * Numeric identifier of the change request (read-only) - */ - change_request_number?: number; - /** - * URL of the change request (read-only) - */ - change_request_url?: string; - /** - * Name of the change request (read-only) - */ - change_request_name?: string; - /** - * For PR-triggered CI runs, the URL to the change request commit that triggered the run. (read-only) - */ - change_request_commits_url?: string; -} - export interface ICIContentValidatorContentError { /** * A URI reference that identifies the problem type @@ -1298,25 +1213,6 @@ export interface ICIGenericError { instance?: string | null; } -export interface ICIGitState { - /** - * Git branch that the CI run validates (read-only) - */ - branch?: string | null; - /** - * Git repository that contains the Git branch being validated (read-only) - */ - repository?: string | null; - /** - * Git commit that the CI run validates (read-only) - */ - commit_ref?: string | null; - /** - * For incremental runs, the Git branch that the CI run compares against during validation (read-only) - */ - target?: string | null; -} - export interface ICILookMLValidatorError { /** * A URI reference that identifies the problem type @@ -1482,6 +1378,18 @@ export interface ICIRun { * Git target URL of the CI run */ git_target_url?: string | null; + /** + * Git branch name in dbt Cloud + */ + dbt_cloud_git_branch_name?: string | null; + /** + * Git commit ref in dbt Cloud + */ + dbt_cloud_git_commit_ref?: string | null; + /** + * Git repository name in dbt Cloud + */ + dbt_cloud_git_repository_name?: string | null; /** * Time and date that the CI run was created (read-only) */ @@ -1518,6 +1426,10 @@ export interface ICIRun { * User attributes for the CI run (read-only) */ user_attributes?: ICIRunUserAttribute[] | null; + /** + * Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run (read-only) + */ + project_imports?: IDictionary | null; } export interface ICIRunResult { @@ -1529,6 +1441,8 @@ export interface ICIRunResult { content_error?: ICIGenericError; lookml_result?: ICILookMLValidatorResult; lookml_error?: ICIGenericError; + style_result?: ICIStyleValidatorResult; + style_error?: ICIGenericError; generic_error?: ICIGenericError; } @@ -1547,25 +1461,6 @@ export interface ICIRunUserAttribute { value?: string | null; } -export interface ICIScheduleTrigger { - /** - * Whether the CI run schedule is active (read-only) - */ - enabled?: boolean; - /** - * For scheduled runs, day of the week that the CI run is scheduled (read-only) - */ - day?: string | null; - /** - * For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled (read-only) - */ - hour?: string | null; - /** - * For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly) (read-only) - */ - frequency?: string; -} - export interface ICISqlValidatorError { /** * A URI reference that identifies the problem type @@ -1668,6 +1563,125 @@ export interface ICISqlValidatorTestedExplore { errors?: ICISqlValidatorErrorItem[]; } +export interface ICIStyleValidatorError { + /** + * A URI reference that identifies the problem type + */ + type?: string; + /** + * Overview of the error + */ + title?: string; + /** + * Detail of the error + */ + detail?: string; + /** + * The HTTP status code for the problem + */ + status?: string | null; + /** + * URI reference that identifies the specific occurrence of the problem + */ + instance?: string | null; + /** + * LookML model that contains the error + */ + model?: string | null; + /** + * LookML Explore that contains the error + */ + explore?: string | null; + /** + * LookML field that caused the error + */ + field_name?: string | null; + /** + * Message returned by the style validator + */ + message?: string | null; + /** + * Severity of the error (warning, error, fatal, info, success) + */ + severity?: string | null; + /** + * Line number of the error in the LookML file + */ + line_number?: number | null; + /** + * Character offset of the error in the LookML file + */ + character?: number | null; + /** + * URL to the LookML that caused the error + */ + lookml_url?: string | null; + /** + * IDE folder path to the LookML file that caused the error + */ + file_path?: string | null; + /** + * Name of the style rule + */ + rule_name?: string | null; + /** + * Type of LookML entity evaluated + */ + entity_type?: string | null; + /** + * Name of LookML entity evaluated + */ + entity_name?: string | null; + /** + * Whether the error was newly introduced + */ + is_incremental?: boolean | null; + /** + * Deterministic fingerprint of the violation + */ + error_id?: string | null; + /** + * URL to documentation for the style rule + */ + documentation_url?: string | null; + /** + * LookML source code snippet lines surrounding the error + */ + context?: string[] | null; + /** + * Line number where the context code snippet begins + */ + context_line_number?: number | null; +} + +export interface ICIStyleValidatorErrorItem { + style_error?: ICIStyleValidatorError; + generic_error?: ICIGenericError; +} + +export interface ICIStyleValidatorResult { + /** + * Name of the validator (style) + */ + name?: string; + /** + * Whether the validation was incremental + */ + incremental?: boolean | null; + /** + * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) + */ + status?: string; + /** + * Total number of failed style validations + */ + error_count?: number | null; + /** + * Details of the LookML that failed style validation + */ + errors?: ICIStyleValidatorErrorItem[]; +} + export interface IColorCollection { /** * Unique Id (read-only) @@ -1974,6 +1988,10 @@ export interface IContentSearch { * Name of the parent folder of the content (read-only) */ parent_folder_name?: string | null; + /** + * Name of the parent project of the content (read-only) + */ + parent_project_name?: string | null; } export interface IContentSummary { @@ -2351,65 +2369,6 @@ export interface IContentValidationScheduledPlan { id?: string; } -export interface IContentValidatorContentError { - /** - * A URI reference that identifies the problem type (read-only) - */ - type?: string; - /** - * Overview of the error (read-only) - */ - title?: string; - /** - * Detail of the error (read-only) - */ - detail?: string; - /** - * The HTTP status code for the problem (read-only) - */ - status?: string | null; - /** - * URI reference that identifies the specific occurrence of the problem (read-only) - */ - instance?: string | null; - /** - * LookML model that contains the error (read-only) - */ - model?: string | null; - /** - * LookML Explore that contains the error (read-only) - */ - explore?: string | null; - /** - * LookML field that caused the error (read-only) - */ - field_name?: string; - /** - * Type of the content (dashboard, look) (read-only) - */ - content_type?: string; - /** - * Folder of the content (read-only) - */ - folder?: string | null; - /** - * URL of the content (read-only) - */ - url?: string; - /** - * Type of the tile (dashboard_element, dashboard_filter) (read-only) - */ - tile_type?: string | null; - /** - * Title of the tile (read-only) - */ - tile_title?: string | null; - /** - * Message returned by the content validator (read-only) - */ - message?: string; -} - export interface IContentValidatorError { look?: IContentValidationLook; dashboard?: IContentValidationDashboard; @@ -2429,41 +2388,6 @@ export interface IContentValidatorError { id?: string; } -export interface IContentValidatorErrorItem { - content_error?: IContentValidatorContentError; - generic_error?: IGenericError; -} - -export interface IContentValidatorResult { - /** - * Name of the validator (content) (read-only) - */ - name?: string; - /** - * Whether the validation was incremental (read-only) - */ - incremental?: boolean; - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - status?: string; - /** - * Results of the content validation (read-only) - */ - result?: IContentValidatorTestedExplore[]; -} - -export interface IContentValidatorTestedExplore { - /** - * Total number of failed content validations (read-only) - */ - error_count?: number | null; - /** - * Details of the content that failed validation (read-only) - */ - errors?: IContentValidatorErrorItem[]; -} - export interface IContentView { /** * Operations the current user is able to perform on this object (read-only) @@ -2520,6 +2444,14 @@ export interface IContext { * Agent instructions */ instructions?: string; + /** + * Show analytical details in preview + */ + show_analytical_details?: boolean | null; + /** + * Show debug info in preview + */ + show_debug?: boolean | null; } export interface IContinuousPalette { @@ -2650,32 +2582,6 @@ export interface ICostEstimate { message?: string; } -export interface ICreateCIRunRequest { - /** - * ID of the CI suite - */ - suite_id?: string; - /** - * Branch that the CI run should validate. Omit to test production. - */ - branch?: string | null; - /** - * Commit that the CI run should validate. Omit to test production. - */ - commit?: string | null; -} - -export interface ICreateCIRunResponse { - /** - * ID of the CI run (read-only) - */ - run_id?: string; - /** - * Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - status?: string; -} - export interface ICreateContinuousIntegrationRunRequest { /** * The suite ID. @@ -2693,6 +2599,10 @@ export interface ICreateContinuousIntegrationRunRequest { * User attributes to override for the CI run. */ user_attributes?: IUserAttributeOverride[] | null; + /** + * Map of upstream project names to commit SHAs or git configurations to pin for the CI run. + */ + project_imports?: IDictionary | null; } /** @@ -3552,6 +3462,10 @@ export interface IDashboard { * Relative URL of the dashboard (read-only) */ url?: string | null; + /** + * The layout granularity to apply to this dashboard (ie: default or granular) + */ + layout_granularity?: string | null; /** * Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. */ @@ -3603,6 +3517,38 @@ export interface IDashboardAppearance { * Whether to modernize visualizations on this dashboard */ modern_vis2026?: boolean | null; + /** + * Toggle to show dashboard header. Defaults to true. + */ + show_dashboard_header?: boolean | null; + /** + * Toggle to show dashboard title. Defaults to true. + */ + show_title?: boolean | null; + /** + * Toggle to show filters bar. Defaults to true. + */ + show_filters_bar?: boolean | null; + /** + * Toggle to show filters toggle button. Defaults to true. + */ + show_filters_toggle?: boolean | null; + /** + * Toggle to show reload data icon/button. Defaults to true. + */ + show_reload_data_icon?: boolean | null; + /** + * Toggle to show dashboard actions menu. Defaults to true. + */ + show_dashboard_menu?: boolean | null; + /** + * Toggle to show last updated indicator. Defaults to true. + */ + show_last_updated_indicator?: boolean | null; + /** + * Background image opacity (0.0 to 1.0) + */ + background_opacity?: number | null; } export interface IDashboardBase { @@ -3692,6 +3638,10 @@ export interface IDashboardDownloadSettings { * Columns limit */ columns_limit?: number | null; + /** + * Append Excel metadata + */ + append_excel_metadata?: boolean | null; } export interface IDashboardElement { @@ -3715,6 +3665,10 @@ export interface IDashboardElement { * Id of Dashboard Layout */ dashboard_layout_id?: string | null; + /** + * ID of the group to place this element under in the layout (read-only) + */ + group_id?: string | null; /** * Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only). (read-only) */ @@ -3819,6 +3773,14 @@ export interface IDashboardElement { */ aria_description?: string | null; certification_metadata?: ICertification; + /** + * ID of Dashboard Image + */ + image_id?: string | null; + /** + * Images (read-only) + */ + images?: IImage[] | null; } export interface IDashboardFilter { @@ -4012,6 +3974,10 @@ export interface IDashboardLayoutComponent { * Height (granular layout) */ granular_height?: number | null; + /** + * Id of parent Dashboard Layout Component group + */ + group_id?: string | null; } export interface IDashboardLookml { @@ -4280,6 +4246,10 @@ export interface IDBConnection { * True if PDTs are enabled on this connection (read-only) */ pdts_enabled?: boolean; + /** + * ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + */ + project_id?: string | null; /** * Requested JDBC driver version name */ @@ -4308,6 +4278,10 @@ export interface IDBConnection { * Whether or not the password is present (read-only) */ has_password?: boolean; + /** + * Whether Service Account OAuth authentication is enabled for this connection + */ + service_account_auth_enabled?: boolean; /** * Whether the connection uses OAuth for authentication. (read-only) */ @@ -4328,6 +4302,10 @@ export interface IDBConnection { * (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). */ certificate?: string | null; + /** + * The name of the user attribute containing the connection certificate. + */ + user_attr_certificate?: string | null; /** * (Write-Only) Certificate keyfile type - .json, .p8 or .p12 */ @@ -4537,6 +4515,10 @@ export interface IDBConnectionBase { * True if PDTs are enabled on this connection (read-only) */ pdts_enabled?: boolean; + /** + * ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + */ + project_id?: string | null; } export interface IDBConnectionOverride { @@ -4871,6 +4853,10 @@ export interface IDialectInfoOptions { * Disable this connection. This will prevent any queries from running on this connection. (read-only) */ disabled?: boolean; + /** + * Disable query holding for this connection. (read-only) + */ + query_holding_disabled?: boolean; /** * Can disable query context comments (read-only) */ @@ -4943,6 +4929,10 @@ export interface IDialectInfoOptions { * Has support for connection pooling (read-only) */ supports_connection_pooling?: boolean; + /** + * Has user attribute certificate support (read-only) + */ + user_attribute_certificate?: boolean; } export interface IDigestEmails { @@ -5018,6 +5008,10 @@ export interface IEmbedConfig { * Is embed content management enabled for this Looker */ embed_content_management?: boolean; + /** + * Default net new visualizations in embedded context to Modern theme (read-only) + */ + embed_vis_modernization_default?: boolean; /** * 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. */ @@ -5568,29 +5562,6 @@ export enum Format { vector_tile_region = 'vector_tile_region', } -export interface IGenericError { - /** - * A URI reference that identifies the problem type (read-only) - */ - type?: string; - /** - * Overview of the error (read-only) - */ - title?: string; - /** - * Detail of the error (read-only) - */ - detail?: string; - /** - * The HTTP status code for the problem (read-only) - */ - status?: string | null; - /** - * URI reference that identifies the specific occurrence of the problem (read-only) - */ - instance?: string | null; -} - export interface IGitBranch { /** * Operations the current user is able to perform on this object (read-only) @@ -5696,92 +5667,6 @@ export interface IGitConnectionTestResult { status?: string | null; } -export interface IGitDiagnosticIssue { - /** - * Operations the current user is able to perform on this object (read-only) - */ - can?: IDictionary; - /** - * Unique ID of the diagnostic issue. (read-only) - */ - id?: string; - /** - * Parent diagnostic report ID. (read-only) - */ - report_id?: string | null; - /** - * Target Looker Project ID. (read-only) - */ - project_id?: string | null; - /** - * Environment scope (developer/production). (read-only) - */ - project_type?: string | null; - /** - * Git diagnostic issue category. (read-only) - */ - issue_type?: string | null; - /** - * Version schema. (read-only) - */ - issue_version?: string | null; - /** - * Current execution status. (read-only) - */ - state?: string | null; - /** - * Creation timestamp. (read-only) - */ - created_at?: Date | null; - /** - * Last update timestamp. (read-only) - */ - updated_at?: Date | null; -} - -export interface IGitDiagnosticReport { - /** - * Operations the current user is able to perform on this object (read-only) - */ - can?: IDictionary; - /** - * Unique ID of the git diagnostic report. (read-only) - */ - id?: string; - /** - * Target Looker Project ID. (read-only) - */ - project_id?: string | null; - /** - * ID of the user initiating the diagnosis. (read-only) - */ - user_id?: string | null; - /** - * Raw lifecycle state. (read-only) - */ - state?: string | null; - /** - * Status derived from state. (read-only) - */ - status?: string | null; - /** - * Creation time. (read-only) - */ - created_at?: Date | null; - /** - * Update time. (read-only) - */ - updated_at?: Date | null; - /** - * Project structure type. - */ - project_type?: string | null; - /** - * Diagnostic issues associated with this report. (read-only) - */ - issues?: IGitDiagnosticIssue[] | null; -} - export interface IGitStatus { /** * Git action: add, delete, etc (read-only) @@ -5823,7 +5708,7 @@ export interface IGoldenQuery { */ answer?: string; /** - * Whether this golden question should be utilized by the agent + * Whether this golden question should be utilized by the agent (read-only) */ is_active?: boolean; /** @@ -5865,11 +5750,19 @@ export interface IGoldenQuery { /** * Limit of the associated Looker Query (read-only) */ - limit?: string | null; + limit?: string | null; + /** + * Client ID of the associated Looker Query (read-only) + */ + client_id?: string | null; + /** + * Pivots of the associated Looker Query (read-only) + */ + pivots?: string[] | null; /** - * Client ID of the associated Looker Query (read-only) + * Dynamic fields of the associated Looker Query (read-only) */ - client_id?: string | null; + dynamic_fields?: string | null; } export interface IGroup { @@ -6191,6 +6084,41 @@ export interface IHomepageSection { visible_item_order?: string[] | null; } +export interface IImage { + /** + * Operations the current user is able to perform on this object (read-only) + */ + can?: IDictionary; + /** + * Unique Id (read-only) + */ + id?: string; + /** + * Original file name (read-only) + */ + file_name?: string | null; + /** + * Image format (e.g. PNG, JPG) (read-only) + */ + format?: string | null; + /** + * Accessibility label + */ + label?: string | null; + /** + * URL of the image (read-only) + */ + url?: string | null; + /** + * Creation timestamp (read-only) + */ + created_at?: Date | null; + /** + * Update timestamp (read-only) + */ + updated_at?: Date | null; +} + export interface IImportedProject { /** * Dependency name (read-only) @@ -8102,85 +8030,6 @@ export interface ILookmlTestResult { success?: boolean; } -export interface ILookMLValidatorError { - /** - * A URI reference that identifies the problem type (read-only) - */ - type?: string; - /** - * Overview of the error (read-only) - */ - title?: string; - /** - * Detail of the error (read-only) - */ - detail?: string; - /** - * The HTTP status code for the problem (read-only) - */ - status?: string | null; - /** - * URI reference that identifies the specific occurrence of the problem (read-only) - */ - instance?: string | null; - /** - * LookML model that contains the error (read-only) - */ - model?: string | null; - /** - * LookML Explore that contains the error (read-only) - */ - explore?: string | null; - /** - * LookML field that caused the error (read-only) - */ - field_name?: string | null; - /** - * Message returned by the LookML validator (read-only) - */ - message?: string | null; - /** - * Severity of the error (warning, error, fatal, info, success) (read-only) - */ - severity?: string | null; - /** - * Line number of the error in the LookML file (read-only) - */ - line_number?: string | null; - /** - * URL to the LookML that caused the error (read-only) - */ - lookml_url?: string | null; - /** - * IDE folder path to the LookML file that caused the error (read-only) - */ - file_path?: string | null; -} - -export interface ILookMLValidatorErrorItem { - lookml_error?: ILookMLValidatorError; - generic_error?: IGenericError; -} - -export interface ILookMLValidatorResult { - /** - * Name of the validator (lookml) (read-only) - */ - name?: string; - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - status?: string; - /** - * Total number of failed LookML validations (read-only) - */ - error_count?: number | null; - /** - * Details of the LookML that failed validation (read-only) - */ - errors?: ILookMLValidatorErrorItem[]; -} - export interface ILookModel { /** * Model Id (read-only) @@ -8522,6 +8371,7 @@ export interface IMcpTools { get_dashboards?: IMcpToolSetting; get_dimensions?: IMcpToolSetting; get_explores?: IMcpToolSetting; + get_field_value_suggestions?: IMcpToolSetting; get_filters?: IMcpToolSetting; get_looks?: IMcpToolSetting; get_measures?: IMcpToolSetting; @@ -8548,6 +8398,8 @@ export interface IMcpTools { get_lookml_tests?: IMcpToolSetting; run_lookml_tests?: IMcpToolSetting; create_view_from_table?: IMcpToolSetting; + render_visualization?: IMcpToolSetting; + render_dashboard?: IMcpToolSetting; } export interface IMcpToolSetting { @@ -8840,9 +8692,13 @@ export interface IOauthClientApp { */ client_guid?: string; /** - * The uri with which this application will receive an auth code by browser redirect. + * (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) */ redirect_uri?: string; + /** + * The authorized uris for which this application will receive an auth code by browser redirect. + */ + redirect_uris?: string[]; /** * The application's display name */ @@ -9248,112 +9104,319 @@ export interface IPrivatelabelConfiguration { export interface IPrivateLookerInstanceInfo { /** - * The Looker instance id. (read-only) + * The Looker instance id. (read-only) + */ + lookerInstanceId?: string | null; + /** + * The service directory name of the Looker instance. (read-only) + */ + serviceDirectoryName?: string | null; +} + +export interface IProject { + /** + * Operations the current user is able to perform on this object (read-only) + */ + can?: IDictionary; + /** + * Project Id (read-only) + */ + id?: string; + /** + * Project display name + */ + name?: string; + /** + * If true the project is configured with a git repository (read-only) + */ + uses_git?: boolean; + /** + * If true, the project git repository is locked. (read-only) + */ + is_git_dev_locked?: boolean; + /** + * Git remote repository url + */ + git_remote_url?: string | null; + /** + * Git username for HTTPS authentication. (For production only, if using user attributes.) + */ + git_username?: string | null; + /** + * (Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.) + */ + git_password?: string | null; + /** + * Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher. + */ + git_production_branch_name?: string; + /** + * If true, the project uses a git cookie for authentication. + */ + use_git_cookie_auth?: boolean; + /** + * User attribute name for username in per-user HTTPS authentication. + */ + git_username_user_attribute?: string | null; + /** + * User attribute name for password in per-user HTTPS authentication. + */ + git_password_user_attribute?: string | null; + /** + * Name of the git service provider + */ + git_service_name?: string | null; + /** + * Port that HTTP(S) application server is running on (for PRs, file browsing, etc.) + */ + git_application_server_http_port?: number | null; + /** + * Scheme that is running on application server (for PRs, file browsing, etc.) + */ + git_application_server_http_scheme?: string | null; + /** + * (Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated. + */ + deploy_secret?: string | null; + /** + * (Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint. + */ + unset_deploy_secret?: boolean; + /** + * The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". + */ + pull_request_mode?: PullRequestMode; + /** + * Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository + */ + validation_required?: boolean; + /** + * If true, advanced git release management is enabled for this project + */ + git_release_mgmt_enabled?: boolean; + /** + * Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). + */ + allow_warnings?: boolean; + /** + * If true the project is an example project and cannot be modified (read-only) + */ + is_example?: boolean; + /** + * If true the project has been pushed to production. (read-only) + */ + has_production_counterpart?: boolean; + /** + * Status of dependencies in your manifest & lockfile + */ + dependency_status?: string | null; +} + +export interface IProjectCISuite { + /** + * Operations the current user is able to perform on this object (read-only) + */ + can?: IDictionary; + /** + * ID of the CI suite (read-only) + */ + id?: string | null; + /** + * Name of the CI suite + */ + name?: string | null; + /** + * ID of the LookML project (read-only) + */ + project_id?: string | null; + /** + * Time and date that the CI suite was created (read-only) + */ + created_at?: Date | null; + /** + * Time and date that the CI suite was updated (read-only) + */ + updated_at?: Date | null; + /** + * Whether the CI suite schedule trigger is active + */ + schedule_trigger_is_enabled?: boolean | null; + /** + * Crontab that the CI suite is scheduled to run + */ + schedule_trigger_crontab?: string | null; + /** + * Timezone for the CI suite schedule + */ + schedule_trigger_timezone?: string | null; + /** + * Whether alerting is enabled for the CI suite + */ + alerting_enabled?: boolean | null; + /** + * Email addresses to send alerts to + */ + alert_email_addresses?: string[] | null; + /** + * Whether to alert on failed status + */ + alert_on_failed_status?: boolean | null; + /** + * Whether to alert on error status + */ + alert_on_error_status?: boolean | null; + /** + * Whether to alert on passed status + */ + alert_on_passed_status?: boolean | null; + /** + * Whether to alert on cancelled status + */ + alert_on_cancelled_status?: boolean | null; + /** + * Whether the CI suite change request trigger is active + */ + change_request_trigger_is_enabled?: boolean | null; + /** + * ID of the hook that triggers the CI Suite to run (read-only) + */ + change_request_trigger_hook_id?: string | null; + /** + * Git branch that should be compared against when the CI suite is run, used when the run is incremental + */ + change_request_trigger_target_branch?: string | null; + /** + * GUID of the CI suite (read-only) + */ + guid?: string | null; + /** + * Whether the CI suite dbt Cloud trigger is active + */ + dbt_cloud_trigger_is_enabled?: boolean | null; + /** + * Job ID of the dbt Cloud job + */ + dbt_cloud_trigger_job_id?: number | null; + /** + * User Attribute ID used for schema substitution + */ + dbt_cloud_trigger_user_attribute_id?: string | null; + /** + * Webhook ID registered in dbt Cloud (read-only) + */ + dbt_cloud_webhook_id?: string | null; + /** + * (Write-Only) Webhook secret used to authenticate incoming webhook requests + */ + webhook_secret?: string | null; + /** + * Whether the CI suite has a webhook secret configured (read-only) + */ + has_webhook_secret?: boolean; + /** + * Whether assert validation is enabled for the CI suite */ - lookerInstanceId?: string | null; + assert_validator_config_is_enabled?: boolean | null; /** - * The service directory name of the Looker instance. (read-only) + * Number of tests that should run concurrently during assert validation */ - serviceDirectoryName?: string | null; -} - -export interface IProject { + assert_validator_config_concurrency?: number | null; /** - * Operations the current user is able to perform on this object (read-only) + * Explores that assert validation should run for (model_name/explore_name) */ - can?: IDictionary; + assert_validator_config_selectors?: string[] | null; /** - * Project Id (read-only) + * Explores that should be excluded from assert validation (model_name/explore_name) */ - id?: string; + assert_validator_config_exclusions?: string[] | null; /** - * Project display name + * Whether content validation is enabled for the CI suite */ - name?: string; + content_validator_config_is_enabled?: boolean | null; /** - * If true the project is configured with a git repository (read-only) + * Whether content validation should ignore personal folders */ - uses_git?: boolean; + content_validator_config_exclude_personal?: boolean | null; /** - * If true, the project git repository is locked. (read-only) + * Whether content should validate incrementally */ - is_git_dev_locked?: boolean; + content_validator_config_incremental?: boolean | null; /** - * Git remote repository url + * Folders whose content should not be validated */ - git_remote_url?: string | null; + content_validator_config_exclude_folders?: string[] | null; /** - * Git username for HTTPS authentication. (For production only, if using user attributes.) + * Folders whose content should be validated */ - git_username?: string | null; + content_validator_config_include_folders?: string[] | null; /** - * (Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.) + * Explores whose content should be validated (model_name/explore_name) */ - git_password?: string | null; + content_validator_config_selectors?: string[] | null; /** - * Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher. + * Explores that should be excluded from content validation (model_name/explore_name) */ - git_production_branch_name?: string; + content_validator_config_exclusions?: string[] | null; /** - * If true, the project uses a git cookie for authentication. + * Whether LookML validation is enabled for the CI suite */ - use_git_cookie_auth?: boolean; + lookml_validator_config_is_enabled?: boolean | null; /** - * User attribute name for username in per-user HTTPS authentication. + * Severity of the error that the LookML validator should report (warning, error, fatal, info, success) */ - git_username_user_attribute?: string | null; + lookml_validator_config_severity?: string | null; /** - * User attribute name for password in per-user HTTPS authentication. + * Amount of time after which LookML Validation should stop running */ - git_password_user_attribute?: string | null; + lookml_validator_config_timeout?: number | null; /** - * Name of the git service provider + * Whether LookML Style Validator is enabled for the CI suite */ - git_service_name?: string | null; + style_validator_config_is_enabled?: boolean | null; /** - * Port that HTTP(S) application server is running on (for PRs, file browsing, etc.) + * Whether LookML Style Validator should run incrementally on changed LookML files only */ - git_application_server_http_port?: number | null; + style_validator_config_incremental?: boolean | null; /** - * Scheme that is running on application server (for PRs, file browsing, etc.) + * Whether SQL validation is enabled for the CI suite */ - git_application_server_http_scheme?: string | null; + sql_validator_config_is_enabled?: boolean | null; /** - * (Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated. + * Whether SQL validation should stop after the first failure */ - deploy_secret?: string | null; + sql_validator_config_fail_fast?: boolean | null; /** - * (Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint. + * Whether SQL should validate incrementally */ - unset_deploy_secret?: boolean; + sql_validator_config_incremental?: boolean | null; /** - * The git pull request policy for this project. Valid values are: "off", "links", "recommended", "required". + * Whether SQL validation should ignore hidden fields */ - pull_request_mode?: PullRequestMode; + sql_validator_config_ignore_hidden?: boolean | null; /** - * Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository + * Number of queries that should run concurrently during SQL validation */ - validation_required?: boolean; + sql_validator_config_query_concurrency?: number | null; /** - * If true, advanced git release management is enabled for this project + * The max number of rows that should be returned for each query */ - git_release_mgmt_enabled?: boolean; + sql_validator_config_chunk_size?: number | null; /** - * Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). + * Explores whose sql should be validated (model_name/explore_name) */ - allow_warnings?: boolean; + sql_validator_config_selectors?: string[] | null; /** - * If true the project is an example project and cannot be modified (read-only) + * Explores that should be excluded from SQL validation (model_name/explore_name) */ - is_example?: boolean; + sql_validator_config_exclusions?: string[] | null; /** - * If true the project has been pushed to production. (read-only) + * Whether the CI suite upstream project imports trigger is active */ - has_production_counterpart?: boolean; + upstream_trigger_is_enabled?: boolean | null; /** - * Status of dependencies in your manifest & lockfile + * Names of upstream projects subscribed for pull request triggers */ - dependency_status?: string | null; + upstream_projects?: string[] | null; } export interface IProjectError { @@ -9443,10 +9506,6 @@ export interface IProjectFile { git_status?: IGitStatus; } -export interface IProjectRun { - run?: IRun; -} - export interface IProjectValidation { /** * A list of project errors (read-only) @@ -10668,6 +10727,32 @@ export interface IRequestFolderChildrenSearch { name?: string | null; } +/** + * Dynamically generated request type for get_continuous_integration_suites + */ +export interface IRequestGetContinuousIntegrationSuites { + /** + * Project Id + */ + project_id: string; + /** + * Requested fields + */ + fields?: string | null; + /** + * Number of suites to return (min 1, max 100, default 50) + */ + limit?: number | null; + /** + * Row offset at which to fetch suites + */ + offset?: number | null; + /** + * Time at which to fetch suites + */ + created_at?: Date | null; +} + /** * Dynamically generated request type for graph_derived_tables_for_model */ @@ -11438,6 +11523,48 @@ export interface IRequestSearchContentViews { filter_or?: boolean | null; } +/** + * Dynamically generated request type for search_continuous_integration_runs + */ +export interface IRequestSearchContinuousIntegrationRuns { + /** + * Project Id + */ + project_id: string; + /** + * Requested fields + */ + fields?: string | null; + /** + * Filter by suite id. Can be a comma-separated list of ids. + */ + suite_id?: string | null; + /** + * Filter by status. Can be a comma-separated list of statuses. + */ + status?: string | null; + /** + * Filter by user id. Can be a comma-separated list of ids. + */ + user_id?: string | null; + /** + * Filter by trigger type. Can be a comma-separated list of types. + */ + trigger_type?: string | null; + /** + * Number of results to return (min 1, max 100, default 50, used with offset) + */ + limit?: number | null; + /** + * Number of results to skip before returning. (used with limit) + */ + offset?: number | null; + /** + * One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at + */ + sorts?: string | null; +} + /** * Dynamically generated request type for search_conversations */ @@ -11847,7 +11974,7 @@ export interface IRequestSearchLookmlDashboards { */ folder_id?: string | null; /** - * Match LookML Dashboard title. + * Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title. */ title?: string | null; /** @@ -11867,7 +11994,7 @@ export interface IRequestSearchLookmlDashboards { */ offset?: number | null; /** - * One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status] + * One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title. */ sorts?: string | null; } @@ -12232,6 +12359,22 @@ export interface IRequestSearchScheduledPlans { * Match scheduled plan's delivery format. */ delivery_format?: string | null; + /** + * Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag). + */ + all_states?: boolean | null; + /** + * Match Scheduled plan's run_once. + */ + run_once?: boolean | null; + /** + * Match Scheduled plan's enabled status. + */ + enabled?: boolean | null; + /** + * Match scheduled plan's last run status. + */ + last_run_status?: string | null; /** * Combine given search criteria in a boolean OR expression */ @@ -12759,61 +12902,6 @@ export interface IRoleSearch { users_url?: string | null; } -export interface IRun { - /** - * ID of the CI run (read-only) - */ - run_id?: string; - /** - * Time and date that the CI run was initiated (read-only) - */ - created_at?: Date; - /** - * Time and date that the CI run began executing (read-only) - */ - started_at?: Date | null; - /** - * Time and date that the CI run completed (read-only) - */ - finished_at?: Date | null; - /** - * Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite (read-only) - */ - status_url?: string | null; - /** - * Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - status?: string; - /** - * Git service for CI run (e.g. GitHub) (read-only) - */ - git_service?: string | null; - git_state?: ICIGitState; - result?: IRunResult; - schedule?: ICIScheduleTrigger; - /** - * Git branch that the CI run compares against during validation, used for incremental runs (read-only) - */ - target_branch?: string | null; - /** - * Name of the CI suite (read-only) - */ - title?: string; - /** - * Trigger for CI run (unknown, manual, schedule, change_request) (read-only) - */ - trigger?: string; - change_request?: ICIChangeRequest; - /** - * ID of the CI suite (read-only) - */ - suite_id?: string; - /** - * Username of the user who triggered the CI run, if the CI run was manually triggered (read-only) - */ - username?: string | null; -} - export interface IRunningQueries { /** * Operations the current user is able to perform on this object (read-only) @@ -12893,18 +12981,6 @@ export interface IRunningQueries { sql_interface_sql?: string | null; } -export interface IRunResult { - sql_result?: ISqlValidatorResult; - sql_error?: IGenericError; - assert_result?: IAssertValidatorResult; - assert_error?: IGenericError; - content_result?: IContentValidatorResult; - content_error?: IGenericError; - lookml_result?: ILookMLValidatorResult; - lookml_error?: IGenericError; - generic_error?: IGenericError; -} - export interface ISamlConfig { /** * Operations the current user is able to perform on this object (read-only) @@ -13285,6 +13361,10 @@ export interface IScheduledPlan { * Whether or not to add page breaks between tabs */ pdf_page_breaks?: boolean; + /** + * Whether or not to include filters context + */ + include_filters?: boolean; /** * IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) */ @@ -13313,6 +13393,10 @@ export interface IScheduledPlan { * Title (read-only) */ title?: string | null; + /** + * Title of the underlying content (Dashboard, Look, LookML Dashboard, or Explore) associated with this ScheduledPlan (read-only) + */ + content_title?: string | null; user?: IUserPublic; /** * When the ScheduledPlan will next run (null if running once) (read-only) @@ -13322,6 +13406,10 @@ export interface IScheduledPlan { * When the ScheduledPlan was last run (read-only) */ last_run_at?: Date | null; + /** + * Status of the last run for this ScheduledPlan (read-only) + */ + last_run_status?: string | null; /** * Operations the current user is able to perform on this object (read-only) */ @@ -13369,6 +13457,10 @@ export interface IScheduledPlanDestination { * (Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password. */ secret_parameters?: string | null; + /** + * Whether or not to include filters context + */ + include_filters?: boolean; /** * Optional message to be included in scheduled emails */ @@ -13730,6 +13822,10 @@ export interface ISetting { * (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. */ embed_cookieless_v2?: boolean; + /** + * Default net new visualizations in embedded context to Modern theme + */ + embed_vis_modernization_default?: boolean; /** * True if embedding is enabled https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise (read-only) */ @@ -13925,187 +14021,85 @@ export interface ISqlInterfaceQueryCreate { export interface ISqlInterfaceQueryMetadata { /** - * JDBC Metadata to inflate Avatica response classes. (read-only) - */ - results?: string; -} - -export interface ISqlQuery { - /** - * Operations the current user is able to perform on this object (read-only) - */ - can?: IDictionary; - /** - * The identifier of the SQL query (read-only) - */ - slug?: string; - /** - * Number of seconds this query took to run the most recent time it was run (read-only) - */ - last_runtime?: number | null; - /** - * Number of times this query has been run (read-only) - */ - run_count?: number; - /** - * Maximum number of rows this query will display on the SQL Runner page (read-only) - */ - browser_limit?: number; - /** - * SQL query text (read-only) - */ - sql?: string; - /** - * The most recent time this query was run (read-only) - */ - last_run_at?: string | null; - connection?: IDBConnectionBase; - /** - * Model name this query uses (read-only) - */ - model_name?: string | null; - creator?: IUserPublic; - /** - * Explore page URL for this SQL query (read-only) - */ - explore_url?: string | null; - /** - * Should this query be rendered as plain text (read-only) - */ - plaintext?: boolean; - /** - * Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. - */ - vis_config?: IDictionary | null; - /** - * ID of the ResultMakerLookup entry. - */ - result_maker_id?: string | null; -} - -export interface ISqlQueryCreate { - /** - * Name of the db connection on which to run this query - */ - connection_name?: string | null; - /** - * (DEPRECATED) Use `connection_name` instead - */ - connection_id?: string | null; - /** - * Name of LookML Model (this or `connection_id` required) - */ - model_name?: string | null; - /** - * SQL query - */ - sql?: string | null; - /** - * Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. - */ - vis_config?: IDictionary | null; -} - -export interface ISqlValidatorError { - /** - * A URI reference that identifies the problem type (read-only) - */ - type?: string; - /** - * Overview of the error (read-only) - */ - title?: string; - /** - * Detail of the error (read-only) - */ - detail?: string; - /** - * The HTTP status code for the problem (read-only) + * JDBC Metadata to inflate Avatica response classes. (read-only) */ - status?: string | null; + results?: string; +} + +export interface ISqlQuery { /** - * URI reference that identifies the specific occurrence of the problem (read-only) + * Operations the current user is able to perform on this object (read-only) */ - instance?: string | null; + can?: IDictionary; /** - * LookML model that contains the Explore that failed SQL validation (read-only) + * The identifier of the SQL query (read-only) */ - model?: string; + slug?: string; /** - * LookML Explore that failed SQL validation (read-only) + * Number of seconds this query took to run the most recent time it was run (read-only) */ - explore?: string; + last_runtime?: number | null; /** - * Message returned by the SQL validation (read-only) + * Number of times this query has been run (read-only) */ - message?: string; + run_count?: number; /** - * URL to the Explore (read-only) + * Maximum number of rows this query will display on the SQL Runner page (read-only) */ - explore_url?: string | null; + browser_limit?: number; /** - * URL to the LookML that caused the error (read-only) + * SQL query text (read-only) */ - lookml_url?: string | null; + sql?: string; /** - * LookML dimension that caused the error (read-only) + * The most recent time this query was run (read-only) */ - dimension?: string | null; + last_run_at?: string | null; + connection?: IDBConnectionBase; /** - * Line of the error in the LookML file (read-only) + * Model name this query uses (read-only) */ - line_number?: string | null; -} - -export interface ISqlValidatorErrorItem { - sql_error?: ISqlValidatorError; - generic_error?: IGenericError; -} - -export interface ISqlValidatorResult { + model_name?: string | null; + creator?: IUserPublic; /** - * Name of the validator (sql) (read-only) + * Explore page URL for this SQL query (read-only) */ - name?: string; + explore_url?: string | null; /** - * Whether the validation was incremental (read-only) + * Should this query be rendered as plain text (read-only) */ - incremental?: boolean; + plaintext?: boolean; /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) + * Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. */ - status?: string; + vis_config?: IDictionary | null; /** - * The results of tested Explores (read-only) + * ID of the ResultMakerLookup entry. */ - result?: ISqlValidatorTestedExplore[]; + result_maker_id?: string | null; } -export interface ISqlValidatorTestedExplore { - /** - * LookML model that was tested (read-only) - */ - model?: string; +export interface ISqlQueryCreate { /** - * LookML Explore that was tested (read-only) + * Name of the db connection on which to run this query */ - explore?: string; + connection_name?: string | null; /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) + * (DEPRECATED) Use `connection_name` instead */ - status?: string; + connection_id?: string | null; /** - * Reason the validation was skipped (read-only) + * Name of LookML Model (this or `connection_id` required) */ - skip_reason?: string | null; + model_name?: string | null; /** - * Total number of failed validations (read-only) + * SQL query */ - error_count?: number | null; + sql?: string | null; /** - * Details of the LookML that failed SQL validation (read-only) + * Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. */ - errors?: ISqlValidatorErrorItem[]; + vis_config?: IDictionary | null; } export interface ISshPublicKey { @@ -14370,6 +14364,18 @@ export interface IThemeSettings { * Default background color */ background_color?: string; + /** + * URL for background image + */ + background_image_url?: string | null; + /** + * Optional. ID of theme background image. + */ + background_image_id?: string | null; + /** + * Background image opacity (0.0 to 1.0). + */ + background_opacity?: number | null; /** * Base font size for scaling fonts (only supported by legacy dashboards) */ @@ -14754,7 +14760,7 @@ export interface IUserAttribute { */ label: string | null; /** - * Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + * Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") */ type: string | null; /** @@ -14902,6 +14908,69 @@ export interface IUserAttributeWithValue { hidden_value_domain_whitelist?: string | null; } +export interface IUserDbConnection { + /** + * Operations the current user is able to perform on this object (read-only) + */ + can?: IDictionary; + /** + * ID of the connection (read-only) + */ + id?: string; + /** + * Name of the connection (must match virtual namespace pattern) (read-only) + */ + name?: string | null; + /** + * ID of the user who owns the connection (read-only) + */ + user_id?: number | null; + /** + * Database dialect name (read-only) + */ + dialect?: string | null; + /** + * Authentication type (oauth, service_account, password) (read-only) + */ + auth_type?: string | null; + /** + * Host name/address of server (read-only) + */ + host?: string | null; + /** + * Port number on server (read-only) + */ + port?: string | null; + /** + * Database name (read-only) + */ + database?: string | null; + /** + * Schema name (read-only) + */ + schema?: string | null; + /** + * Additional JDBC parameters (read-only) + */ + jdbc_additional_params?: string | null; + /** + * OAuth application ID (if auth_type is oauth) (read-only) + */ + oauth_application_id?: number | null; + /** + * Whether this connection is enabled + */ + enabled?: boolean; + /** + * When the connection was created (read-only) + */ + created_at?: Date | null; + /** + * When the connection was last updated (read-only) + */ + updated_at?: Date | null; +} + export interface IUserEmailOnly { /** * Email Address @@ -15159,7 +15228,7 @@ export interface IWorkspace { /** * Dynamic writeable type for Agent removes: - * 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 + * 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, is_lookml, lookml_agent_id, lookml_edit_uri */ export interface IWriteAgent { /** @@ -15552,7 +15621,7 @@ export interface IWriteConversation { deleted?: boolean; /** * Dynamic writeable type for Agent removes: - * 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 + * 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, is_lookml, lookml_agent_id, lookml_edit_uri */ conversation_agent?: IWriteAgent | null; } @@ -15811,6 +15880,10 @@ export interface IWriteDashboard { */ title_color?: string | null; appearance?: IDashboardAppearance | null; + /** + * The layout granularity to apply to this dashboard (ie: default or granular) + */ + layout_granularity?: string | null; /** * Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. */ @@ -15837,7 +15910,7 @@ export interface IWriteDashboardBase { /** * Dynamic writeable type for DashboardElement removes: - * can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html + * can, body_text_as_html, group_id, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html, images */ export interface IWriteDashboardElement { /** @@ -15940,6 +16013,10 @@ export interface IWriteDashboardElement { * ui_status, user_name, updated_at */ certification_metadata?: IWriteCertification | null; + /** + * ID of Dashboard Image + */ + image_id?: string | null; } /** @@ -16089,6 +16166,10 @@ export interface IWriteDashboardLayoutComponent { * Height (granular layout) */ granular_height?: number | null; + /** + * Id of parent Dashboard Layout Component group + */ + group_id?: string | null; } /** @@ -16130,6 +16211,10 @@ export interface IWriteDBConnection { * Name of the connection. Also used as the unique identifier */ name?: string; + /** + * ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + */ + project_id?: string | null; /** * Requested JDBC driver version name */ @@ -16150,6 +16235,10 @@ export interface IWriteDBConnection { * (Write-Only) Password for server authentication */ password?: string | null; + /** + * Whether Service Account OAuth authentication is enabled for this connection + */ + service_account_auth_enabled?: boolean; /** * Whether the connection uses key-pair for authentication. */ @@ -16158,6 +16247,10 @@ export interface IWriteDBConnection { * (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). */ certificate?: string | null; + /** + * The name of the user attribute containing the connection certificate. + */ + user_attr_certificate?: string | null; /** * (Write-Only) Certificate keyfile type - .json, .p8 or .p12 */ @@ -16414,7 +16507,7 @@ export interface IWriteDBConnectionOverride { /** * Dynamic writeable type for EmbedConfig removes: - * permissions, embed_enabled + * embed_vis_modernization_default, permissions, embed_enabled */ export interface IWriteEmbedConfig { /** @@ -16543,20 +16636,9 @@ export interface IWriteGitBranch { ref?: string | null; } -/** - * Dynamic writeable type for GitDiagnosticReport removes: - * can, id, project_id, user_id, state, status, created_at, updated_at, issues - */ -export interface IWriteGitDiagnosticReport { - /** - * Project structure type. - */ - project_type?: 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, explore, model, fields, filters, sorts, limit, client_id + * can, id, query_id, is_active, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at, explore, model, fields, filters, sorts, limit, client_id, pivots, dynamic_fields */ export interface IWriteGoldenQuery { /** @@ -16567,10 +16649,6 @@ export interface IWriteGoldenQuery { * The Explore URL representing the answer to the question */ answer?: string; - /** - * Whether this golden question should be utilized by the agent - */ - is_active?: boolean; } /** @@ -16973,6 +17051,11 @@ export interface IWriteMcpTools { * description, category, access_level */ get_explores?: IWriteMcpToolSetting | null; + /** + * Dynamic writeable type for McpToolSetting removes: + * description, category, access_level + */ + get_field_value_suggestions?: IWriteMcpToolSetting | null; /** * Dynamic writeable type for McpToolSetting removes: * description, category, access_level @@ -17103,6 +17186,16 @@ export interface IWriteMcpTools { * description, category, access_level */ create_view_from_table?: IWriteMcpToolSetting | null; + /** + * Dynamic writeable type for McpToolSetting removes: + * description, category, access_level + */ + render_visualization?: IWriteMcpToolSetting | null; + /** + * Dynamic writeable type for McpToolSetting removes: + * description, category, access_level + */ + render_dashboard?: IWriteMcpToolSetting | null; } /** @@ -17188,9 +17281,13 @@ export interface IWriteModelSet { */ export interface IWriteOauthClientApp { /** - * The uri with which this application will receive an auth code by browser redirect. + * (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) */ redirect_uri?: string; + /** + * The authorized uris for which this application will receive an auth code by browser redirect. + */ + redirect_uris?: string[] | null; /** * The application's display name */ @@ -17493,6 +17590,181 @@ export interface IWriteProject { dependency_status?: string | null; } +/** + * Dynamic writeable type for ProjectCISuite removes: + * can, id, project_id, created_at, updated_at, change_request_trigger_hook_id, guid, dbt_cloud_webhook_id, has_webhook_secret + */ +export interface IWriteProjectCISuite { + /** + * Name of the CI suite + */ + name?: string | null; + /** + * Whether the CI suite schedule trigger is active + */ + schedule_trigger_is_enabled?: boolean | null; + /** + * Crontab that the CI suite is scheduled to run + */ + schedule_trigger_crontab?: string | null; + /** + * Timezone for the CI suite schedule + */ + schedule_trigger_timezone?: string | null; + /** + * Whether alerting is enabled for the CI suite + */ + alerting_enabled?: boolean | null; + /** + * Email addresses to send alerts to + */ + alert_email_addresses?: string[] | null; + /** + * Whether to alert on failed status + */ + alert_on_failed_status?: boolean | null; + /** + * Whether to alert on error status + */ + alert_on_error_status?: boolean | null; + /** + * Whether to alert on passed status + */ + alert_on_passed_status?: boolean | null; + /** + * Whether to alert on cancelled status + */ + alert_on_cancelled_status?: boolean | null; + /** + * Whether the CI suite change request trigger is active + */ + change_request_trigger_is_enabled?: boolean | null; + /** + * Git branch that should be compared against when the CI suite is run, used when the run is incremental + */ + change_request_trigger_target_branch?: string | null; + /** + * Whether the CI suite dbt Cloud trigger is active + */ + dbt_cloud_trigger_is_enabled?: boolean | null; + /** + * Job ID of the dbt Cloud job + */ + dbt_cloud_trigger_job_id?: number | null; + /** + * User Attribute ID used for schema substitution + */ + dbt_cloud_trigger_user_attribute_id?: string | null; + /** + * (Write-Only) Webhook secret used to authenticate incoming webhook requests + */ + webhook_secret?: string | null; + /** + * Whether assert validation is enabled for the CI suite + */ + assert_validator_config_is_enabled?: boolean | null; + /** + * Number of tests that should run concurrently during assert validation + */ + assert_validator_config_concurrency?: number | null; + /** + * Explores that assert validation should run for (model_name/explore_name) + */ + assert_validator_config_selectors?: string[] | null; + /** + * Explores that should be excluded from assert validation (model_name/explore_name) + */ + assert_validator_config_exclusions?: string[] | null; + /** + * Whether content validation is enabled for the CI suite + */ + content_validator_config_is_enabled?: boolean | null; + /** + * Whether content validation should ignore personal folders + */ + content_validator_config_exclude_personal?: boolean | null; + /** + * Whether content should validate incrementally + */ + content_validator_config_incremental?: boolean | null; + /** + * Folders whose content should not be validated + */ + content_validator_config_exclude_folders?: string[] | null; + /** + * Folders whose content should be validated + */ + content_validator_config_include_folders?: string[] | null; + /** + * Explores whose content should be validated (model_name/explore_name) + */ + content_validator_config_selectors?: string[] | null; + /** + * Explores that should be excluded from content validation (model_name/explore_name) + */ + content_validator_config_exclusions?: string[] | null; + /** + * Whether LookML validation is enabled for the CI suite + */ + lookml_validator_config_is_enabled?: boolean | null; + /** + * Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + */ + lookml_validator_config_severity?: string | null; + /** + * Amount of time after which LookML Validation should stop running + */ + lookml_validator_config_timeout?: number | null; + /** + * Whether LookML Style Validator is enabled for the CI suite + */ + style_validator_config_is_enabled?: boolean | null; + /** + * Whether LookML Style Validator should run incrementally on changed LookML files only + */ + style_validator_config_incremental?: boolean | null; + /** + * Whether SQL validation is enabled for the CI suite + */ + sql_validator_config_is_enabled?: boolean | null; + /** + * Whether SQL validation should stop after the first failure + */ + sql_validator_config_fail_fast?: boolean | null; + /** + * Whether SQL should validate incrementally + */ + sql_validator_config_incremental?: boolean | null; + /** + * Whether SQL validation should ignore hidden fields + */ + sql_validator_config_ignore_hidden?: boolean | null; + /** + * Number of queries that should run concurrently during SQL validation + */ + sql_validator_config_query_concurrency?: number | null; + /** + * The max number of rows that should be returned for each query + */ + sql_validator_config_chunk_size?: number | null; + /** + * Explores whose sql should be validated (model_name/explore_name) + */ + sql_validator_config_selectors?: string[] | null; + /** + * Explores that should be excluded from SQL validation (model_name/explore_name) + */ + sql_validator_config_exclusions?: string[] | null; + /** + * Whether the CI suite upstream project imports trigger is active + */ + upstream_trigger_is_enabled?: boolean | null; + /** + * Names of upstream projects subscribed for pull request triggers + */ + upstream_projects?: string[] | null; +} + /** * Dynamic writeable type for Query removes: * can, id, slug, share_url, expanded_share_url, url, has_table_calculations @@ -17774,7 +18046,7 @@ export interface IWriteSamlConfig { /** * Dynamic writeable type for ScheduledPlan removes: - * id, created_at, updated_at, title, user, next_run_at, last_run_at, can + * id, created_at, updated_at, title, content_title, user, next_run_at, last_run_at, last_run_status, can */ export interface IWriteScheduledPlan { /** @@ -17897,6 +18169,10 @@ export interface IWriteScheduledPlan { * Whether or not to add page breaks between tabs */ pdf_page_breaks?: boolean; + /** + * Whether or not to include filters context + */ + include_filters?: boolean; /** * IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) */ @@ -18017,9 +18293,13 @@ export interface IWriteSetting { * (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. */ embed_cookieless_v2?: boolean; + /** + * Default net new visualizations in embedded context to Modern theme + */ + embed_vis_modernization_default?: boolean; /** * Dynamic writeable type for EmbedConfig removes: - * permissions, embed_enabled + * embed_vis_modernization_default, permissions, embed_enabled */ embed_config?: IWriteEmbedConfig | null; /** @@ -18203,7 +18483,7 @@ export interface IWriteUserAttribute { */ label: string | null; /** - * Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + * Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") */ type: string | null; /** @@ -18247,6 +18527,17 @@ export interface IWriteUserAttributeWithValue { value?: string | null; } +/** + * Dynamic writeable type for UserDbConnection removes: + * can, id, name, user_id, dialect, auth_type, host, port, database, schema, jdbc_additional_params, oauth_application_id, created_at, updated_at + */ +export interface IWriteUserDbConnection { + /** + * Whether this connection is enabled + */ + enabled?: boolean; +} + /** * Dynamic writeable type for WhitelabelConfiguration removes: * id, logo_url, favicon_url diff --git a/packages/sdk/src/4.0/streams.ts b/packages/sdk/src/4.0/streams.ts index 5a1725196..f960fa5e1 100644 --- a/packages/sdk/src/4.0/streams.ts +++ b/packages/sdk/src/4.0/streams.ts @@ -25,7 +25,7 @@ */ /** - * 518 API methods + * 529 API methods */ import type { @@ -44,6 +44,7 @@ import { sdkVersion } from '../constants'; import type { IAccessToken, IAgent, + IAgentLookml, IAlert, IAlertNotifications, IAlertPatch, @@ -74,8 +75,6 @@ import type { IConversationalAnalyticsChatRequest, IConversationMessage, ICostEstimate, - ICreateCIRunRequest, - ICreateCIRunResponse, ICreateContinuousIntegrationRunRequest, ICreateCostEstimate, ICreateCredentialsApi3, @@ -128,7 +127,6 @@ import type { IGitBranch, IGitConnectionTest, IGitConnectionTestResult, - IGitDiagnosticReport, IGoldenQuery, IGroup, IGroupHierarchy, @@ -169,8 +167,8 @@ import type { IPermission, IPermissionSet, IProject, + IProjectCISuite, IProjectFile, - IProjectRun, IProjectValidation, IProjectValidationCache, IProjectWorkspace, @@ -209,6 +207,7 @@ import type { IRequestDeployRefToProduction, IRequestFolderChildren, IRequestFolderChildrenSearch, + IRequestGetContinuousIntegrationSuites, IRequestGraphDerivedTablesForModel, IRequestGraphDerivedTablesForView, IRequestLogin, @@ -230,6 +229,7 @@ import type { IRequestSearchContent, IRequestSearchContentFavorites, IRequestSearchContentViews, + IRequestSearchContinuousIntegrationRuns, IRequestSearchConversations, IRequestSearchCredentialsEmail, IRequestSearchDashboardElements, @@ -289,6 +289,7 @@ import type { IUserAttribute, IUserAttributeGroupValue, IUserAttributeWithValue, + IUserDbConnection, IUserEmailOnly, IUserLoginLockout, IUserPublic, @@ -324,7 +325,6 @@ import type { IWriteEmbedSecret, IWriteExternalOauthApplication, IWriteGitBranch, - IWriteGitDiagnosticReport, IWriteGoldenQuery, IWriteGroup, IWriteIntegration, @@ -343,6 +343,7 @@ import type { IWritePasswordConfig, IWritePermissionSet, IWriteProject, + IWriteProjectCISuite, IWriteQuery, IWriteRepositoryCredential, IWriteRole, @@ -358,6 +359,7 @@ import type { IWriteUser, IWriteUserAttribute, IWriteUserAttributeWithValue, + IWriteUserDbConnection, IWriteWhitelabelConfiguration, } from './models'; @@ -4046,6 +4048,7 @@ export class Looker40SDKStream extends APIMethods { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -4101,6 +4104,7 @@ export class Looker40SDKStream extends APIMethods { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -5059,6 +5063,91 @@ export class Looker40SDKStream extends APIMethods { ); } + /** + * ### Get All User DB Connections + * + * Returns a list of user DB connections. + * + * GET /user_db_connections -> IUserDbConnection[] + * + * @param callback streaming output function + * @param fields Requested fields. + * @param options one-time API call overrides + * + */ + async all_user_db_connections( + callback: (response: Response) => Promise, + fields?: string, + options?: Partial + ) { + return this.authStream( + callback, + 'GET', + '/user_db_connections', + { fields }, + null, + options + ); + } + + /** + * ### Update User DB Connection + * + * Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + * + * PATCH /user_db_connections/{user_db_connection_id} -> IUserDbConnection + * + * @param callback streaming output function + * @param user_db_connection_id Id of user DB connection + * @param body Partial + * @param options one-time API call overrides + * + */ + async update_user_db_connection( + callback: (response: Response) => Promise, + user_db_connection_id: string, + body: Partial, + options?: Partial + ) { + user_db_connection_id = encodeParam(user_db_connection_id); + return this.authStream( + callback, + 'PATCH', + `/user_db_connections/${user_db_connection_id}`, + null, + body, + options + ); + } + + /** + * ### Delete User DB Connection + * + * Deletes an existing user DB connection. + * + * DELETE /user_db_connections/{user_db_connection_id} -> void + * + * @param callback streaming output function + * @param user_db_connection_id Id of user DB connection + * @param options one-time API call overrides + * + */ + async delete_user_db_connection( + callback: (response: Response) => Promise, + user_db_connection_id: string, + options?: Partial + ) { + user_db_connection_id = encodeParam(user_db_connection_id); + return this.authStream( + callback, + 'DELETE', + `/user_db_connections/${user_db_connection_id}`, + null, + null, + options + ); + } + //#endregion Connection: Manage Database Connections //#region Content: Manage Content @@ -5809,6 +5898,34 @@ export class Looker40SDKStream extends APIMethods { ); } + /** + * ### Get LookML of a UDD Agent + * + * Returns the LookML representation of a user-defined (UDD) agent. + * + * GET /agents/lookml/{agent_id} -> IAgentLookml + * + * @param callback streaming output function + * @param agent_id Id of agent + * @param options one-time API call overrides + * + */ + async agent_lookml( + callback: (response: Response) => Promise, + agent_id: string, + options?: Partial + ) { + agent_id = encodeParam(agent_id); + return this.authStream( + callback, + 'GET', + `/agents/lookml/${agent_id}`, + null, + null, + options + ); + } + /** * ### Get All Conversation Messages * @@ -5975,6 +6092,43 @@ export class Looker40SDKStream extends APIMethods { ); } + /** + * ### Get Agent Responses for User Message + * + * Get all agent response messages generated for a specific user prompt. + * + * An agent response often consists of multiple message blocks (such as text explanations, + * visualizations, and follow-up suggestions). This endpoint returns all response messages + * following the specified user message up to the next user prompt. + * + * GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> IConversationMessage[] + * + * @param callback streaming output function + * @param conversation_id Conversation ID + * @param user_message_id User Conversation Message ID + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + async get_conversation_message_responses( + callback: (response: Response) => Promise, + conversation_id: string, + user_message_id: string, + fields?: string, + options?: Partial + ) { + conversation_id = encodeParam(conversation_id); + user_message_id = encodeParam(user_message_id); + return this.authStream( + callback, + 'GET', + `/conversations/${conversation_id}/messages/${user_message_id}/responses`, + { fields }, + null, + options + ); + } + /** * ### Search Conversations * @@ -6579,6 +6733,40 @@ export class Looker40SDKStream extends APIMethods { ); } + /** + * ### Get Dashboard Image + * + * Returns the image content for a dashboard element. + * + * GET /dashboards/{dashboard_id}/images/{image_slug} -> string + * + * @remarks + * **NOTE**: Binary content may be returned by this function. + * + * @param callback streaming output function + * @param dashboard_id Id of dashboard + * @param image_slug Slug of image + * @param options one-time API call overrides + * + */ + async get_dashboard_image( + callback: (response: Response) => Promise, + dashboard_id: string, + image_slug: string, + options?: Partial + ) { + dashboard_id = encodeParam(dashboard_id); + image_slug = encodeParam(image_slug); + return this.authStream( + callback, + 'GET', + `/dashboards/${dashboard_id}/images/${image_slug}`, + null, + null, + options + ); + } + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -6635,6 +6823,8 @@ export class Looker40SDKStream extends APIMethods { * Boolean search params accept only "true" and "false" as values. * * + * **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + * * The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. * * Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -6710,6 +6900,7 @@ export class Looker40SDKStream extends APIMethods { * @param callback streaming output function * @param dashboard_id Dashboard id to move. * @param folder_id Folder id to move to. + * @param project_name LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. * @param options one-time API call overrides * */ @@ -6717,6 +6908,7 @@ export class Looker40SDKStream extends APIMethods { callback: (response: Response) => Promise, dashboard_id: string, folder_id: string, + project_name?: string, options?: Partial ) { dashboard_id = encodeParam(dashboard_id); @@ -6724,7 +6916,7 @@ export class Looker40SDKStream extends APIMethods { callback, 'PATCH', `/dashboards/${dashboard_id}/move`, - { folder_id }, + { folder_id, project_name }, null, options ); @@ -9366,6 +9558,8 @@ export class Looker40SDKStream extends APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /looks/{look_id}/run/{result_format} -> string * * @remarks @@ -9983,68 +10177,97 @@ export class Looker40SDKStream extends APIMethods { //#region Project: Manage Projects /** - * ### Fetches a CI Run. - * - * This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + * ### Search Continuous Integration Runs for a project. * - * GET /projects/{project_id}/ci/runs/{run_id} -> IProjectRun + * Returns an array of Continuous Integration Run objects that match the specified search criteria. * - * @deprecated + * GET /projects/{project_id}/continuous_integration/runs/search -> ICIRun[] * * @param callback streaming output function - * @param project_id Project Id - * @param run_id Run Id - * @param fields Requested fields + * @param request composed interface "IRequestSearchContinuousIntegrationRuns" for complex method parameters * @param options one-time API call overrides * */ - async get_ci_run( - callback: (response: Response) => Promise, - project_id: string, - run_id: string, - fields?: string, + async search_continuous_integration_runs( + callback: (response: Response) => Promise, + request: IRequestSearchContinuousIntegrationRuns, options?: Partial ) { - project_id = encodeParam(project_id); - run_id = encodeParam(run_id); - return this.authStream( + request.project_id = encodeParam(request.project_id); + return this.authStream( callback, 'GET', - `/projects/${project_id}/ci/runs/${run_id}`, - { fields }, + `/projects/${request.project_id}/continuous_integration/runs/search`, + { + fields: request.fields, + suite_id: request.suite_id, + status: request.status, + user_id: request.user_id, + trigger_type: request.trigger_type, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + }, null, options ); } /** - * ### Creates a CI Run. + * ### Fetches Multiple CI Suite Configurations for Project. * - * This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + * GET /projects/{project_id}/continuous_integration/suites -> IProjectCISuite[] * - * POST /projects/{project_id}/ci/run -> ICreateCIRunResponse + * @param callback streaming output function + * @param request composed interface "IRequestGetContinuousIntegrationSuites" for complex method parameters + * @param options one-time API call overrides * - * @deprecated + */ + async get_continuous_integration_suites( + callback: (response: Response) => Promise, + request: IRequestGetContinuousIntegrationSuites, + options?: Partial + ) { + request.project_id = encodeParam(request.project_id); + return this.authStream( + callback, + 'GET', + `/projects/${request.project_id}/continuous_integration/suites`, + { + fields: request.fields, + limit: request.limit, + offset: request.offset, + created_at: request.created_at, + }, + null, + options + ); + } + + /** + * ### Fetches a CI Suite Configuration. + * + * POST /projects/{project_id}/continuous_integration/suites -> IProjectCISuite * * @param callback streaming output function * @param project_id Project Id - * @param body Partial + * @param body Partial * @param fields Requested fields * @param options one-time API call overrides * */ - async create_ci_run( - callback: (response: Response) => Promise, + async create_continuous_integration_suite( + callback: (response: Response) => Promise, project_id: string, - body: Partial, + body: Partial, fields?: string, options?: Partial ) { project_id = encodeParam(project_id); - return this.authStream( + return this.authStream( callback, 'POST', - `/projects/${project_id}/ci/run`, + `/projects/${project_id}/continuous_integration/suites`, { fields }, body, options @@ -10052,94 +10275,94 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Creates and queues a Continuous Integration Run. + * ### Fetches a CI Suite Configuration. * - * POST /projects/{project_id}/continuous_integration/runs -> ICIRun + * GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> IProjectCISuite * * @param callback streaming output function * @param project_id Project Id - * @param body Partial + * @param suite_id Suite Id * @param fields Requested fields * @param options one-time API call overrides * */ - async create_continuous_integration_run( - callback: (response: Response) => Promise, + async get_continuous_integration_suite( + callback: (response: Response) => Promise, project_id: string, - body: Partial, + suite_id: string, fields?: string, options?: Partial ) { project_id = encodeParam(project_id); - return this.authStream( + suite_id = encodeParam(suite_id); + return this.authStream( callback, - 'POST', - `/projects/${project_id}/continuous_integration/runs`, + 'GET', + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, { fields }, - body, + null, options ); } /** - * ### Gets a Continuous Integration run. + * ### Updates a Continuous Integration Suite. * - * GET /projects/{project_id}/continuous_integration/runs/{run_id} -> ICIRun + * PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> IProjectCISuite * * @param callback streaming output function * @param project_id Project Id - * @param run_id Run Id + * @param suite_id Suite Id + * @param body Partial * @param fields Requested fields * @param options one-time API call overrides * */ - async get_continuous_integration_run( - callback: (response: Response) => Promise, + async update_continuous_integration_suite( + callback: (response: Response) => Promise, project_id: string, - run_id: string, + suite_id: string, + body: Partial, fields?: string, options?: Partial ) { project_id = encodeParam(project_id); - run_id = encodeParam(run_id); - return this.authStream( + suite_id = encodeParam(suite_id); + return this.authStream( callback, - 'GET', - `/projects/${project_id}/continuous_integration/runs/${run_id}`, + 'PATCH', + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, { fields }, - null, + body, options ); } /** - * ### Generate Lockfile for All LookML Dependencies + * ### Deletes a Continuous Integration Suite. * - * Git must have been configured, must be in dev mode and deploy permission required - * - * Install_all is a two step process - * 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref. - * 2. The project will then write out a lockfile including each remote_dependency with its resolved ref. - * - * POST /projects/{project_id}/manifest/lock_all -> string + * DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> string * * @param callback streaming output function - * @param project_id Id of project + * @param project_id Project Id + * @param suite_id Suite Id * @param fields Requested fields * @param options one-time API call overrides * */ - async lock_all( + async delete_continuous_integration_suite( callback: (response: Response) => Promise, project_id: string, + suite_id: string, fields?: string, options?: Partial ) { project_id = encodeParam(project_id); + suite_id = encodeParam(suite_id); return this.authStream( callback, - 'POST', - `/projects/${project_id}/manifest/lock_all`, + 'DELETE', + `/projects/${project_id}/continuous_integration/suites/${suite_id}`, { fields }, null, options @@ -10147,63 +10370,218 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Get All Git Branches - * - * Returns a list of git branches in the project repository + * ### Creates and queues a Continuous Integration Run. * - * GET /projects/{project_id}/git_branches -> IGitBranch[] + * POST /projects/{project_id}/continuous_integration/runs -> ICIRun * * @param callback streaming output function * @param project_id Project Id + * @param body Partial + * @param fields Requested fields * @param options one-time API call overrides * */ - async all_git_branches( - callback: (response: Response) => Promise, + async create_continuous_integration_run( + callback: (response: Response) => Promise, project_id: string, + body: Partial, + fields?: string, options?: Partial ) { project_id = encodeParam(project_id); - return this.authStream( + return this.authStream( callback, - 'GET', - `/projects/${project_id}/git_branches`, - null, - null, + 'POST', + `/projects/${project_id}/continuous_integration/runs`, + { fields }, + body, options ); } /** - * ### Get the Current Git Branch - * - * Returns the git branch currently checked out in the given project repository + * ### Duplicates and queues a Continuous Integration Run. * - * GET /projects/{project_id}/git_branch -> IGitBranch + * POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> ICIRun * * @param callback streaming output function * @param project_id Project Id + * @param run_id Run ID to duplicate and re-run + * @param fields Requested fields * @param options one-time API call overrides * */ - async git_branch( - callback: (response: Response) => Promise, + async duplicate_continuous_integration_run( + callback: (response: Response) => Promise, project_id: string, + run_id: string, + fields?: string, options?: Partial ) { project_id = encodeParam(project_id); - return this.authStream( + run_id = encodeParam(run_id); + return this.authStream( callback, - 'GET', - `/projects/${project_id}/git_branch`, - null, + 'POST', + `/projects/${project_id}/continuous_integration/runs/${run_id}/duplicate`, + { fields }, null, options ); } /** - * ### Checkout and/or reset --hard an existing Git Branch + * ### Gets a Continuous Integration run. + * + * GET /projects/{project_id}/continuous_integration/runs/{run_id} -> ICIRun + * + * @param callback streaming output function + * @param project_id Project Id + * @param run_id Run Id + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + async get_continuous_integration_run( + callback: (response: Response) => Promise, + project_id: string, + run_id: string, + fields?: string, + options?: Partial + ) { + project_id = encodeParam(project_id); + run_id = encodeParam(run_id); + return this.authStream( + callback, + 'GET', + `/projects/${project_id}/continuous_integration/runs/${run_id}`, + { fields }, + null, + options + ); + } + + /** + * ### Cancels a Continuous Integration Run. + * + * DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> string + * + * @param callback streaming output function + * @param project_id Project Id + * @param run_id Run Id + * @param options one-time API call overrides + * + */ + async cancel_continuous_integration_run( + callback: (response: Response) => Promise, + project_id: string, + run_id: string, + options?: Partial + ) { + project_id = encodeParam(project_id); + run_id = encodeParam(run_id); + return this.authStream( + callback, + 'DELETE', + `/projects/${project_id}/continuous_integration/runs/${run_id}`, + null, + null, + options + ); + } + + /** + * ### Generate Lockfile for All LookML Dependencies + * + * Git must have been configured, must be in dev mode and deploy permission required + * + * Install_all is a two step process + * 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref. + * 2. The project will then write out a lockfile including each remote_dependency with its resolved ref. + * + * POST /projects/{project_id}/manifest/lock_all -> string + * + * @param callback streaming output function + * @param project_id Id of project + * @param fields Requested fields + * @param options one-time API call overrides + * + */ + async lock_all( + callback: (response: Response) => Promise, + project_id: string, + fields?: string, + options?: Partial + ) { + project_id = encodeParam(project_id); + return this.authStream( + callback, + 'POST', + `/projects/${project_id}/manifest/lock_all`, + { fields }, + null, + options + ); + } + + /** + * ### Get All Git Branches + * + * Returns a list of git branches in the project repository + * + * GET /projects/{project_id}/git_branches -> IGitBranch[] + * + * @param callback streaming output function + * @param project_id Project Id + * @param options one-time API call overrides + * + */ + async all_git_branches( + callback: (response: Response) => Promise, + project_id: string, + options?: Partial + ) { + project_id = encodeParam(project_id); + return this.authStream( + callback, + 'GET', + `/projects/${project_id}/git_branches`, + null, + null, + options + ); + } + + /** + * ### Get the Current Git Branch + * + * Returns the git branch currently checked out in the given project repository + * + * GET /projects/{project_id}/git_branch -> IGitBranch + * + * @param callback streaming output function + * @param project_id Project Id + * @param options one-time API call overrides + * + */ + async git_branch( + callback: (response: Response) => Promise, + project_id: string, + options?: Partial + ) { + project_id = encodeParam(project_id); + return this.authStream( + callback, + 'GET', + `/projects/${project_id}/git_branch`, + null, + null, + options + ); + } + + /** + * ### Checkout and/or reset --hard an existing Git Branch * * Only allowed in development mode * - Call `update_session` to select the 'dev' workspace. @@ -10522,6 +10900,60 @@ export class Looker40SDKStream extends APIMethods { ); } + /** + * ### Pull from Production + * Pulls changes from the remote production branch into the current development workspace. + * + * POST /projects/{project_id}/pull_from_production -> string + * + * @param callback streaming output function + * @param project_id Id of project + * @param options one-time API call overrides + * + */ + async pull_project_from_production( + callback: (response: Response) => Promise, + project_id: string, + options?: Partial + ) { + project_id = encodeParam(project_id); + return this.authStream( + callback, + 'POST', + `/projects/${project_id}/pull_from_production`, + null, + null, + options + ); + } + + /** + * ### Pull from Remote + * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + * + * POST /projects/{project_id}/pull_from_remote -> string + * + * @param callback streaming output function + * @param project_id Id of project + * @param options one-time API call overrides + * + */ + async pull_project_from_remote( + callback: (response: Response) => Promise, + project_id: string, + options?: Partial + ) { + project_id = encodeParam(project_id); + return this.authStream( + callback, + 'POST', + `/projects/${project_id}/pull_from_remote`, + null, + null, + options + ); + } + /** * ### Get All Projects * @@ -11082,94 +11514,6 @@ export class Looker40SDKStream extends APIMethods { ); } - /** - * ### Initiate Git Diagnosis Suite - * - * POST /projects/{project_id}/git_diagnostic_report -> IGitDiagnosticReport - * - * @param callback streaming output function - * @param project_id Looker Project ID - * @param body Partial - * @param options one-time API call overrides - * - */ - async create_git_diagnostic_report( - callback: (response: Response) => Promise, - project_id: string, - body: Partial, - options?: Partial - ) { - project_id = encodeParam(project_id); - return this.authStream( - callback, - 'POST', - `/projects/${project_id}/git_diagnostic_report`, - null, - body, - options - ); - } - - /** - * ### Retrieve Live Git Diagnostic Suite Execution Status - * - * GET /projects/{project_id}/git_diagnostic_report/{report_id} -> IGitDiagnosticReport - * - * @param callback streaming output function - * @param project_id Looker Project ID - * @param report_id Report ID - * @param options one-time API call overrides - * - */ - async get_git_diagnostic_report( - callback: (response: Response) => Promise, - project_id: string, - report_id: string, - options?: Partial - ) { - project_id = encodeParam(project_id); - report_id = encodeParam(report_id); - return this.authStream( - callback, - 'GET', - `/projects/${project_id}/git_diagnostic_report/${report_id}`, - null, - null, - options - ); - } - - /** - * ### Repair Git Configuration Issues - * - * POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> IGitDiagnosticReport - * - * @param callback streaming output function - * @param project_id Looker Project ID - * @param report_id Report ID - * @param body Partial - * @param options one-time API call overrides - * - */ - async repair_git_diagnostic_report( - callback: (response: Response) => Promise, - project_id: string, - report_id: string, - body: Partial, - options?: Partial - ) { - project_id = encodeParam(project_id); - report_id = encodeParam(report_id); - return this.authStream( - callback, - 'POST', - `/projects/${project_id}/git_diagnostic_report/${report_id}/repair`, - null, - body, - options - ); - } - /** * ### Configure Repository Credential for a remote dependency * @@ -11280,6 +11624,8 @@ export class Looker40SDKStream extends APIMethods { * Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. * After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /query_tasks -> IQueryTask * * @param callback streaming output function @@ -11573,6 +11919,8 @@ export class Looker40SDKStream extends APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/{query_id}/run/{result_format} -> string * * @remarks @@ -11666,6 +12014,8 @@ export class Looker40SDKStream extends APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /queries/run/{result_format} -> string * * @remarks @@ -11760,6 +12110,8 @@ export class Looker40SDKStream extends APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> string * * @remarks @@ -13460,6 +13812,10 @@ export class Looker40SDKStream extends APIMethods { recipient: request.recipient, destination_type: request.destination_type, delivery_format: request.delivery_format, + all_states: request.all_states, + run_once: request.run_once, + enabled: request.enabled, + last_run_status: request.last_run_status, filter_or: request.filter_or, }, null, @@ -14474,24 +14830,29 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Get information about the current user; i.e. the user account currently calling the API. + * ### Email/password login information for the specified user. * - * GET /user -> IUser + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_email -> ICredentialsEmail * * @param callback streaming output function + * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async me( - callback: (response: Response) => Promise, + async user_credentials_email( + callback: (response: Response) => Promise, + user_id: string, fields?: string, options?: Partial ) { - return this.authStream( + user_id = encodeParam(user_id); + return this.authStream( callback, 'GET', - '/user', + `/users/${user_id}/credentials_email`, { fields }, null, options @@ -14499,59 +14860,63 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Get information about all users. + * ### Email/password login information for the specified user. * - * GET /users -> IUser[] + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * POST /users/{user_id}/credentials_email -> ICredentialsEmail * * @param callback streaming output function - * @param request composed interface "IRequestAllUsers" for complex method parameters + * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. * @param options one-time API call overrides * */ - async all_users( - callback: (response: Response) => Promise, - request: IRequestAllUsers, + async create_user_credentials_email( + callback: (response: Response) => Promise, + user_id: string, + body: Partial, + fields?: string, options?: Partial ) { - return this.authStream( + user_id = encodeParam(user_id); + return this.authStream( callback, - 'GET', - '/users', - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - ids: request.ids, - }, - null, + 'POST', + `/users/${user_id}/credentials_email`, + { fields }, + body, options ); } /** - * ### Create a user with the specified information. + * ### Email/password login information for the specified user. * - * POST /users -> IUser + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * PATCH /users/{user_id}/credentials_email -> ICredentialsEmail * * @param callback streaming output function - * @param body Partial + * @param user_id Id of user + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - async create_user( - callback: (response: Response) => Promise, - body?: Partial, + async update_user_credentials_email( + callback: (response: Response) => Promise, + user_id: string, + body: Partial, fields?: string, options?: Partial ) { - return this.authStream( + user_id = encodeParam(user_id); + return this.authStream( callback, - 'POST', - '/users', + 'PATCH', + `/users/${user_id}/credentials_email`, { fields }, body, options @@ -14559,131 +14924,109 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Search users - * - * Returns all* user records that match the given search criteria. - * - * If multiple search params are given and `filter_or` is FALSE or not specified, - * search params are combined in a logical AND operation. - * Only rows that match *all* search param criteria will be returned. - * - * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - * Results will include rows that match **any** of the search criteria. - * - * String search params use case-insensitive matching. - * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - * example="dan%" will match "danger" and "Danzig" but not "David" - * example="D_m%" will match "Damage" and "dump" + * ### Email/password login information for the specified user. * - * Integer search params can accept a single value or a comma separated list of values. The multiple - * values will be combined under a logical OR operation - results will match at least one of - * the given values. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - * or exclude (respectively) rows where the column is null. + * DELETE /users/{user_id}/credentials_email -> string * - * Boolean search params accept only "true" and "false" as values. + * @param callback streaming output function + * @param user_id Id of user + * @param options one-time API call overrides * + */ + async delete_user_credentials_email( + callback: (response: Response) => Promise, + user_id: string, + options?: Partial + ) { + user_id = encodeParam(user_id); + return this.authStream( + callback, + 'DELETE', + `/users/${user_id}/credentials_email`, + null, + null, + options + ); + } + + /** + * ### Create a password reset token. + * This will create a cryptographically secure random password reset token for the user. + * If the user already has a password reset token then this invalidates the old token and creates a new one. + * The token is expressed as the 'password_reset_url' of the user's email/password credential object. + * This takes an optional 'expires' param to indicate if the new token should be an expiring token. + * Tokens that expire are typically used for self-service password resets for existing users. + * Invitation emails for new users typically are not set to expire. + * The expire period is always 60 minutes when expires is enabled. + * This method can be called with an empty body. * - * (*) Results are always filtered to the level of information the caller is permitted to view. - * Looker admins can see all user details; normal users in an open system can see - * names of other users but no details; normal users in a closed system can only see - * names of other users who are members of the same group as the user. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/search -> IUser[] + * POST /users/{user_id}/credentials_email/password_reset -> ICredentialsEmail * * @param callback streaming output function - * @param request composed interface "IRequestSearchUsers" for complex method parameters + * @param request composed interface "IRequestCreateUserCredentialsEmailPasswordReset" for complex method parameters * @param options one-time API call overrides * */ - async search_users( - callback: (response: Response) => Promise, - request: IRequestSearchUsers, + async create_user_credentials_email_password_reset( + callback: (response: Response) => Promise, + request: IRequestCreateUserCredentialsEmailPasswordReset, options?: Partial ) { - return this.authStream( + request.user_id = encodeParam(request.user_id); + return this.authStream( callback, - 'GET', - '/users/search', - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - id: request.id, - first_name: request.first_name, - last_name: request.last_name, - full_name: request.full_name, - verified_looker_employee: request.verified_looker_employee, - embed_user: request.embed_user, - email: request.email, - is_disabled: request.is_disabled, - filter_or: request.filter_or, - content_metadata_id: request.content_metadata_id, - group_id: request.group_id, - can_manage_api3_creds: request.can_manage_api3_creds, - is_service_account: request.is_service_account, - }, + 'POST', + `/users/${request.user_id}/credentials_email/password_reset`, + { expires: request.expires, fields: request.fields }, null, options ); } /** - * ### Search for user accounts by name - * - * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. - * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. + * ### Send a password reset token. + * This will send a password reset email to the user. If a password reset token does not already exist + * for this user, it will create one and then send it. + * If the user has not yet set up their account, it will send a setup email to the user. + * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + * Password reset URLs will expire in 60 minutes. + * This method can be called with an empty body. * - * Any additional search params will be combined into a logical AND expression. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/search/names/{pattern} -> IUser[] + * POST /users/{user_id}/credentials_email/send_password_reset -> ICredentialsEmail * * @param callback streaming output function - * @param request composed interface "IRequestSearchUsersNames" for complex method parameters + * @param user_id Id of user + * @param fields Requested fields. * @param options one-time API call overrides * */ - async search_users_names( - callback: (response: Response) => Promise, - request: IRequestSearchUsersNames, + async send_user_credentials_email_password_reset( + callback: (response: Response) => Promise, + user_id: string, + fields?: string, options?: Partial ) { - request.pattern = encodeParam(request.pattern); - return this.authStream( + user_id = encodeParam(user_id); + return this.authStream( callback, - 'GET', - `/users/search/names/${request.pattern}`, - { - fields: request.fields, - page: request.page, - per_page: request.per_page, - limit: request.limit, - offset: request.offset, - sorts: request.sorts, - id: request.id, - first_name: request.first_name, - last_name: request.last_name, - verified_looker_employee: request.verified_looker_employee, - email: request.email, - is_disabled: request.is_disabled, - }, + 'POST', + `/users/${user_id}/credentials_email/send_password_reset`, + { fields }, null, options ); } /** - * ### Get information about the user with a specific id. - * - * If the caller is an admin or the caller is the user being specified, then full user information will - * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains - * The user name and avatar url, but no sensitive information. + * ### Google authentication login information for the specified user. * - * GET /users/{user_id} -> IUser + * GET /users/{user_id}/credentials_google -> ICredentialsGoogle * * @param callback streaming output function * @param user_id Id of user @@ -14691,17 +15034,17 @@ export class Looker40SDKStream extends APIMethods { * @param options one-time API call overrides * */ - async user( - callback: (response: Response) => Promise, + async user_credentials_google( + callback: (response: Response) => Promise, user_id: string, fields?: string, options?: Partial ) { user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, 'GET', - `/users/${user_id}`, + `/users/${user_id}/credentials_google`, { fields }, null, options @@ -14709,60 +15052,74 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Update information about the user with a specific id. + * ### Delete Google authentication login information for the specified user. * - * PATCH /users/{user_id} -> IUser + * DELETE /users/{user_id}/credentials_google -> string * * @param callback streaming output function * @param user_id Id of user - * @param body Partial - * @param fields Requested fields. * @param options one-time API call overrides * */ - async update_user( - callback: (response: Response) => Promise, + async delete_user_credentials_google( + callback: (response: Response) => Promise, user_id: string, - body: Partial, - fields?: string, options?: Partial ) { user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'PATCH', - `/users/${user_id}`, - { fields }, - body, + 'DELETE', + `/users/${user_id}/credentials_google`, + null, + null, options ); } /** - * ### Delete the user with a specific id. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the users or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. + * GET /users/{user_id}/credentials_looker_openid -> ICredentialsLookerOpenid * - * The user cannot delete themselves. - * The last administrator user cannot be deleted. + * @param callback streaming output function + * @param user_id Id of user + * @param fields Requested fields. + * @param options one-time API call overrides * - * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - * Please use the dedicated `delete_service_account` endpoint. + */ + async user_credentials_looker_openid( + callback: (response: Response) => Promise, + user_id: string, + fields?: string, + options?: Partial + ) { + user_id = encodeParam(user_id); + return this.authStream( + callback, + 'GET', + `/users/${user_id}/credentials_looker_openid`, + { fields }, + null, + options + ); + } + + /** + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * DELETE /users/{user_id} -> string + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_looker_openid -> string * * @param callback streaming output function * @param user_id Id of user * @param options one-time API call overrides * */ - async delete_user( + async delete_user_credentials_looker_openid( callback: (response: Response) => Promise, user_id: string, options?: Partial @@ -14771,7 +15128,7 @@ export class Looker40SDKStream extends APIMethods { return this.authStream( callback, 'DELETE', - `/users/${user_id}`, + `/users/${user_id}/credentials_looker_openid`, null, null, options @@ -14779,59 +15136,83 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Get information about the user with a credential of given type with specific id. + * ### Saml authentication login information for the specified user. * - * This is used to do things like find users by their embed external_user_id. Or, find the user with - * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - * for the user and is specific to each type of credential. + * GET /users/{user_id}/credentials_saml -> ICredentialsSaml * - * An example using the Ruby sdk might look like: + * @param callback streaming output function + * @param user_id Id of user + * @param fields Requested fields. + * @param options one-time API call overrides * - * `sdk.user_for_credential('embed', 'customer-4959425')` + */ + async user_credentials_saml( + callback: (response: Response) => Promise, + user_id: string, + fields?: string, + options?: Partial + ) { + user_id = encodeParam(user_id); + return this.authStream( + callback, + 'GET', + `/users/${user_id}/credentials_saml`, + { fields }, + null, + options + ); + } + + /** + * ### Delete Saml authentication login information for the specified user. * - * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - * which field in the given credential type is actually searched when finding a user with the supplied - * 'credential_id'. + * DELETE /users/{user_id}/credentials_saml -> string * - * | Credential Types | Id Field Matched | - * | ---------------- | ---------------- | - * | email | email | - * | google | google_user_id | - * | saml | saml_user_id | - * | oidc | oidc_user_id | - * | ldap | ldap_id | - * | api | token | - * | api3 | client_id | - * | embed | external_user_id | - * | looker_openid | email | + * @param callback streaming output function + * @param user_id Id of user + * @param options one-time API call overrides * - * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. + */ + async delete_user_credentials_saml( + callback: (response: Response) => Promise, + user_id: string, + options?: Partial + ) { + user_id = encodeParam(user_id); + return this.authStream( + callback, + 'DELETE', + `/users/${user_id}/credentials_saml`, + null, + null, + options + ); + } + + /** + * ### Get two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/credential/{credential_type}/{credential_id} -> IUser + * GET /users/{user_id}/credentials_totp -> ICredentialsTotp * * @param callback streaming output function - * @param credential_type Type name of credential - * @param credential_id Id of credential + * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_for_credential( - callback: (response: Response) => Promise, - credential_type: string, - credential_id: string, + async user_credentials_totp( + callback: (response: Response) => Promise, + user_id: string, fields?: string, options?: Partial ) { - credential_type = encodeParam(credential_type); - credential_id = encodeParam(credential_id); - return this.authStream( + user_id = encodeParam(user_id); + return this.authStream( callback, 'GET', - `/users/credential/${credential_type}/${credential_id}`, + `/users/${user_id}/credentials_totp`, { fields }, null, options @@ -14839,31 +15220,31 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Update information for a specific service account. This action is restricted to Looker admins. + * ### Create two-factor login information for the specified user. * - * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * PATCH /users/service_accounts/{user_id} -> IServiceAccount + * POST /users/{user_id}/credentials_totp -> ICredentialsTotp * * @param callback streaming output function - * @param user_id Id of service account - * @param body Partial + * @param user_id Id of user + * @param body WARNING: no writeable properties found for POST, PUT, or PATCH * @param fields Requested fields. * @param options one-time API call overrides * */ - async update_service_account( - callback: (response: Response) => Promise, + async create_user_credentials_totp( + callback: (response: Response) => Promise, user_id: string, - body: Partial, + body?: Partial, fields?: string, options?: Partial ) { user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'PATCH', - `/users/service_accounts/${user_id}`, + 'POST', + `/users/${user_id}/credentials_totp`, { fields }, body, options @@ -14871,26 +15252,18 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Delete the service account with a specific id. - * - * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. + * ### Delete two-factor login information for the specified user. * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the service account or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. - * - * The service account cannot delete itself. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * DELETE /users/service_accounts/{user_id} -> string + * DELETE /users/{user_id}/credentials_totp -> string * * @param callback streaming output function - * @param user_id Id of service account user + * @param user_id Id of user * @param options one-time API call overrides * */ - async delete_service_account( + async delete_user_credentials_totp( callback: (response: Response) => Promise, user_id: string, options?: Partial @@ -14899,7 +15272,7 @@ export class Looker40SDKStream extends APIMethods { return this.authStream( callback, 'DELETE', - `/users/service_accounts/${user_id}`, + `/users/${user_id}/credentials_totp`, null, null, options @@ -14907,29 +15280,24 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Get information about the current user; i.e. the user account currently calling the API. * - * GET /users/{user_id}/credentials_email -> ICredentialsEmail + * GET /user -> IUser * * @param callback streaming output function - * @param user_id Id of user * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_credentials_email( - callback: (response: Response) => Promise, - user_id: string, + async me( + callback: (response: Response) => Promise, fields?: string, options?: Partial ) { - user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, 'GET', - `/users/${user_id}/credentials_email`, + '/user', { fields }, null, options @@ -14937,63 +15305,59 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Get information about all users. * - * POST /users/{user_id}/credentials_email -> ICredentialsEmail + * GET /users -> IUser[] * * @param callback streaming output function - * @param user_id Id of user - * @param body Partial - * @param fields Requested fields. + * @param request composed interface "IRequestAllUsers" for complex method parameters * @param options one-time API call overrides * */ - async create_user_credentials_email( - callback: (response: Response) => Promise, - user_id: string, - body: Partial, - fields?: string, + async all_users( + callback: (response: Response) => Promise, + request: IRequestAllUsers, options?: Partial ) { - user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'POST', - `/users/${user_id}/credentials_email`, - { fields }, - body, + 'GET', + '/users', + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + ids: request.ids, + }, + null, options ); } /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Create a user with the specified information. * - * PATCH /users/{user_id}/credentials_email -> ICredentialsEmail + * POST /users -> IUser * * @param callback streaming output function - * @param user_id Id of user - * @param body Partial + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - async update_user_credentials_email( - callback: (response: Response) => Promise, - user_id: string, - body: Partial, + async create_user( + callback: (response: Response) => Promise, + body?: Partial, fields?: string, options?: Partial ) { - user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'PATCH', - `/users/${user_id}/credentials_email`, + 'POST', + '/users', { fields }, body, options @@ -15001,220 +15365,338 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Email/password login information for the specified user. + * ### Search users * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all* user records that match the given search criteria. * - * DELETE /users/{user_id}/credentials_email -> string + * If multiple search params are given and `filter_or` is FALSE or not specified, + * search params are combined in a logical AND operation. + * Only rows that match *all* search param criteria will be returned. + * + * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. + * Results will include rows that match **any** of the search criteria. + * + * String search params use case-insensitive matching. + * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. + * example="dan%" will match "danger" and "Danzig" but not "David" + * example="D_m%" will match "Damage" and "dump" + * + * Integer search params can accept a single value or a comma separated list of values. The multiple + * values will be combined under a logical OR operation - results will match at least one of + * the given values. + * + * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match + * or exclude (respectively) rows where the column is null. + * + * Boolean search params accept only "true" and "false" as values. + * + * + * (*) Results are always filtered to the level of information the caller is permitted to view. + * Looker admins can see all user details; normal users in an open system can see + * names of other users but no details; normal users in a closed system can only see + * names of other users who are members of the same group as the user. + * + * GET /users/search -> IUser[] * * @param callback streaming output function - * @param user_id Id of user + * @param request composed interface "IRequestSearchUsers" for complex method parameters * @param options one-time API call overrides * */ - async delete_user_credentials_email( - callback: (response: Response) => Promise, - user_id: string, + async search_users( + callback: (response: Response) => Promise, + request: IRequestSearchUsers, options?: Partial ) { - user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'DELETE', - `/users/${user_id}/credentials_email`, - null, + 'GET', + '/users/search', + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + id: request.id, + first_name: request.first_name, + last_name: request.last_name, + full_name: request.full_name, + verified_looker_employee: request.verified_looker_employee, + embed_user: request.embed_user, + email: request.email, + is_disabled: request.is_disabled, + filter_or: request.filter_or, + content_metadata_id: request.content_metadata_id, + group_id: request.group_id, + can_manage_api3_creds: request.can_manage_api3_creds, + is_service_account: request.is_service_account, + }, null, options ); } /** - * ### Two-factor login information for the specified user. + * ### Search for user accounts by name * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. + * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. * - * GET /users/{user_id}/credentials_totp -> ICredentialsTotp + * Any additional search params will be combined into a logical AND expression. + * + * GET /users/search/names/{pattern} -> IUser[] * * @param callback streaming output function - * @param user_id Id of user - * @param fields Requested fields. + * @param request composed interface "IRequestSearchUsersNames" for complex method parameters * @param options one-time API call overrides * */ - async user_credentials_totp( - callback: (response: Response) => Promise, - user_id: string, - fields?: string, + async search_users_names( + callback: (response: Response) => Promise, + request: IRequestSearchUsersNames, options?: Partial ) { - user_id = encodeParam(user_id); - return this.authStream( + request.pattern = encodeParam(request.pattern); + return this.authStream( callback, 'GET', - `/users/${user_id}/credentials_totp`, - { fields }, + `/users/search/names/${request.pattern}`, + { + fields: request.fields, + page: request.page, + per_page: request.per_page, + limit: request.limit, + offset: request.offset, + sorts: request.sorts, + id: request.id, + first_name: request.first_name, + last_name: request.last_name, + verified_looker_employee: request.verified_looker_employee, + email: request.email, + is_disabled: request.is_disabled, + }, null, options ); } /** - * ### Two-factor login information for the specified user. + * ### Get information about the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * If the caller is an admin or the caller is the user being specified, then full user information will + * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains + * The user name and avatar url, but no sensitive information. * - * POST /users/{user_id}/credentials_totp -> ICredentialsTotp + * GET /users/{user_id} -> IUser * * @param callback streaming output function * @param user_id Id of user - * @param body WARNING: no writeable properties found for POST, PUT, or PATCH * @param fields Requested fields. * @param options one-time API call overrides * */ - async create_user_credentials_totp( - callback: (response: Response) => Promise, + async user( + callback: (response: Response) => Promise, user_id: string, - body?: Partial, fields?: string, options?: Partial ) { user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'POST', - `/users/${user_id}/credentials_totp`, + 'GET', + `/users/${user_id}`, { fields }, - body, + null, options ); } /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Update information about the user with a specific id. * - * DELETE /users/{user_id}/credentials_totp -> string + * PATCH /users/{user_id} -> IUser * * @param callback streaming output function * @param user_id Id of user + * @param body Partial + * @param fields Requested fields. * @param options one-time API call overrides * */ - async delete_user_credentials_totp( - callback: (response: Response) => Promise, + async update_user( + callback: (response: Response) => Promise, user_id: string, + body: Partial, + fields?: string, options?: Partial ) { user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'DELETE', - `/users/${user_id}/credentials_totp`, - null, - null, + 'PATCH', + `/users/${user_id}`, + { fields }, + body, options ); } /** - * ### LDAP login information for the specified user. + * ### Delete the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. * - * GET /users/{user_id}/credentials_ldap -> ICredentialsLDAP + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the users or that use their content will be deleted. + * * Alerts owned by the users will be deleted. + * + * The user cannot delete themselves. + * The last administrator user cannot be deleted. + * + * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + * Please use the dedicated `delete_service_account` endpoint. + * + * DELETE /users/{user_id} -> string * * @param callback streaming output function * @param user_id Id of user - * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_credentials_ldap( - callback: (response: Response) => Promise, + async delete_user( + callback: (response: Response) => Promise, user_id: string, - fields?: string, options?: Partial ) { user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'GET', - `/users/${user_id}/credentials_ldap`, - { fields }, + 'DELETE', + `/users/${user_id}`, + null, null, options ); } /** - * ### LDAP login information for the specified user. + * ### Get information about the user with a credential of given type with specific id. + * + * This is used to do things like find users by their embed external_user_id. Or, find the user with + * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + * for the user and is specific to each type of credential. + * + * An example using the Ruby sdk might look like: + * + * `sdk.user_for_credential('embed', 'customer-4959425')` + * + * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + * which field in the given credential type is actually searched when finding a user with the supplied + * 'credential_id'. + * + * | Credential Types | Id Field Matched | + * | ---------------- | ---------------- | + * | email | email | + * | google | google_user_id | + * | saml | saml_user_id | + * | oidc | oidc_user_id | + * | ldap | ldap_id | + * | api | token | + * | api3 | client_id | + * | embed | external_user_id | + * | looker_openid | email | + * + * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * DELETE /users/{user_id}/credentials_ldap -> string + * GET /users/credential/{credential_type}/{credential_id} -> IUser * * @param callback streaming output function - * @param user_id Id of user + * @param credential_type Type name of credential + * @param credential_id Id of credential + * @param fields Requested fields. * @param options one-time API call overrides * */ - async delete_user_credentials_ldap( - callback: (response: Response) => Promise, - user_id: string, + async user_for_credential( + callback: (response: Response) => Promise, + credential_type: string, + credential_id: string, + fields?: string, options?: Partial ) { - user_id = encodeParam(user_id); - return this.authStream( + credential_type = encodeParam(credential_type); + credential_id = encodeParam(credential_id); + return this.authStream( callback, - 'DELETE', - `/users/${user_id}/credentials_ldap`, - null, + 'GET', + `/users/credential/${credential_type}/${credential_id}`, + { fields }, null, options ); } /** - * ### Google authentication login information for the specified user. + * ### Update information for a specific service account. This action is restricted to Looker admins. * - * GET /users/{user_id}/credentials_google -> ICredentialsGoogle + * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. + * + * PATCH /users/service_accounts/{user_id} -> IServiceAccount * * @param callback streaming output function - * @param user_id Id of user + * @param user_id Id of service account + * @param body Partial * @param fields Requested fields. * @param options one-time API call overrides * */ - async user_credentials_google( - callback: (response: Response) => Promise, + async update_service_account( + callback: (response: Response) => Promise, user_id: string, + body: Partial, fields?: string, options?: Partial ) { user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, - 'GET', - `/users/${user_id}/credentials_google`, + 'PATCH', + `/users/service_accounts/${user_id}`, { fields }, - null, + body, options ); } /** - * ### Google authentication login information for the specified user. + * ### Delete the service account with a specific id. * - * DELETE /users/{user_id}/credentials_google -> string + * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. + * + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the service account or that use their content will be deleted. + * * Alerts owned by the service account will be deleted. + * + * The service account cannot delete itself. + * + * DELETE /users/service_accounts/{user_id} -> string * * @param callback streaming output function - * @param user_id Id of user + * @param user_id Id of service account user * @param options one-time API call overrides * */ - async delete_user_credentials_google( + async delete_service_account( callback: (response: Response) => Promise, user_id: string, options?: Partial @@ -15223,7 +15705,7 @@ export class Looker40SDKStream extends APIMethods { return this.authStream( callback, 'DELETE', - `/users/${user_id}/credentials_google`, + `/users/service_accounts/${user_id}`, null, null, options @@ -15231,9 +15713,11 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * GET /users/{user_id}/credentials_saml -> ICredentialsSaml + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_ldap -> ICredentialsLDAP * * @param callback streaming output function * @param user_id Id of user @@ -15241,17 +15725,17 @@ export class Looker40SDKStream extends APIMethods { * @param options one-time API call overrides * */ - async user_credentials_saml( - callback: (response: Response) => Promise, + async user_credentials_ldap( + callback: (response: Response) => Promise, user_id: string, fields?: string, options?: Partial ) { user_id = encodeParam(user_id); - return this.authStream( + return this.authStream( callback, 'GET', - `/users/${user_id}/credentials_saml`, + `/users/${user_id}/credentials_ldap`, { fields }, null, options @@ -15259,16 +15743,18 @@ export class Looker40SDKStream extends APIMethods { } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * DELETE /users/{user_id}/credentials_saml -> string + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_ldap -> string * * @param callback streaming output function * @param user_id Id of user * @param options one-time API call overrides * */ - async delete_user_credentials_saml( + async delete_user_credentials_ldap( callback: (response: Response) => Promise, user_id: string, options?: Partial @@ -15277,7 +15763,7 @@ export class Looker40SDKStream extends APIMethods { return this.authStream( callback, 'DELETE', - `/users/${user_id}/credentials_saml`, + `/users/${user_id}/credentials_ldap`, null, null, options @@ -15581,64 +16067,6 @@ export class Looker40SDKStream extends APIMethods { ); } - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * GET /users/{user_id}/credentials_looker_openid -> ICredentialsLookerOpenid - * - * @param callback streaming output function - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides - * - */ - async user_credentials_looker_openid( - callback: (response: Response) => Promise, - user_id: string, - fields?: string, - options?: Partial - ) { - user_id = encodeParam(user_id); - return this.authStream( - callback, - 'GET', - `/users/${user_id}/credentials_looker_openid`, - { fields }, - null, - options - ); - } - - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * DELETE /users/{user_id}/credentials_looker_openid -> string - * - * @param callback streaming output function - * @param user_id Id of user - * @param options one-time API call overrides - * - */ - async delete_user_credentials_looker_openid( - callback: (response: Response) => Promise, - user_id: string, - options?: Partial - ) { - user_id = encodeParam(user_id); - return this.authStream( - callback, - 'DELETE', - `/users/${user_id}/credentials_looker_openid`, - null, - null, - options - ); - } - /** * ### Web login session for the specified user. * @@ -15727,42 +16155,6 @@ export class Looker40SDKStream extends APIMethods { ); } - /** - * ### Create a password reset token. - * This will create a cryptographically secure random password reset token for the user. - * If the user already has a password reset token then this invalidates the old token and creates a new one. - * The token is expressed as the 'password_reset_url' of the user's email/password credential object. - * This takes an optional 'expires' param to indicate if the new token should be an expiring token. - * Tokens that expire are typically used for self-service password resets for existing users. - * Invitation emails for new users typically are not set to expire. - * The expire period is always 60 minutes when expires is enabled. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/password_reset -> ICredentialsEmail - * - * @param callback streaming output function - * @param request composed interface "IRequestCreateUserCredentialsEmailPasswordReset" for complex method parameters - * @param options one-time API call overrides - * - */ - async create_user_credentials_email_password_reset( - callback: (response: Response) => Promise, - request: IRequestCreateUserCredentialsEmailPasswordReset, - options?: Partial - ) { - request.user_id = encodeParam(request.user_id); - return this.authStream( - callback, - 'POST', - `/users/${request.user_id}/credentials_email/password_reset`, - { expires: request.expires, fields: request.fields }, - null, - options - ); - } - /** * ### Get information about roles of a given user * @@ -15935,42 +16327,6 @@ export class Looker40SDKStream extends APIMethods { ); } - /** - * ### Send a password reset token. - * This will send a password reset email to the user. If a password reset token does not already exist - * for this user, it will create one and then send it. - * If the user has not yet set up their account, it will send a setup email to the user. - * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - * Password reset URLs will expire in 60 minutes. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/send_password_reset -> ICredentialsEmail - * - * @param callback streaming output function - * @param user_id Id of user - * @param fields Requested fields. - * @param options one-time API call overrides - * - */ - async send_user_credentials_email_password_reset( - callback: (response: Response) => Promise, - user_id: string, - fields?: string, - options?: Partial - ) { - user_id = encodeParam(user_id); - return this.authStream( - callback, - 'POST', - `/users/${user_id}/credentials_email/send_password_reset`, - { fields }, - null, - options - ); - } - /** * ### Change a disabled user's email addresses * diff --git a/packages/sdk/src/constants.ts b/packages/sdk/src/constants.ts index 676c84d47..8094390e6 100644 --- a/packages/sdk/src/constants.ts +++ b/packages/sdk/src/constants.ts @@ -24,5 +24,5 @@ */ -export const sdkVersion = '26.12'; +export const sdkVersion = '26.18'; export const environmentPrefix = 'LOOKERSDK'; diff --git a/python/looker_sdk/sdk/api40/methods.py b/python/looker_sdk/sdk/api40/methods.py index 22e8aa95b..5a018216c 100644 --- a/python/looker_sdk/sdk/api40/methods.py +++ b/python/looker_sdk/sdk/api40/methods.py @@ -21,7 +21,7 @@ # SOFTWARE. # -# 518 API methods +# 529 API methods # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -3265,6 +3265,7 @@ def mobile_settings( # - host_url # - email_domain_allowlist # - embed_cookieless_v2 + # - embed_vis_modernization_default # - embed_enabled # - embed_config # - mcp_tools @@ -3316,6 +3317,7 @@ def get_setting( # - host_url # - email_domain_allowlist # - embed_cookieless_v2 + # - embed_vis_modernization_default # - embed_enabled # - embed_config # - mcp_tools @@ -4108,6 +4110,77 @@ def ssh_public_key( ) return response + # ### Get All User DB Connections + # + # Returns a list of user DB connections. + # + # GET /user_db_connections -> Sequence[mdls.UserDbConnection] + def all_user_db_connections( + self, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> Sequence[mdls.UserDbConnection]: + """Get All User DB Connections""" + response = cast( + Sequence[mdls.UserDbConnection], + self.get( + path="/user_db_connections", + structure=Sequence[mdls.UserDbConnection], + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Update User DB Connection + # + # Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + # + # PATCH /user_db_connections/{user_db_connection_id} -> mdls.UserDbConnection + def update_user_db_connection( + self, + # Id of user DB connection + user_db_connection_id: str, + body: mdls.WriteUserDbConnection, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.UserDbConnection: + """Update User DB Connection""" + user_db_connection_id = self.encode_path_param(user_db_connection_id) + response = cast( + mdls.UserDbConnection, + self.patch( + path=f"/user_db_connections/{user_db_connection_id}", + structure=mdls.UserDbConnection, + body=body, + transport_options=transport_options, + ), + ) + return response + + # ### Delete User DB Connection + # + # Deletes an existing user DB connection. + # + # DELETE /user_db_connections/{user_db_connection_id} -> None + def delete_user_db_connection( + self, + # Id of user DB connection + user_db_connection_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> None: + """Delete User DB Connection""" + user_db_connection_id = self.encode_path_param(user_db_connection_id) + response = cast( + None, + self.delete( + path=f"/user_db_connections/{user_db_connection_id}", + structure=None, + transport_options=transport_options, + ), + ) + return response + # endregion # region Content: Manage Content @@ -4879,6 +4952,29 @@ def update_agent( ) return response + # ### Get LookML of a UDD Agent + # + # Returns the LookML representation of a user-defined (UDD) agent. + # + # GET /agents/lookml/{agent_id} -> mdls.AgentLookml + def agent_lookml( + self, + # Id of agent + agent_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.AgentLookml: + """Get LookML of a UDD Agent""" + agent_id = self.encode_path_param(agent_id) + response = cast( + mdls.AgentLookml, + self.get( + path=f"/agents/lookml/{agent_id}", + structure=mdls.AgentLookml, + transport_options=transport_options, + ), + ) + return response + # ### Get All Conversation Messages # # Get all conversation messages. @@ -5025,6 +5121,39 @@ def update_conversation_message( ) return response + # ### Get Agent Responses for User Message + # + # Get all agent response messages generated for a specific user prompt. + # + # An agent response often consists of multiple message blocks (such as text explanations, + # visualizations, and follow-up suggestions). This endpoint returns all response messages + # following the specified user message up to the next user prompt. + # + # GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> Sequence[mdls.ConversationMessage] + def get_conversation_message_responses( + self, + # Conversation ID + conversation_id: str, + # User Conversation Message ID + user_message_id: str, + # Requested fields + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> Sequence[mdls.ConversationMessage]: + """Get Agent Responses for User Message""" + conversation_id = self.encode_path_param(conversation_id) + user_message_id = self.encode_path_param(user_message_id) + response = cast( + Sequence[mdls.ConversationMessage], + self.get( + path=f"/conversations/{conversation_id}/messages/{user_message_id}/responses", + structure=Sequence[mdls.ConversationMessage], + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + # ### Search Conversations # # Returns an array of conversation objects that match the specified search criteria. @@ -5614,6 +5743,32 @@ def delete_dashboard( ) return response + # ### Get Dashboard Image + # + # Returns the image content for a dashboard element. + # + # GET /dashboards/{dashboard_id}/images/{image_slug} -> Union[mdls.binary, bytes] + def get_dashboard_image( + self, + # Id of dashboard + dashboard_id: str, + # Slug of image + image_slug: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> Union[mdls.binary, bytes]: + """Get Dashboard Image""" + dashboard_id = self.encode_path_param(dashboard_id) + image_slug = self.encode_path_param(image_slug) + response = cast( + Union[mdls.binary, bytes], + self.get( + path=f"/dashboards/{dashboard_id}/images/{image_slug}", + structure=Union[mdls.binary, bytes], # type: ignore + transport_options=transport_options, + ), + ) + return response + # ### Get Aggregate Table LookML for Each Query on a Dashboard # # Returns a JSON object that contains the dashboard id and Aggregate Table lookml @@ -5664,6 +5819,8 @@ def dashboard_aggregate_table_lookml( # Boolean search params accept only "true" and "false" as values. # # + # **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + # # The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. # # Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -5673,7 +5830,7 @@ def search_lookml_dashboards( self, # Filter on a particular folder. folder_id: Optional[str] = None, - # Match LookML Dashboard title. + # Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title. title: Optional[str] = None, # Filter on a content favorite id. content_favorite_id: Optional[str] = None, @@ -5683,7 +5840,7 @@ def search_lookml_dashboards( limit: Optional[int] = None, # Number of results to skip before returning any. (used with limit and takes priority over page and per_page) offset: Optional[int] = None, - # One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status] + # One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title. sorts: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, ) -> mdls.DashboardLookml: @@ -5744,6 +5901,8 @@ def move_dashboard( dashboard_id: str, # Folder id to move to. folder_id: str, + # LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. + project_name: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, ) -> mdls.Dashboard: """Move Dashboard""" @@ -5753,7 +5912,7 @@ def move_dashboard( self.patch( path=f"/dashboards/{dashboard_id}/move", structure=mdls.Dashboard, - query_params={"folder_id": folder_id}, + query_params={"folder_id": folder_id, "project_name": project_name}, transport_options=transport_options, ), ) @@ -8228,6 +8387,8 @@ def delete_look( # | png | A PNG image of the visualization of the query # | jpg | A JPG image of the visualization of the query # + # **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + # # GET /looks/{look_id}/run/{result_format} -> Union[str, bytes] def run_look( self, @@ -8843,56 +9004,165 @@ def connection_cost_estimate( # region Project: Manage Projects - # ### Fetches a CI Run. + # ### Search Continuous Integration Runs for a project. # - # This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + # Returns an array of Continuous Integration Run objects that match the specified search criteria. # - # GET /projects/{project_id}/ci/runs/{run_id} -> mdls.ProjectRun - def get_ci_run( + # GET /projects/{project_id}/continuous_integration/runs/search -> Sequence[mdls.CIRun] + def search_continuous_integration_runs( self, # Project Id project_id: str, - # Run Id - run_id: str, # Requested fields fields: Optional[str] = None, + # Filter by suite id. Can be a comma-separated list of ids. + suite_id: Optional[str] = None, + # Filter by status. Can be a comma-separated list of statuses. + status: Optional[str] = None, + # Filter by user id. Can be a comma-separated list of ids. + user_id: Optional[str] = None, + # Filter by trigger type. Can be a comma-separated list of types. + trigger_type: Optional[str] = None, + # Number of results to return (min 1, max 100, default 50, used with offset) + limit: Optional[int] = None, + # Number of results to skip before returning. (used with limit) + offset: Optional[int] = None, + # One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at + sorts: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.ProjectRun: - """Fetch Continuous Integration run""" + ) -> Sequence[mdls.CIRun]: + """Search Continuous Integration runs""" project_id = self.encode_path_param(project_id) - run_id = self.encode_path_param(run_id) response = cast( - mdls.ProjectRun, + Sequence[mdls.CIRun], self.get( - path=f"/projects/{project_id}/ci/runs/{run_id}", - structure=mdls.ProjectRun, - query_params={"fields": fields}, + path=f"/projects/{project_id}/continuous_integration/runs/search", + structure=Sequence[mdls.CIRun], + query_params={ + "fields": fields, + "suite_id": suite_id, + "status": status, + "user_id": user_id, + "trigger_type": trigger_type, + "limit": limit, + "offset": offset, + "sorts": sorts, + }, transport_options=transport_options, ), ) return response - # ### Creates a CI Run. + # ### Fetches Multiple CI Suite Configurations for Project. # - # This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + # GET /projects/{project_id}/continuous_integration/suites -> Sequence[mdls.ProjectCISuite] + def get_continuous_integration_suites( + self, + # Project Id + project_id: str, + # Requested fields + fields: Optional[str] = None, + # Number of suites to return (min 1, max 100, default 50) + limit: Optional[int] = None, + # Row offset at which to fetch suites + offset: Optional[int] = None, + # Time at which to fetch suites + created_at: Optional[datetime.datetime] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> Sequence[mdls.ProjectCISuite]: + """Fetch Multiple Continuous Integration Suites for Project""" + project_id = self.encode_path_param(project_id) + response = cast( + Sequence[mdls.ProjectCISuite], + self.get( + path=f"/projects/{project_id}/continuous_integration/suites", + structure=Sequence[mdls.ProjectCISuite], + query_params={ + "fields": fields, + "limit": limit, + "offset": offset, + "created_at": created_at, + }, + transport_options=transport_options, + ), + ) + return response + + # ### Fetches a CI Suite Configuration. # - # POST /projects/{project_id}/ci/run -> mdls.CreateCIRunResponse - def create_ci_run( + # POST /projects/{project_id}/continuous_integration/suites -> mdls.ProjectCISuite + def create_continuous_integration_suite( self, # Project Id project_id: str, - body: mdls.CreateCIRunRequest, + body: mdls.WriteProjectCISuite, # Requested fields fields: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CreateCIRunResponse: - """Create a Continuous Integration run""" + ) -> mdls.ProjectCISuite: + """Create a Continuous Integration Suite for Project""" project_id = self.encode_path_param(project_id) response = cast( - mdls.CreateCIRunResponse, + mdls.ProjectCISuite, self.post( - path=f"/projects/{project_id}/ci/run", - structure=mdls.CreateCIRunResponse, + path=f"/projects/{project_id}/continuous_integration/suites", + structure=mdls.ProjectCISuite, + query_params={"fields": fields}, + body=body, + transport_options=transport_options, + ), + ) + return response + + # ### Fetches a CI Suite Configuration. + # + # GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> mdls.ProjectCISuite + def get_continuous_integration_suite( + self, + # Project Id + project_id: str, + # Suite Id + suite_id: str, + # Requested fields + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.ProjectCISuite: + """Fetch Continuous Integration Suite for Project""" + project_id = self.encode_path_param(project_id) + suite_id = self.encode_path_param(suite_id) + response = cast( + mdls.ProjectCISuite, + self.get( + path=f"/projects/{project_id}/continuous_integration/suites/{suite_id}", + structure=mdls.ProjectCISuite, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Updates a Continuous Integration Suite. + # + # PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> mdls.ProjectCISuite + def update_continuous_integration_suite( + self, + # Project Id + project_id: str, + # Suite Id + suite_id: str, + body: mdls.WriteProjectCISuite, + # Requested fields + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.ProjectCISuite: + """Update a Continuous Integration suite""" + project_id = self.encode_path_param(project_id) + suite_id = self.encode_path_param(suite_id) + response = cast( + mdls.ProjectCISuite, + self.patch( + path=f"/projects/{project_id}/continuous_integration/suites/{suite_id}", + structure=mdls.ProjectCISuite, query_params={"fields": fields}, body=body, transport_options=transport_options, @@ -8900,6 +9170,33 @@ def create_ci_run( ) return response + # ### Deletes a Continuous Integration Suite. + # + # DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> str + def delete_continuous_integration_suite( + self, + # Project Id + project_id: str, + # Suite Id + suite_id: str, + # Requested fields + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Delete Continuous Integration suite""" + project_id = self.encode_path_param(project_id) + suite_id = self.encode_path_param(suite_id) + response = cast( + str, + self.delete( + path=f"/projects/{project_id}/continuous_integration/suites/{suite_id}", + structure=str, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + # ### Creates and queues a Continuous Integration Run. # # POST /projects/{project_id}/continuous_integration/runs -> mdls.CIRun @@ -8926,6 +9223,33 @@ def create_continuous_integration_run( ) return response + # ### Duplicates and queues a Continuous Integration Run. + # + # POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> mdls.CIRun + def duplicate_continuous_integration_run( + self, + # Project Id + project_id: str, + # Run ID to duplicate and re-run + run_id: str, + # Requested fields + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.CIRun: + """Duplicate and queue a Continuous Integration run""" + project_id = self.encode_path_param(project_id) + run_id = self.encode_path_param(run_id) + response = cast( + mdls.CIRun, + self.post( + path=f"/projects/{project_id}/continuous_integration/runs/{run_id}/duplicate", + structure=mdls.CIRun, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + # ### Gets a Continuous Integration run. # # GET /projects/{project_id}/continuous_integration/runs/{run_id} -> mdls.CIRun @@ -8953,6 +9277,30 @@ def get_continuous_integration_run( ) return response + # ### Cancels a Continuous Integration Run. + # + # DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> str + def cancel_continuous_integration_run( + self, + # Project Id + project_id: str, + # Run Id + run_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Cancel a Continuous Integration run""" + project_id = self.encode_path_param(project_id) + run_id = self.encode_path_param(run_id) + response = cast( + str, + self.delete( + path=f"/projects/{project_id}/continuous_integration/runs/{run_id}", + structure=str, + transport_options=transport_options, + ), + ) + return response + # ### Generate Lockfile for All LookML Dependencies # # Git must have been configured, must be in dev mode and deploy permission required @@ -9309,6 +9657,50 @@ def reset_project_to_remote( ) return response + # ### Pull from Production + # Pulls changes from the remote production branch into the current development workspace. + # + # POST /projects/{project_id}/pull_from_production -> str + def pull_project_from_production( + self, + # Id of project + project_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Pull from Production""" + project_id = self.encode_path_param(project_id) + response = cast( + str, + self.post( + path=f"/projects/{project_id}/pull_from_production", + structure=str, + transport_options=transport_options, + ), + ) + return response + + # ### Pull from Remote + # Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + # + # POST /projects/{project_id}/pull_from_remote -> str + def pull_project_from_remote( + self, + # Id of project + project_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Pull from Remote""" + project_id = self.encode_path_param(project_id) + response = cast( + str, + self.post( + path=f"/projects/{project_id}/pull_from_remote", + structure=str, + transport_options=transport_options, + ), + ) + return response + # ### Get All Projects # # Returns all projects visible to the current user @@ -9817,80 +10209,7 @@ def tag_ref( ) return response - # ### Initiate Git Diagnosis Suite - # - # POST /projects/{project_id}/git_diagnostic_report -> mdls.GitDiagnosticReport - def create_git_diagnostic_report( - self, - # Looker Project ID - project_id: str, - body: mdls.WriteGitDiagnosticReport, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.GitDiagnosticReport: - """Initiate Git Diagnosis""" - project_id = self.encode_path_param(project_id) - response = cast( - mdls.GitDiagnosticReport, - self.post( - path=f"/projects/{project_id}/git_diagnostic_report", - structure=mdls.GitDiagnosticReport, - body=body, - transport_options=transport_options, - ), - ) - return response - - # ### Retrieve Live Git Diagnostic Suite Execution Status - # - # GET /projects/{project_id}/git_diagnostic_report/{report_id} -> mdls.GitDiagnosticReport - def get_git_diagnostic_report( - self, - # Looker Project ID - project_id: str, - # Report ID - report_id: str, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.GitDiagnosticReport: - """Get Live Git Diagnosis""" - project_id = self.encode_path_param(project_id) - report_id = self.encode_path_param(report_id) - response = cast( - mdls.GitDiagnosticReport, - self.get( - path=f"/projects/{project_id}/git_diagnostic_report/{report_id}", - structure=mdls.GitDiagnosticReport, - transport_options=transport_options, - ), - ) - return response - - # ### Repair Git Configuration Issues - # - # POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> mdls.GitDiagnosticReport - def repair_git_diagnostic_report( - self, - # Looker Project ID - project_id: str, - # Report ID - report_id: str, - body: mdls.WriteGitDiagnosticReport, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.GitDiagnosticReport: - """Repair Git Configuration""" - project_id = self.encode_path_param(project_id) - report_id = self.encode_path_param(report_id) - response = cast( - mdls.GitDiagnosticReport, - self.post( - path=f"/projects/{project_id}/git_diagnostic_report/{report_id}/repair", - structure=mdls.GitDiagnosticReport, - body=body, - transport_options=transport_options, - ), - ) - return response - - # ### Configure Repository Credential for a remote dependency + # ### Configure Repository Credential for a remote dependency # # Admin required. # @@ -9984,6 +10303,8 @@ def get_all_repository_credentials( # Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. # After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. # + # **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + # # POST /query_tasks -> mdls.QueryTask def create_query_task( self, @@ -10270,6 +10591,8 @@ def create_query( # | png | A PNG image of the visualization of the query # | jpg | A JPG image of the visualization of the query # + # **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + # # GET /queries/{query_id}/run/{result_format} -> Union[str, bytes] def run_query( self, @@ -10382,6 +10705,8 @@ def run_query( # | png | A PNG image of the visualization of the query # | jpg | A JPG image of the visualization of the query # + # **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + # # POST /queries/run/{result_format} -> Union[str, bytes] def run_inline_query( self, @@ -10495,6 +10820,8 @@ def run_inline_query( # | png | A PNG image of the visualization of the query # | jpg | A JPG image of the visualization of the query # + # **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + # # GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> Union[str, bytes] def run_url_encoded_query( self, @@ -12097,6 +12424,14 @@ def search_scheduled_plans( destination_type: Optional[str] = None, # Match scheduled plan's delivery format. delivery_format: Optional[str] = None, + # Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag). + all_states: Optional[bool] = None, + # Match Scheduled plan's run_once. + run_once: Optional[bool] = None, + # Match Scheduled plan's enabled status. + enabled: Optional[bool] = None, + # Match scheduled plan's last run status. + last_run_status: Optional[str] = None, # Combine given search criteria in a boolean OR expression filter_or: Optional[bool] = None, transport_options: Optional[transport.TransportOptions] = None, @@ -12123,6 +12458,10 @@ def search_scheduled_plans( "recipient": recipient, "destination_type": destination_type, "delivery_format": delivery_format, + "all_states": all_states, + "run_once": run_once, + "enabled": enabled, + "last_run_status": last_run_status, "filter_or": filter_or, }, transport_options=transport_options, @@ -13073,84 +13412,81 @@ def search_credentials_email( ) return response - # ### Get information about the current user; i.e. the user account currently calling the API. + # ### Email/password login information for the specified user. # - # GET /user -> mdls.User - def me( + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # GET /users/{user_id}/credentials_email -> mdls.CredentialsEmail + def user_credentials_email( self, + # Id of user + user_id: str, # Requested fields. fields: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.User: - """Get Current User""" + ) -> mdls.CredentialsEmail: + """Get Email/Password Credential""" + user_id = self.encode_path_param(user_id) response = cast( - mdls.User, + mdls.CredentialsEmail, self.get( - path="/user", - structure=mdls.User, + path=f"/users/{user_id}/credentials_email", + structure=mdls.CredentialsEmail, query_params={"fields": fields}, transport_options=transport_options, ), ) return response - # ### Get information about all users. + # ### Email/password login information for the specified user. # - # GET /users -> Sequence[mdls.User] - def all_users( + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # POST /users/{user_id}/credentials_email -> mdls.CredentialsEmail + def create_user_credentials_email( self, + # Id of user + user_id: str, + body: mdls.WriteCredentialsEmail, # Requested fields. fields: Optional[str] = None, - # DEPRECATED. Use limit and offset instead. Return only page N of paginated results - page: Optional[int] = None, - # DEPRECATED. Use limit and offset instead. Return N rows of data per page - per_page: Optional[int] = None, - # Number of results to return. (used with offset and takes priority over page and per_page) - limit: Optional[int] = None, - # Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - offset: Optional[int] = None, - # Fields to sort by. - sorts: Optional[str] = None, - # Optional list of ids to get specific users. - ids: Optional[mdls.DelimSequence[str]] = None, transport_options: Optional[transport.TransportOptions] = None, - ) -> Sequence[mdls.User]: - """Get All Users""" + ) -> mdls.CredentialsEmail: + """Create Email/Password Credential""" + user_id = self.encode_path_param(user_id) response = cast( - Sequence[mdls.User], - self.get( - path="/users", - structure=Sequence[mdls.User], - query_params={ - "fields": fields, - "page": page, - "per_page": per_page, - "limit": limit, - "offset": offset, - "sorts": sorts, - "ids": ids, - }, + mdls.CredentialsEmail, + self.post( + path=f"/users/{user_id}/credentials_email", + structure=mdls.CredentialsEmail, + query_params={"fields": fields}, + body=body, transport_options=transport_options, ), ) return response - # ### Create a user with the specified information. + # ### Email/password login information for the specified user. # - # POST /users -> mdls.User - def create_user( + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # PATCH /users/{user_id}/credentials_email -> mdls.CredentialsEmail + def update_user_credentials_email( self, - body: Optional[mdls.WriteUser] = None, + # Id of user + user_id: str, + body: mdls.WriteCredentialsEmail, # Requested fields. fields: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.User: - """Create User""" + ) -> mdls.CredentialsEmail: + """Update Email/Password Credential""" + user_id = self.encode_path_param(user_id) response = cast( - mdls.User, - self.post( - path="/users", - structure=mdls.User, + mdls.CredentialsEmail, + self.patch( + path=f"/users/{user_id}/credentials_email", + structure=mdls.CredentialsEmail, query_params={"fields": fields}, body=body, transport_options=transport_options, @@ -13158,116 +13494,509 @@ def create_user( ) return response - # ### Search users - # - # Returns all* user records that match the given search criteria. - # - # If multiple search params are given and `filter_or` is FALSE or not specified, - # search params are combined in a logical AND operation. - # Only rows that match *all* search param criteria will be returned. - # - # If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - # Results will include rows that match **any** of the search criteria. - # - # String search params use case-insensitive matching. - # String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - # example="dan%" will match "danger" and "Danzig" but not "David" - # example="D_m%" will match "Damage" and "dump" - # - # Integer search params can accept a single value or a comma separated list of values. The multiple - # values will be combined under a logical OR operation - results will match at least one of - # the given values. - # - # Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - # or exclude (respectively) rows where the column is null. - # - # Boolean search params accept only "true" and "false" as values. - # + # ### Email/password login information for the specified user. # - # (*) Results are always filtered to the level of information the caller is permitted to view. - # Looker admins can see all user details; normal users in an open system can see - # names of other users but no details; normal users in a closed system can only see - # names of other users who are members of the same group as the user. + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). # - # GET /users/search -> Sequence[mdls.User] - def search_users( + # DELETE /users/{user_id}/credentials_email -> str + def delete_user_credentials_email( self, - # Include only these fields in the response - fields: Optional[str] = None, - # DEPRECATED. Use limit and offset instead. Return only page N of paginated results - page: Optional[int] = None, - # DEPRECATED. Use limit and offset instead. Return N rows of data per page - per_page: Optional[int] = None, - # Number of results to return. (used with offset and takes priority over page and per_page) - limit: Optional[int] = None, - # Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - offset: Optional[int] = None, - # Fields to sort by. - sorts: Optional[str] = None, - # Match User Id. - id: Optional[str] = None, - # Match First name. - first_name: Optional[str] = None, - # Match Last name. - last_name: Optional[str] = None, - # Match Full name (First Last). - full_name: Optional[str] = None, - # Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details. - verified_looker_employee: Optional[bool] = None, - # Search for only embed users - embed_user: Optional[bool] = None, - # Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details. - email: Optional[str] = None, - # Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details. - is_disabled: Optional[bool] = None, - # Combine given search criteria in a boolean OR expression - filter_or: Optional[bool] = None, - # Search for users who have access to this content_metadata item - content_metadata_id: Optional[str] = None, - # Search for users who are direct members of this group - group_id: Optional[str] = None, - # Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance. - can_manage_api3_creds: Optional[bool] = None, - # Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details. - is_service_account: Optional[bool] = None, + # Id of user + user_id: str, transport_options: Optional[transport.TransportOptions] = None, - ) -> Sequence[mdls.User]: - """Search Users""" + ) -> str: + """Delete Email/Password Credential""" + user_id = self.encode_path_param(user_id) response = cast( - Sequence[mdls.User], - self.get( - path="/users/search", - structure=Sequence[mdls.User], - query_params={ - "fields": fields, - "page": page, - "per_page": per_page, - "limit": limit, - "offset": offset, - "sorts": sorts, - "id": id, - "first_name": first_name, - "last_name": last_name, - "full_name": full_name, - "verified_looker_employee": verified_looker_employee, - "embed_user": embed_user, - "email": email, - "is_disabled": is_disabled, - "filter_or": filter_or, - "content_metadata_id": content_metadata_id, - "group_id": group_id, - "can_manage_api3_creds": can_manage_api3_creds, - "is_service_account": is_service_account, - }, + str, + self.delete( + path=f"/users/{user_id}/credentials_email", + structure=str, transport_options=transport_options, ), ) return response - # ### Search for user accounts by name + # ### Create a password reset token. + # This will create a cryptographically secure random password reset token for the user. + # If the user already has a password reset token then this invalidates the old token and creates a new one. + # The token is expressed as the 'password_reset_url' of the user's email/password credential object. + # This takes an optional 'expires' param to indicate if the new token should be an expiring token. + # Tokens that expire are typically used for self-service password resets for existing users. + # Invitation emails for new users typically are not set to expire. + # The expire period is always 60 minutes when expires is enabled. + # This method can be called with an empty body. # - # Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. - # The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # POST /users/{user_id}/credentials_email/password_reset -> mdls.CredentialsEmail + def create_user_credentials_email_password_reset( + self, + # Id of user + user_id: str, + # Expiring token. + expires: Optional[bool] = None, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.CredentialsEmail: + """Create Password Reset Token""" + user_id = self.encode_path_param(user_id) + response = cast( + mdls.CredentialsEmail, + self.post( + path=f"/users/{user_id}/credentials_email/password_reset", + structure=mdls.CredentialsEmail, + query_params={"expires": expires, "fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Send a password reset token. + # This will send a password reset email to the user. If a password reset token does not already exist + # for this user, it will create one and then send it. + # If the user has not yet set up their account, it will send a setup email to the user. + # The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + # Password reset URLs will expire in 60 minutes. + # This method can be called with an empty body. + # + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # POST /users/{user_id}/credentials_email/send_password_reset -> mdls.CredentialsEmail + def send_user_credentials_email_password_reset( + self, + # Id of user + user_id: str, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.CredentialsEmail: + """Send Password Reset Token""" + user_id = self.encode_path_param(user_id) + response = cast( + mdls.CredentialsEmail, + self.post( + path=f"/users/{user_id}/credentials_email/send_password_reset", + structure=mdls.CredentialsEmail, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Google authentication login information for the specified user. + # + # GET /users/{user_id}/credentials_google -> mdls.CredentialsGoogle + def user_credentials_google( + self, + # Id of user + user_id: str, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.CredentialsGoogle: + """Get Google Auth Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + mdls.CredentialsGoogle, + self.get( + path=f"/users/{user_id}/credentials_google", + structure=mdls.CredentialsGoogle, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Delete Google authentication login information for the specified user. + # + # DELETE /users/{user_id}/credentials_google -> str + def delete_user_credentials_google( + self, + # Id of user + user_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Delete Google Auth Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + str, + self.delete( + path=f"/users/{user_id}/credentials_google", + structure=str, + transport_options=transport_options, + ), + ) + return response + + # ### Looker Openid login information for the specified user. Used by Looker Analysts. + # + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # GET /users/{user_id}/credentials_looker_openid -> mdls.CredentialsLookerOpenid + def user_credentials_looker_openid( + self, + # Id of user + user_id: str, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.CredentialsLookerOpenid: + """Get Looker OpenId Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + mdls.CredentialsLookerOpenid, + self.get( + path=f"/users/{user_id}/credentials_looker_openid", + structure=mdls.CredentialsLookerOpenid, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Looker Openid login information for the specified user. Used by Looker Analysts. + # + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # DELETE /users/{user_id}/credentials_looker_openid -> str + def delete_user_credentials_looker_openid( + self, + # Id of user + user_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Delete Looker OpenId Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + str, + self.delete( + path=f"/users/{user_id}/credentials_looker_openid", + structure=str, + transport_options=transport_options, + ), + ) + return response + + # ### Saml authentication login information for the specified user. + # + # GET /users/{user_id}/credentials_saml -> mdls.CredentialsSaml + def user_credentials_saml( + self, + # Id of user + user_id: str, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.CredentialsSaml: + """Get Saml Auth Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + mdls.CredentialsSaml, + self.get( + path=f"/users/{user_id}/credentials_saml", + structure=mdls.CredentialsSaml, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Delete Saml authentication login information for the specified user. + # + # DELETE /users/{user_id}/credentials_saml -> str + def delete_user_credentials_saml( + self, + # Id of user + user_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Delete Saml Auth Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + str, + self.delete( + path=f"/users/{user_id}/credentials_saml", + structure=str, + transport_options=transport_options, + ), + ) + return response + + # ### Get two-factor login information for the specified user. + # + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # GET /users/{user_id}/credentials_totp -> mdls.CredentialsTotp + def user_credentials_totp( + self, + # Id of user + user_id: str, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.CredentialsTotp: + """Get Two-Factor Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + mdls.CredentialsTotp, + self.get( + path=f"/users/{user_id}/credentials_totp", + structure=mdls.CredentialsTotp, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Create two-factor login information for the specified user. + # + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # POST /users/{user_id}/credentials_totp -> mdls.CredentialsTotp + def create_user_credentials_totp( + self, + # Id of user + user_id: str, + # WARNING: no writeable properties found for POST, PUT, or PATCH + body: Optional[mdls.CredentialsTotp] = None, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.CredentialsTotp: + """Create Two-Factor Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + mdls.CredentialsTotp, + self.post( + path=f"/users/{user_id}/credentials_totp", + structure=mdls.CredentialsTotp, + query_params={"fields": fields}, + body=body, + transport_options=transport_options, + ), + ) + return response + + # ### Delete two-factor login information for the specified user. + # + # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # + # DELETE /users/{user_id}/credentials_totp -> str + def delete_user_credentials_totp( + self, + # Id of user + user_id: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Delete Two-Factor Credential""" + user_id = self.encode_path_param(user_id) + response = cast( + str, + self.delete( + path=f"/users/{user_id}/credentials_totp", + structure=str, + transport_options=transport_options, + ), + ) + return response + + # ### Get information about the current user; i.e. the user account currently calling the API. + # + # GET /user -> mdls.User + def me( + self, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.User: + """Get Current User""" + response = cast( + mdls.User, + self.get( + path="/user", + structure=mdls.User, + query_params={"fields": fields}, + transport_options=transport_options, + ), + ) + return response + + # ### Get information about all users. + # + # GET /users -> Sequence[mdls.User] + def all_users( + self, + # Requested fields. + fields: Optional[str] = None, + # DEPRECATED. Use limit and offset instead. Return only page N of paginated results + page: Optional[int] = None, + # DEPRECATED. Use limit and offset instead. Return N rows of data per page + per_page: Optional[int] = None, + # Number of results to return. (used with offset and takes priority over page and per_page) + limit: Optional[int] = None, + # Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + offset: Optional[int] = None, + # Fields to sort by. + sorts: Optional[str] = None, + # Optional list of ids to get specific users. + ids: Optional[mdls.DelimSequence[str]] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> Sequence[mdls.User]: + """Get All Users""" + response = cast( + Sequence[mdls.User], + self.get( + path="/users", + structure=Sequence[mdls.User], + query_params={ + "fields": fields, + "page": page, + "per_page": per_page, + "limit": limit, + "offset": offset, + "sorts": sorts, + "ids": ids, + }, + transport_options=transport_options, + ), + ) + return response + + # ### Create a user with the specified information. + # + # POST /users -> mdls.User + def create_user( + self, + body: Optional[mdls.WriteUser] = None, + # Requested fields. + fields: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.User: + """Create User""" + response = cast( + mdls.User, + self.post( + path="/users", + structure=mdls.User, + query_params={"fields": fields}, + body=body, + transport_options=transport_options, + ), + ) + return response + + # ### Search users + # + # Returns all* user records that match the given search criteria. + # + # If multiple search params are given and `filter_or` is FALSE or not specified, + # search params are combined in a logical AND operation. + # Only rows that match *all* search param criteria will be returned. + # + # If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. + # Results will include rows that match **any** of the search criteria. + # + # String search params use case-insensitive matching. + # String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. + # example="dan%" will match "danger" and "Danzig" but not "David" + # example="D_m%" will match "Damage" and "dump" + # + # Integer search params can accept a single value or a comma separated list of values. The multiple + # values will be combined under a logical OR operation - results will match at least one of + # the given values. + # + # Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match + # or exclude (respectively) rows where the column is null. + # + # Boolean search params accept only "true" and "false" as values. + # + # + # (*) Results are always filtered to the level of information the caller is permitted to view. + # Looker admins can see all user details; normal users in an open system can see + # names of other users but no details; normal users in a closed system can only see + # names of other users who are members of the same group as the user. + # + # GET /users/search -> Sequence[mdls.User] + def search_users( + self, + # Include only these fields in the response + fields: Optional[str] = None, + # DEPRECATED. Use limit and offset instead. Return only page N of paginated results + page: Optional[int] = None, + # DEPRECATED. Use limit and offset instead. Return N rows of data per page + per_page: Optional[int] = None, + # Number of results to return. (used with offset and takes priority over page and per_page) + limit: Optional[int] = None, + # Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + offset: Optional[int] = None, + # Fields to sort by. + sorts: Optional[str] = None, + # Match User Id. + id: Optional[str] = None, + # Match First name. + first_name: Optional[str] = None, + # Match Last name. + last_name: Optional[str] = None, + # Match Full name (First Last). + full_name: Optional[str] = None, + # Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details. + verified_looker_employee: Optional[bool] = None, + # Search for only embed users + embed_user: Optional[bool] = None, + # Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details. + email: Optional[str] = None, + # Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details. + is_disabled: Optional[bool] = None, + # Combine given search criteria in a boolean OR expression + filter_or: Optional[bool] = None, + # Search for users who have access to this content_metadata item + content_metadata_id: Optional[str] = None, + # Search for users who are direct members of this group + group_id: Optional[str] = None, + # Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance. + can_manage_api3_creds: Optional[bool] = None, + # Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details. + is_service_account: Optional[bool] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> Sequence[mdls.User]: + """Search Users""" + response = cast( + Sequence[mdls.User], + self.get( + path="/users/search", + structure=Sequence[mdls.User], + query_params={ + "fields": fields, + "page": page, + "per_page": per_page, + "limit": limit, + "offset": offset, + "sorts": sorts, + "id": id, + "first_name": first_name, + "last_name": last_name, + "full_name": full_name, + "verified_looker_employee": verified_looker_employee, + "embed_user": embed_user, + "email": email, + "is_disabled": is_disabled, + "filter_or": filter_or, + "content_metadata_id": content_metadata_id, + "group_id": group_id, + "can_manage_api3_creds": can_manage_api3_creds, + "is_service_account": is_service_account, + }, + transport_options=transport_options, + ), + ) + return response + + # ### Search for user accounts by name + # + # Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. + # The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. # # Any additional search params will be combined into a logical AND expression. # @@ -13390,7 +14119,7 @@ def update_user( # * Their reports, Looks and dashboards will be moved to Trash. # * Any public URLs owned by them will no longer work. # * Schedules created by the users or that use their content will be deleted. - # * Alerts will continue to run, but will not be visible or editable from the dashboard. + # * Alerts owned by the users will be deleted. # # The user cannot delete themselves. # The last administrator user cannot be deleted. @@ -13463,228 +14192,37 @@ def user_for_credential( credential_type = self.encode_path_param(credential_type) credential_id = self.encode_path_param(credential_id) response = cast( - mdls.User, - self.get( - path=f"/users/credential/{credential_type}/{credential_id}", - structure=mdls.User, - query_params={"fields": fields}, - transport_options=transport_options, - ), - ) - return response - - # ### Update information for a specific service account. This action is restricted to Looker admins. - # - # This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. - # - # PATCH /users/service_accounts/{user_id} -> mdls.ServiceAccount - def update_service_account( - self, - # Id of service account - user_id: str, - body: mdls.WriteServiceAccount, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.ServiceAccount: - """Update Service Account""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.ServiceAccount, - self.patch( - path=f"/users/service_accounts/{user_id}", - structure=mdls.ServiceAccount, - query_params={"fields": fields}, - body=body, - transport_options=transport_options, - ), - ) - return response - - # ### Delete the service account with a specific id. - # - # **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. - # - # Deletion will have the following impact: - # * Their reports, Looks and dashboards will be moved to Trash. - # * Any public URLs owned by them will no longer work. - # * Schedules created by the service account or that use their content will be deleted. - # * Alerts will continue to run, but will not be visible or editable from the dashboard. - # - # The service account cannot delete itself. - # - # DELETE /users/service_accounts/{user_id} -> str - def delete_service_account( - self, - # Id of service account user - user_id: str, - transport_options: Optional[transport.TransportOptions] = None, - ) -> str: - """Delete Service Account""" - user_id = self.encode_path_param(user_id) - response = cast( - str, - self.delete( - path=f"/users/service_accounts/{user_id}", - structure=str, - transport_options=transport_options, - ), - ) - return response - - # ### Email/password login information for the specified user. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # GET /users/{user_id}/credentials_email -> mdls.CredentialsEmail - def user_credentials_email( - self, - # Id of user - user_id: str, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsEmail: - """Get Email/Password Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsEmail, - self.get( - path=f"/users/{user_id}/credentials_email", - structure=mdls.CredentialsEmail, - query_params={"fields": fields}, - transport_options=transport_options, - ), - ) - return response - - # ### Email/password login information for the specified user. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # POST /users/{user_id}/credentials_email -> mdls.CredentialsEmail - def create_user_credentials_email( - self, - # Id of user - user_id: str, - body: mdls.WriteCredentialsEmail, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsEmail: - """Create Email/Password Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsEmail, - self.post( - path=f"/users/{user_id}/credentials_email", - structure=mdls.CredentialsEmail, - query_params={"fields": fields}, - body=body, - transport_options=transport_options, - ), - ) - return response - - # ### Email/password login information for the specified user. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # PATCH /users/{user_id}/credentials_email -> mdls.CredentialsEmail - def update_user_credentials_email( - self, - # Id of user - user_id: str, - body: mdls.WriteCredentialsEmail, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsEmail: - """Update Email/Password Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsEmail, - self.patch( - path=f"/users/{user_id}/credentials_email", - structure=mdls.CredentialsEmail, - query_params={"fields": fields}, - body=body, - transport_options=transport_options, - ), - ) - return response - - # ### Email/password login information for the specified user. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # DELETE /users/{user_id}/credentials_email -> str - def delete_user_credentials_email( - self, - # Id of user - user_id: str, - transport_options: Optional[transport.TransportOptions] = None, - ) -> str: - """Delete Email/Password Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - str, - self.delete( - path=f"/users/{user_id}/credentials_email", - structure=str, - transport_options=transport_options, - ), - ) - return response - - # ### Two-factor login information for the specified user. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # GET /users/{user_id}/credentials_totp -> mdls.CredentialsTotp - def user_credentials_totp( - self, - # Id of user - user_id: str, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsTotp: - """Get Two-Factor Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsTotp, + mdls.User, self.get( - path=f"/users/{user_id}/credentials_totp", - structure=mdls.CredentialsTotp, + path=f"/users/credential/{credential_type}/{credential_id}", + structure=mdls.User, query_params={"fields": fields}, transport_options=transport_options, ), ) return response - # ### Two-factor login information for the specified user. + # ### Update information for a specific service account. This action is restricted to Looker admins. # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. # - # POST /users/{user_id}/credentials_totp -> mdls.CredentialsTotp - def create_user_credentials_totp( + # PATCH /users/service_accounts/{user_id} -> mdls.ServiceAccount + def update_service_account( self, - # Id of user + # Id of service account user_id: str, - # WARNING: no writeable properties found for POST, PUT, or PATCH - body: Optional[mdls.CredentialsTotp] = None, + body: mdls.WriteServiceAccount, # Requested fields. fields: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsTotp: - """Create Two-Factor Credential""" + ) -> mdls.ServiceAccount: + """Update Service Account""" user_id = self.encode_path_param(user_id) response = cast( - mdls.CredentialsTotp, - self.post( - path=f"/users/{user_id}/credentials_totp", - structure=mdls.CredentialsTotp, + mdls.ServiceAccount, + self.patch( + path=f"/users/service_accounts/{user_id}", + structure=mdls.ServiceAccount, query_params={"fields": fields}, body=body, transport_options=transport_options, @@ -13692,23 +14230,31 @@ def create_user_credentials_totp( ) return response - # ### Two-factor login information for the specified user. + # ### Delete the service account with a specific id. # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + # **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. # - # DELETE /users/{user_id}/credentials_totp -> str - def delete_user_credentials_totp( + # Deletion will have the following impact: + # * Their reports, Looks and dashboards will be moved to Trash. + # * Any public URLs owned by them will no longer work. + # * Schedules created by the service account or that use their content will be deleted. + # * Alerts owned by the service account will be deleted. + # + # The service account cannot delete itself. + # + # DELETE /users/service_accounts/{user_id} -> str + def delete_service_account( self, - # Id of user + # Id of service account user user_id: str, transport_options: Optional[transport.TransportOptions] = None, ) -> str: - """Delete Two-Factor Credential""" + """Delete Service Account""" user_id = self.encode_path_param(user_id) response = cast( str, self.delete( - path=f"/users/{user_id}/credentials_totp", + path=f"/users/service_accounts/{user_id}", structure=str, transport_options=transport_options, ), @@ -13764,96 +14310,6 @@ def delete_user_credentials_ldap( ) return response - # ### Google authentication login information for the specified user. - # - # GET /users/{user_id}/credentials_google -> mdls.CredentialsGoogle - def user_credentials_google( - self, - # Id of user - user_id: str, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsGoogle: - """Get Google Auth Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsGoogle, - self.get( - path=f"/users/{user_id}/credentials_google", - structure=mdls.CredentialsGoogle, - query_params={"fields": fields}, - transport_options=transport_options, - ), - ) - return response - - # ### Google authentication login information for the specified user. - # - # DELETE /users/{user_id}/credentials_google -> str - def delete_user_credentials_google( - self, - # Id of user - user_id: str, - transport_options: Optional[transport.TransportOptions] = None, - ) -> str: - """Delete Google Auth Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - str, - self.delete( - path=f"/users/{user_id}/credentials_google", - structure=str, - transport_options=transport_options, - ), - ) - return response - - # ### Saml authentication login information for the specified user. - # - # GET /users/{user_id}/credentials_saml -> mdls.CredentialsSaml - def user_credentials_saml( - self, - # Id of user - user_id: str, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsSaml: - """Get Saml Auth Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsSaml, - self.get( - path=f"/users/{user_id}/credentials_saml", - structure=mdls.CredentialsSaml, - query_params={"fields": fields}, - transport_options=transport_options, - ), - ) - return response - - # ### Saml authentication login information for the specified user. - # - # DELETE /users/{user_id}/credentials_saml -> str - def delete_user_credentials_saml( - self, - # Id of user - user_id: str, - transport_options: Optional[transport.TransportOptions] = None, - ) -> str: - """Delete Saml Auth Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - str, - self.delete( - path=f"/users/{user_id}/credentials_saml", - structure=str, - transport_options=transport_options, - ), - ) - return response - # ### OpenID Connect (OIDC) authentication login information for the specified user. # # GET /users/{user_id}/credentials_oidc -> mdls.CredentialsOIDC @@ -14108,55 +14564,6 @@ def all_user_credentials_embeds( ) return response - # ### Looker Openid login information for the specified user. Used by Looker Analysts. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # GET /users/{user_id}/credentials_looker_openid -> mdls.CredentialsLookerOpenid - def user_credentials_looker_openid( - self, - # Id of user - user_id: str, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsLookerOpenid: - """Get Looker OpenId Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsLookerOpenid, - self.get( - path=f"/users/{user_id}/credentials_looker_openid", - structure=mdls.CredentialsLookerOpenid, - query_params={"fields": fields}, - transport_options=transport_options, - ), - ) - return response - - # ### Looker Openid login information for the specified user. Used by Looker Analysts. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # DELETE /users/{user_id}/credentials_looker_openid -> str - def delete_user_credentials_looker_openid( - self, - # Id of user - user_id: str, - transport_options: Optional[transport.TransportOptions] = None, - ) -> str: - """Delete Looker OpenId Credential""" - user_id = self.encode_path_param(user_id) - response = cast( - str, - self.delete( - path=f"/users/{user_id}/credentials_looker_openid", - structure=str, - transport_options=transport_options, - ), - ) - return response - # ### Web login session for the specified user. # # GET /users/{user_id}/sessions/{session_id} -> mdls.Session @@ -14232,42 +14639,6 @@ def all_user_sessions( ) return response - # ### Create a password reset token. - # This will create a cryptographically secure random password reset token for the user. - # If the user already has a password reset token then this invalidates the old token and creates a new one. - # The token is expressed as the 'password_reset_url' of the user's email/password credential object. - # This takes an optional 'expires' param to indicate if the new token should be an expiring token. - # Tokens that expire are typically used for self-service password resets for existing users. - # Invitation emails for new users typically are not set to expire. - # The expire period is always 60 minutes when expires is enabled. - # This method can be called with an empty body. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # POST /users/{user_id}/credentials_email/password_reset -> mdls.CredentialsEmail - def create_user_credentials_email_password_reset( - self, - # Id of user - user_id: str, - # Expiring token. - expires: Optional[bool] = None, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsEmail: - """Create Password Reset Token""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsEmail, - self.post( - path=f"/users/{user_id}/credentials_email/password_reset", - structure=mdls.CredentialsEmail, - query_params={"expires": expires, "fields": fields}, - transport_options=transport_options, - ), - ) - return response - # ### Get information about roles of a given user # # GET /users/{user_id}/roles -> Sequence[mdls.Role] @@ -14430,38 +14801,6 @@ def delete_user_attribute_user_value( ) return response - # ### Send a password reset token. - # This will send a password reset email to the user. If a password reset token does not already exist - # for this user, it will create one and then send it. - # If the user has not yet set up their account, it will send a setup email to the user. - # The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - # Password reset URLs will expire in 60 minutes. - # This method can be called with an empty body. - # - # Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - # - # POST /users/{user_id}/credentials_email/send_password_reset -> mdls.CredentialsEmail - def send_user_credentials_email_password_reset( - self, - # Id of user - user_id: str, - # Requested fields. - fields: Optional[str] = None, - transport_options: Optional[transport.TransportOptions] = None, - ) -> mdls.CredentialsEmail: - """Send Password Reset Token""" - user_id = self.encode_path_param(user_id) - response = cast( - mdls.CredentialsEmail, - self.post( - path=f"/users/{user_id}/credentials_email/send_password_reset", - structure=mdls.CredentialsEmail, - query_params={"fields": fields}, - transport_options=transport_options, - ), - ) - return response - # ### Change a disabled user's email addresses # # Allows the admin to change the email addresses for all the user's diff --git a/python/looker_sdk/sdk/api40/models.py b/python/looker_sdk/sdk/api40/models.py index a2a63df04..79de234e1 100644 --- a/python/looker_sdk/sdk/api40/models.py +++ b/python/looker_sdk/sdk/api40/models.py @@ -21,7 +21,7 @@ # SOFTWARE. # -# 461 API models: 363 Spec, 0 Request, 72 Write, 26 Enum +# 442 API models: 343 Spec, 0 Request, 73 Write, 26 Enum # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -98,6 +98,9 @@ class Agent(model.Model): code_interpreter: Enables Code Interpreter for this Agent studio_agent_id: Studio Agent ID (if this agent was migrated) workflow_params: + is_lookml: Whether the agent is defined in LookML + lookml_agent_id: LookML Agent ID + lookml_edit_uri: URI to edit the LookML definition of this agent """ can: Optional[MutableMapping[str, bool]] = None @@ -122,6 +125,9 @@ class Agent(model.Model): code_interpreter: Optional[bool] = None studio_agent_id: Optional[str] = None workflow_params: Optional["WorkflowParams"] = None + is_lookml: Optional[bool] = None + lookml_agent_id: Optional[str] = None + lookml_edit_uri: Optional[str] = None def __init__( self, @@ -147,7 +153,10 @@ def __init__( content_metadata_id: Optional[str] = None, code_interpreter: Optional[bool] = None, studio_agent_id: Optional[str] = None, - workflow_params: Optional["WorkflowParams"] = None + workflow_params: Optional["WorkflowParams"] = None, + is_lookml: Optional[bool] = None, + lookml_agent_id: Optional[str] = None, + lookml_edit_uri: Optional[str] = None ): self.can = can self.id = id @@ -171,6 +180,25 @@ def __init__( self.code_interpreter = code_interpreter self.studio_agent_id = studio_agent_id self.workflow_params = workflow_params + self.is_lookml = is_lookml + self.lookml_agent_id = lookml_agent_id + self.lookml_edit_uri = lookml_edit_uri + + +@attr.s(auto_attribs=True, init=False) +class AgentLookml(model.Model): + """ + Attributes: + agent_id: Id of Agent + lookml: lookml of UDD Agent + """ + + agent_id: Optional[str] = None + lookml: Optional[str] = None + + def __init__(self, *, agent_id: Optional[str] = None, lookml: Optional[str] = None): + self.agent_id = agent_id + self.lookml = lookml @attr.s(auto_attribs=True, init=False) @@ -838,151 +866,6 @@ def __init__(self, *, max_size: int, usage: int): self.usage = usage -@attr.s(auto_attribs=True, init=False) -class AssertValidatorErrorItem(model.Model): - """ - Attributes: - assert_error: - generic_error: - """ - - assert_error: Optional["AssertValidatorTestError"] = None - generic_error: Optional["GenericError"] = None - - def __init__( - self, - *, - assert_error: Optional["AssertValidatorTestError"] = None, - generic_error: Optional["GenericError"] = None - ): - self.assert_error = assert_error - self.generic_error = generic_error - - -@attr.s(auto_attribs=True, init=False) -class AssertValidatorResult(model.Model): - """ - Attributes: - name: Name of the validator (assert) - status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - results: Results of the validation - """ - - name: Optional[str] = None - status: Optional[str] = None - results: Optional[Sequence["AssertValidatorTestedExplore"]] = None - - def __init__( - self, - *, - name: Optional[str] = None, - status: Optional[str] = None, - results: Optional[Sequence["AssertValidatorTestedExplore"]] = None - ): - self.name = name - self.status = status - self.results = results - - -@attr.s(auto_attribs=True, init=False) -class AssertValidatorTestedExplore(model.Model): - """ - Attributes: - error_count: Total number of failed data tests - errors: Details of data tests that failed validation - success_count: Total number of successful data tests - successes: Details of data tests that passed validation - """ - - error_count: Optional[int] = None - errors: Optional[Sequence["AssertValidatorErrorItem"]] = None - success_count: Optional[str] = None - successes: Optional[Sequence["AssertValidatorTestSuccess"]] = None - - def __init__( - self, - *, - error_count: Optional[int] = None, - errors: Optional[Sequence["AssertValidatorErrorItem"]] = None, - success_count: Optional[str] = None, - successes: Optional[Sequence["AssertValidatorTestSuccess"]] = None - ): - self.error_count = error_count - self.errors = errors - self.success_count = success_count - self.successes = successes - - -@attr.s(auto_attribs=True, init=False) -class AssertValidatorTestError(model.Model): - """ - Attributes: - model: LookML model that contains the data test - explore: LookML Explore that is used as the explore_source for the data test - test_name: Name of the data test - explore_url: URL to the Explore - lookml_url: URL to the LookML file where the data test is defined - message: Message returned by the data test - """ - - model: Optional[str] = None - explore: Optional[str] = None - test_name: Optional[str] = None - explore_url: Optional[str] = None - lookml_url: Optional[str] = None - message: Optional[str] = None - - def __init__( - self, - *, - model: Optional[str] = None, - explore: Optional[str] = None, - test_name: Optional[str] = None, - explore_url: Optional[str] = None, - lookml_url: Optional[str] = None, - message: Optional[str] = None - ): - self.model = model - self.explore = explore - self.test_name = test_name - self.explore_url = explore_url - self.lookml_url = lookml_url - self.message = message - - -@attr.s(auto_attribs=True, init=False) -class AssertValidatorTestSuccess(model.Model): - """ - Attributes: - model: LookML model that contains the data test - explore: LookML Explore that is used as the explore_source for the data test - test_name: Name of the data test - explore_url: URL to the Explore - lookml_url: URL to the LookML file where the data test is defined - """ - - model: Optional[str] = None - explore: Optional[str] = None - test_name: Optional[str] = None - explore_url: Optional[str] = None - lookml_url: Optional[str] = None - - def __init__( - self, - *, - model: Optional[str] = None, - explore: Optional[str] = None, - test_name: Optional[str] = None, - explore_url: Optional[str] = None, - lookml_url: Optional[str] = None - ): - self.model = model - self.explore = explore - self.test_name = test_name - self.explore_url = explore_url - self.lookml_url = lookml_url - - @attr.s(auto_attribs=True, init=False) class AsyncDeployResponse(model.Model): """ @@ -1669,35 +1552,6 @@ def __init__( self.lookml_url = lookml_url -@attr.s(auto_attribs=True, init=False) -class CIChangeRequest(model.Model): - """ - Attributes: - change_request_number: Numeric identifier of the change request - change_request_url: URL of the change request - change_request_name: Name of the change request - change_request_commits_url: For PR-triggered CI runs, the URL to the change request commit that triggered the run. - """ - - change_request_number: Optional[int] = None - change_request_url: Optional[str] = None - change_request_name: Optional[str] = None - change_request_commits_url: Optional[str] = None - - def __init__( - self, - *, - change_request_number: Optional[int] = None, - change_request_url: Optional[str] = None, - change_request_name: Optional[str] = None, - change_request_commits_url: Optional[str] = None - ): - self.change_request_number = change_request_number - self.change_request_url = change_request_url - self.change_request_name = change_request_name - self.change_request_commits_url = change_request_commits_url - - @attr.s(auto_attribs=True, init=False) class CIContentValidatorContentError(model.Model): """ @@ -1887,35 +1741,6 @@ def __init__( self.instance = instance -@attr.s(auto_attribs=True, init=False) -class CIGitState(model.Model): - """ - Attributes: - branch: Git branch that the CI run validates - repository: Git repository that contains the Git branch being validated - commit_ref: Git commit that the CI run validates - target: For incremental runs, the Git branch that the CI run compares against during validation - """ - - branch: Optional[str] = None - repository: Optional[str] = None - commit_ref: Optional[str] = None - target: Optional[str] = None - - def __init__( - self, - *, - branch: Optional[str] = None, - repository: Optional[str] = None, - commit_ref: Optional[str] = None, - target: Optional[str] = None - ): - self.branch = branch - self.repository = repository - self.commit_ref = commit_ref - self.target = target - - @attr.s(auto_attribs=True, init=False) class CILookMLValidatorError(model.Model): """ @@ -2057,6 +1882,9 @@ class CIRun(model.Model): git_target_branch_name: Git target branch name of the CI run git_status_url: Git status URL of the CI run git_target_url: Git target URL of the CI run + dbt_cloud_git_branch_name: Git branch name in dbt Cloud + dbt_cloud_git_commit_ref: Git commit ref in dbt Cloud + dbt_cloud_git_repository_name: Git repository name in dbt Cloud created_at: Time and date that the CI run was created started_at: Time and date that the CI run was started finished_at: Time and date that the CI run was finished @@ -2066,6 +1894,7 @@ class CIRun(model.Model): crashed_check_count: Number of crashed checks of the CI run run_url: URL of the CI run user_attributes: User attributes for the CI run + project_imports: Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run """ can: Optional[MutableMapping[str, bool]] = None @@ -2090,6 +1919,9 @@ class CIRun(model.Model): git_target_branch_name: Optional[str] = None git_status_url: Optional[str] = None git_target_url: Optional[str] = None + dbt_cloud_git_branch_name: Optional[str] = None + dbt_cloud_git_commit_ref: Optional[str] = None + dbt_cloud_git_repository_name: Optional[str] = None created_at: Optional[datetime.datetime] = None started_at: Optional[datetime.datetime] = None finished_at: Optional[datetime.datetime] = None @@ -2099,6 +1931,7 @@ class CIRun(model.Model): crashed_check_count: Optional[int] = None run_url: Optional[str] = None user_attributes: Optional[Sequence["CIRunUserAttribute"]] = None + project_imports: Optional[MutableMapping[str, Any]] = None def __init__( self, @@ -2125,6 +1958,9 @@ def __init__( git_target_branch_name: Optional[str] = None, git_status_url: Optional[str] = None, git_target_url: Optional[str] = None, + dbt_cloud_git_branch_name: Optional[str] = None, + dbt_cloud_git_commit_ref: Optional[str] = None, + dbt_cloud_git_repository_name: Optional[str] = None, created_at: Optional[datetime.datetime] = None, started_at: Optional[datetime.datetime] = None, finished_at: Optional[datetime.datetime] = None, @@ -2133,7 +1969,8 @@ def __init__( assigned_ci_user_at: Optional[datetime.datetime] = None, crashed_check_count: Optional[int] = None, run_url: Optional[str] = None, - user_attributes: Optional[Sequence["CIRunUserAttribute"]] = None + user_attributes: Optional[Sequence["CIRunUserAttribute"]] = None, + project_imports: Optional[MutableMapping[str, Any]] = None ): self.can = can self.id = id @@ -2157,6 +1994,9 @@ def __init__( self.git_target_branch_name = git_target_branch_name self.git_status_url = git_status_url self.git_target_url = git_target_url + self.dbt_cloud_git_branch_name = dbt_cloud_git_branch_name + self.dbt_cloud_git_commit_ref = dbt_cloud_git_commit_ref + self.dbt_cloud_git_repository_name = dbt_cloud_git_repository_name self.created_at = created_at self.started_at = started_at self.finished_at = finished_at @@ -2166,6 +2006,7 @@ def __init__( self.crashed_check_count = crashed_check_count self.run_url = run_url self.user_attributes = user_attributes + self.project_imports = project_imports @attr.s(auto_attribs=True, init=False) @@ -2180,6 +2021,8 @@ class CIRunResult(model.Model): content_error: lookml_result: lookml_error: + style_result: + style_error: generic_error: """ @@ -2191,6 +2034,8 @@ class CIRunResult(model.Model): content_error: Optional["CIGenericError"] = None lookml_result: Optional["CILookMLValidatorResult"] = None lookml_error: Optional["CIGenericError"] = None + style_result: Optional["CIStyleValidatorResult"] = None + style_error: Optional["CIGenericError"] = None generic_error: Optional["CIGenericError"] = None def __init__( @@ -2204,6 +2049,8 @@ def __init__( content_error: Optional["CIGenericError"] = None, lookml_result: Optional["CILookMLValidatorResult"] = None, lookml_error: Optional["CIGenericError"] = None, + style_result: Optional["CIStyleValidatorResult"] = None, + style_error: Optional["CIGenericError"] = None, generic_error: Optional["CIGenericError"] = None ): self.sql_result = sql_result @@ -2214,6 +2061,8 @@ def __init__( self.content_error = content_error self.lookml_result = lookml_result self.lookml_error = lookml_error + self.style_result = style_result + self.style_error = style_error self.generic_error = generic_error @@ -2242,35 +2091,6 @@ def __init__( self.value = value -@attr.s(auto_attribs=True, init=False) -class CIScheduleTrigger(model.Model): - """ - Attributes: - enabled: Whether the CI run schedule is active - day: For scheduled runs, day of the week that the CI run is scheduled - hour: For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled - frequency: For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly) - """ - - enabled: Optional[bool] = None - day: Optional[str] = None - hour: Optional[str] = None - frequency: Optional[str] = None - - def __init__( - self, - *, - enabled: Optional[bool] = None, - day: Optional[str] = None, - hour: Optional[str] = None, - frequency: Optional[str] = None - ): - self.enabled = enabled - self.day = day - self.hour = hour - self.frequency = frequency - - @attr.s(auto_attribs=True, init=False) class CISqlValidatorError(model.Model): """ @@ -2419,6 +2239,161 @@ def __init__( self.errors = errors +@attr.s(auto_attribs=True, init=False) +class CIStyleValidatorError(model.Model): + """ + Attributes: + type: A URI reference that identifies the problem type + title: Overview of the error + detail: Detail of the error + status: The HTTP status code for the problem + instance: URI reference that identifies the specific occurrence of the problem + model: LookML model that contains the error + explore: LookML Explore that contains the error + field_name: LookML field that caused the error + message: Message returned by the style validator + severity: Severity of the error (warning, error, fatal, info, success) + line_number: Line number of the error in the LookML file + character: Character offset of the error in the LookML file + lookml_url: URL to the LookML that caused the error + file_path: IDE folder path to the LookML file that caused the error + rule_name: Name of the style rule + entity_type: Type of LookML entity evaluated + entity_name: Name of LookML entity evaluated + is_incremental: Whether the error was newly introduced + error_id: Deterministic fingerprint of the violation + documentation_url: URL to documentation for the style rule + context: LookML source code snippet lines surrounding the error + context_line_number: Line number where the context code snippet begins + """ + + type: Optional[str] = None + title: Optional[str] = None + detail: Optional[str] = None + status: Optional[str] = None + instance: Optional[str] = None + model: Optional[str] = None + explore: Optional[str] = None + field_name: Optional[str] = None + message: Optional[str] = None + severity: Optional[str] = None + line_number: Optional[int] = None + character: Optional[int] = None + lookml_url: Optional[str] = None + file_path: Optional[str] = None + rule_name: Optional[str] = None + entity_type: Optional[str] = None + entity_name: Optional[str] = None + is_incremental: Optional[bool] = None + error_id: Optional[str] = None + documentation_url: Optional[str] = None + context: Optional[Sequence[str]] = None + context_line_number: Optional[int] = None + + def __init__( + self, + *, + type: Optional[str] = None, + title: Optional[str] = None, + detail: Optional[str] = None, + status: Optional[str] = None, + instance: Optional[str] = None, + model: Optional[str] = None, + explore: Optional[str] = None, + field_name: Optional[str] = None, + message: Optional[str] = None, + severity: Optional[str] = None, + line_number: Optional[int] = None, + character: Optional[int] = None, + lookml_url: Optional[str] = None, + file_path: Optional[str] = None, + rule_name: Optional[str] = None, + entity_type: Optional[str] = None, + entity_name: Optional[str] = None, + is_incremental: Optional[bool] = None, + error_id: Optional[str] = None, + documentation_url: Optional[str] = None, + context: Optional[Sequence[str]] = None, + context_line_number: Optional[int] = None + ): + self.type = type + self.title = title + self.detail = detail + self.status = status + self.instance = instance + self.model = model + self.explore = explore + self.field_name = field_name + self.message = message + self.severity = severity + self.line_number = line_number + self.character = character + self.lookml_url = lookml_url + self.file_path = file_path + self.rule_name = rule_name + self.entity_type = entity_type + self.entity_name = entity_name + self.is_incremental = is_incremental + self.error_id = error_id + self.documentation_url = documentation_url + self.context = context + self.context_line_number = context_line_number + + +@attr.s(auto_attribs=True, init=False) +class CIStyleValidatorErrorItem(model.Model): + """ + Attributes: + style_error: + generic_error: + """ + + style_error: Optional["CIStyleValidatorError"] = None + generic_error: Optional["CIGenericError"] = None + + def __init__( + self, + *, + style_error: Optional["CIStyleValidatorError"] = None, + generic_error: Optional["CIGenericError"] = None + ): + self.style_error = style_error + self.generic_error = generic_error + + +@attr.s(auto_attribs=True, init=False) +class CIStyleValidatorResult(model.Model): + """ + Attributes: + name: Name of the validator (style) + incremental: Whether the validation was incremental + status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) + error_count: Total number of failed style validations + errors: Details of the LookML that failed style validation + """ + + name: Optional[str] = None + incremental: Optional[bool] = None + status: Optional[str] = None + error_count: Optional[int] = None + errors: Optional[Sequence["CIStyleValidatorErrorItem"]] = None + + def __init__( + self, + *, + name: Optional[str] = None, + incremental: Optional[bool] = None, + status: Optional[str] = None, + error_count: Optional[int] = None, + errors: Optional[Sequence["CIStyleValidatorErrorItem"]] = None + ): + self.name = name + self.incremental = incremental + self.status = status + self.error_count = error_count + self.errors = errors + + @attr.s(auto_attribs=True, init=False) class ColorCollection(model.Model): """ @@ -2769,6 +2744,7 @@ class ContentSearch(model.Model): created_by_id: Creator Id of the content certification_status: Certification status of the content parent_folder_name: Name of the parent folder of the content + parent_project_name: Name of the parent project of the content """ can: Optional[MutableMapping[str, bool]] = None @@ -2784,6 +2760,7 @@ class ContentSearch(model.Model): created_by_id: Optional[int] = None certification_status: Optional[str] = None parent_folder_name: Optional[str] = None + parent_project_name: Optional[str] = None def __init__( self, @@ -2800,7 +2777,8 @@ def __init__( model: Optional[str] = None, created_by_id: Optional[int] = None, certification_status: Optional[str] = None, - parent_folder_name: Optional[str] = None + parent_folder_name: Optional[str] = None, + parent_project_name: Optional[str] = None ): self.can = can self.content_id = content_id @@ -2815,6 +2793,7 @@ def __init__( self.created_by_id = created_by_id self.certification_status = certification_status self.parent_folder_name = parent_folder_name + self.parent_project_name = parent_project_name @attr.s(auto_attribs=True, init=False) @@ -3305,81 +3284,12 @@ def __init__( self, *, name: Optional[str] = None, - look_id: Optional[str] = None, - id: Optional[str] = None - ): - self.name = name - self.look_id = look_id - self.id = id - - -@attr.s(auto_attribs=True, init=False) -class ContentValidatorContentError(model.Model): - """ - Attributes: - type: A URI reference that identifies the problem type - title: Overview of the error - detail: Detail of the error - status: The HTTP status code for the problem - instance: URI reference that identifies the specific occurrence of the problem - model: LookML model that contains the error - explore: LookML Explore that contains the error - field_name: LookML field that caused the error - content_type: Type of the content (dashboard, look) - folder: Folder of the content - url: URL of the content - tile_type: Type of the tile (dashboard_element, dashboard_filter) - tile_title: Title of the tile - message: Message returned by the content validator - """ - - type: Optional[str] = None - title: Optional[str] = None - detail: Optional[str] = None - status: Optional[str] = None - instance: Optional[str] = None - model: Optional[str] = None - explore: Optional[str] = None - field_name: Optional[str] = None - content_type: Optional[str] = None - folder: Optional[str] = None - url: Optional[str] = None - tile_type: Optional[str] = None - tile_title: Optional[str] = None - message: Optional[str] = None - - def __init__( - self, - *, - type: Optional[str] = None, - title: Optional[str] = None, - detail: Optional[str] = None, - status: Optional[str] = None, - instance: Optional[str] = None, - model: Optional[str] = None, - explore: Optional[str] = None, - field_name: Optional[str] = None, - content_type: Optional[str] = None, - folder: Optional[str] = None, - url: Optional[str] = None, - tile_type: Optional[str] = None, - tile_title: Optional[str] = None, - message: Optional[str] = None + look_id: Optional[str] = None, + id: Optional[str] = None ): - self.type = type - self.title = title - self.detail = detail - self.status = status - self.instance = instance - self.model = model - self.explore = explore - self.field_name = field_name - self.content_type = content_type - self.folder = folder - self.url = url - self.tile_type = tile_type - self.tile_title = tile_title - self.message = message + self.name = name + self.look_id = look_id + self.id = id @attr.s(auto_attribs=True, init=False) @@ -3437,77 +3347,6 @@ def __init__( self.id = id -@attr.s(auto_attribs=True, init=False) -class ContentValidatorErrorItem(model.Model): - """ - Attributes: - content_error: - generic_error: - """ - - content_error: Optional["ContentValidatorContentError"] = None - generic_error: Optional["GenericError"] = None - - def __init__( - self, - *, - content_error: Optional["ContentValidatorContentError"] = None, - generic_error: Optional["GenericError"] = None - ): - self.content_error = content_error - self.generic_error = generic_error - - -@attr.s(auto_attribs=True, init=False) -class ContentValidatorResult(model.Model): - """ - Attributes: - name: Name of the validator (content) - incremental: Whether the validation was incremental - status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - result: Results of the content validation - """ - - name: Optional[str] = None - incremental: Optional[bool] = None - status: Optional[str] = None - result: Optional[Sequence["ContentValidatorTestedExplore"]] = None - - def __init__( - self, - *, - name: Optional[str] = None, - incremental: Optional[bool] = None, - status: Optional[str] = None, - result: Optional[Sequence["ContentValidatorTestedExplore"]] = None - ): - self.name = name - self.incremental = incremental - self.status = status - self.result = result - - -@attr.s(auto_attribs=True, init=False) -class ContentValidatorTestedExplore(model.Model): - """ - Attributes: - error_count: Total number of failed content validations - errors: Details of the content that failed validation - """ - - error_count: Optional[int] = None - errors: Optional[Sequence["ContentValidatorErrorItem"]] = None - - def __init__( - self, - *, - error_count: Optional[int] = None, - errors: Optional[Sequence["ContentValidatorErrorItem"]] = None - ): - self.error_count = error_count - self.errors = errors - - @attr.s(auto_attribs=True, init=False) class ContentView(model.Model): """ @@ -3574,12 +3413,24 @@ class Context(model.Model): """ Attributes: instructions: Agent instructions + show_analytical_details: Show analytical details in preview + show_debug: Show debug info in preview """ instructions: Optional[str] = None + show_analytical_details: Optional[bool] = None + show_debug: Optional[bool] = None - def __init__(self, *, instructions: Optional[str] = None): + def __init__( + self, + *, + instructions: Optional[str] = None, + show_analytical_details: Optional[bool] = None, + show_debug: Optional[bool] = None + ): self.instructions = instructions + self.show_analytical_details = show_analytical_details + self.show_debug = show_debug @attr.s(auto_attribs=True, init=False) @@ -3758,47 +3609,6 @@ def __init__( self.message = message -@attr.s(auto_attribs=True, init=False) -class CreateCIRunRequest(model.Model): - """ - Attributes: - suite_id: ID of the CI suite - branch: Branch that the CI run should validate. Omit to test production. - commit: Commit that the CI run should validate. Omit to test production. - """ - - suite_id: Optional[str] = None - branch: Optional[str] = None - commit: Optional[str] = None - - def __init__( - self, - *, - suite_id: Optional[str] = None, - branch: Optional[str] = None, - commit: Optional[str] = None - ): - self.suite_id = suite_id - self.branch = branch - self.commit = commit - - -@attr.s(auto_attribs=True, init=False) -class CreateCIRunResponse(model.Model): - """ - Attributes: - run_id: ID of the CI run - status: Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) - """ - - run_id: Optional[str] = None - status: Optional[str] = None - - def __init__(self, *, run_id: Optional[str] = None, status: Optional[str] = None): - self.run_id = run_id - self.status = status - - @attr.s(auto_attribs=True, init=False) class CreateContinuousIntegrationRunRequest(model.Model): """ @@ -3807,12 +3617,14 @@ class CreateContinuousIntegrationRunRequest(model.Model): branch: The git branch to use. Required for dev workspace. Omit to test production. commit: Commit that the CI run should validate. Omit to test production. user_attributes: User attributes to override for the CI run. + project_imports: Map of upstream project names to commit SHAs or git configurations to pin for the CI run. """ suite_id: Optional[str] = None branch: Optional[str] = None commit: Optional[str] = None user_attributes: Optional[Sequence["UserAttributeOverride"]] = None + project_imports: Optional[MutableMapping[str, Any]] = None def __init__( self, @@ -3820,12 +3632,14 @@ def __init__( suite_id: Optional[str] = None, branch: Optional[str] = None, commit: Optional[str] = None, - user_attributes: Optional[Sequence["UserAttributeOverride"]] = None + user_attributes: Optional[Sequence["UserAttributeOverride"]] = None, + project_imports: Optional[MutableMapping[str, Any]] = None ): self.suite_id = suite_id self.branch = branch self.commit = commit self.user_attributes = user_attributes + self.project_imports = project_imports @attr.s(auto_attribs=True, init=False) @@ -4761,6 +4575,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 + layout_granularity: The layout granularity to apply to this dashboard (ie: default or granular) 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: """ @@ -4818,6 +4633,7 @@ class Dashboard(model.Model): usage_count: Optional[int] = None is_owner_disabled: Optional[bool] = None url: Optional[str] = None + layout_granularity: Optional[str] = None preserve_desktop_layout: Optional[bool] = None download_settings: Optional["DashboardDownloadSettings"] = None @@ -4877,6 +4693,7 @@ def __init__( usage_count: Optional[int] = None, is_owner_disabled: Optional[bool] = None, url: Optional[str] = None, + layout_granularity: Optional[str] = None, preserve_desktop_layout: Optional[bool] = None, download_settings: Optional["DashboardDownloadSettings"] = None ): @@ -4935,6 +4752,7 @@ def __init__( self.usage_count = usage_count self.is_owner_disabled = is_owner_disabled self.url = url + self.layout_granularity = layout_granularity self.preserve_desktop_layout = preserve_desktop_layout self.download_settings = download_settings @@ -4972,6 +4790,14 @@ class DashboardAppearance(model.Model): tile_shadow: Tile shadow on/off key_color: Key color modern_vis2026: Whether to modernize visualizations on this dashboard + show_dashboard_header: Toggle to show dashboard header. Defaults to true. + show_title: Toggle to show dashboard title. Defaults to true. + show_filters_bar: Toggle to show filters bar. Defaults to true. + show_filters_toggle: Toggle to show filters toggle button. Defaults to true. + show_reload_data_icon: Toggle to show reload data icon/button. Defaults to true. + show_dashboard_menu: Toggle to show dashboard actions menu. Defaults to true. + show_last_updated_indicator: Toggle to show last updated indicator. Defaults to true. + background_opacity: Background image opacity (0.0 to 1.0) """ page_side_margins: Optional[int] = None @@ -4982,6 +4808,14 @@ class DashboardAppearance(model.Model): tile_shadow: Optional[bool] = None key_color: Optional[str] = None modern_vis2026: Optional[bool] = None + show_dashboard_header: Optional[bool] = None + show_title: Optional[bool] = None + show_filters_bar: Optional[bool] = None + show_filters_toggle: Optional[bool] = None + show_reload_data_icon: Optional[bool] = None + show_dashboard_menu: Optional[bool] = None + show_last_updated_indicator: Optional[bool] = None + background_opacity: Optional[float] = None def __init__( self, @@ -4993,7 +4827,15 @@ def __init__( tile_background_color: Optional[str] = None, tile_shadow: Optional[bool] = None, key_color: Optional[str] = None, - modern_vis2026: Optional[bool] = None + modern_vis2026: Optional[bool] = None, + show_dashboard_header: Optional[bool] = None, + show_title: Optional[bool] = None, + show_filters_bar: Optional[bool] = None, + show_filters_toggle: Optional[bool] = None, + show_reload_data_icon: Optional[bool] = None, + show_dashboard_menu: Optional[bool] = None, + show_last_updated_indicator: Optional[bool] = None, + background_opacity: Optional[float] = None ): self.page_side_margins = page_side_margins self.page_background_color = page_background_color @@ -5003,6 +4845,14 @@ def __init__( self.tile_shadow = tile_shadow self.key_color = key_color self.modern_vis2026 = modern_vis2026 + self.show_dashboard_header = show_dashboard_header + self.show_title = show_title + self.show_filters_bar = show_filters_bar + self.show_filters_toggle = show_filters_toggle + self.show_reload_data_icon = show_reload_data_icon + self.show_dashboard_menu = show_dashboard_menu + self.show_last_updated_indicator = show_last_updated_indicator + self.background_opacity = background_opacity @attr.s(auto_attribs=True, init=False) @@ -5096,6 +4946,7 @@ class DashboardDownloadSettings(model.Model): limit_options: Limit option rows_limit: Rows limit columns_limit: Columns limit + append_excel_metadata: Append Excel metadata """ format_option: Optional[str] = None @@ -5104,6 +4955,7 @@ class DashboardDownloadSettings(model.Model): limit_options: Optional[str] = None rows_limit: Optional[int] = None columns_limit: Optional[int] = None + append_excel_metadata: Optional[bool] = None def __init__( self, @@ -5113,7 +4965,8 @@ def __init__( result_options: Optional[str] = None, limit_options: Optional[str] = None, rows_limit: Optional[int] = None, - columns_limit: Optional[int] = None + columns_limit: Optional[int] = None, + append_excel_metadata: Optional[bool] = None ): self.format_option = format_option self.value_options = value_options @@ -5121,6 +4974,7 @@ def __init__( self.limit_options = limit_options self.rows_limit = rows_limit self.columns_limit = columns_limit + self.append_excel_metadata = append_excel_metadata @attr.s(auto_attribs=True, init=False) @@ -5132,6 +4986,7 @@ class DashboardElement(model.Model): body_text_as_html: Text tile body text as Html dashboard_id: Id of Dashboard dashboard_layout_id: Id of Dashboard Layout + group_id: ID of the group to place this element under in the layout edit_uri: Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only). id: Unique Id look: @@ -5161,6 +5016,8 @@ class DashboardElement(model.Model): extension_id: Extension ID aria_description: Custom ARIA description text certification_metadata: + image_id: ID of Dashboard Image + images: Images """ can: Optional[MutableMapping[str, bool]] = None @@ -5168,6 +5025,7 @@ class DashboardElement(model.Model): body_text_as_html: Optional[str] = None dashboard_id: Optional[str] = None dashboard_layout_id: Optional[str] = None + group_id: Optional[str] = None edit_uri: Optional[str] = None id: Optional[str] = None look: Optional["LookWithQuery"] = None @@ -5197,6 +5055,8 @@ class DashboardElement(model.Model): extension_id: Optional[str] = None aria_description: Optional[str] = None certification_metadata: Optional["Certification"] = None + image_id: Optional[str] = None + images: Optional[Sequence["Image"]] = None def __init__( self, @@ -5206,6 +5066,7 @@ def __init__( body_text_as_html: Optional[str] = None, dashboard_id: Optional[str] = None, dashboard_layout_id: Optional[str] = None, + group_id: Optional[str] = None, edit_uri: Optional[str] = None, id: Optional[str] = None, look: Optional["LookWithQuery"] = None, @@ -5234,13 +5095,16 @@ def __init__( subtitle_text_as_html: Optional[str] = None, extension_id: Optional[str] = None, aria_description: Optional[str] = None, - certification_metadata: Optional["Certification"] = None + certification_metadata: Optional["Certification"] = None, + image_id: Optional[str] = None, + images: Optional[Sequence["Image"]] = None ): self.can = can self.body_text = body_text self.body_text_as_html = body_text_as_html self.dashboard_id = dashboard_id self.dashboard_layout_id = dashboard_layout_id + self.group_id = group_id self.edit_uri = edit_uri self.id = id self.look = look @@ -5270,6 +5134,8 @@ def __init__( self.extension_id = extension_id self.aria_description = aria_description self.certification_metadata = certification_metadata + self.image_id = image_id + self.images = images @attr.s(auto_attribs=True, init=False) @@ -5440,6 +5306,7 @@ class DashboardLayoutComponent(model.Model): granular_column: Column (granular layout) granular_width: Width (granular layout) granular_height: Height (granular layout) + group_id: Id of parent Dashboard Layout Component group """ can: Optional[MutableMapping[str, bool]] = None @@ -5458,6 +5325,7 @@ class DashboardLayoutComponent(model.Model): granular_column: Optional[int] = None granular_width: Optional[int] = None granular_height: Optional[int] = None + group_id: Optional[str] = None def __init__( self, @@ -5477,7 +5345,8 @@ def __init__( granular_row: Optional[int] = None, granular_column: Optional[int] = None, granular_width: Optional[int] = None, - granular_height: Optional[int] = None + granular_height: Optional[int] = None, + group_id: Optional[str] = None ): self.can = can self.id = id @@ -5495,6 +5364,7 @@ def __init__( self.granular_column = granular_column self.granular_width = granular_width self.granular_height = granular_height + self.group_id = group_id @attr.s(auto_attribs=True, init=False) @@ -5916,6 +5786,7 @@ class DBConnection(model.Model): dialect: snippets: SQL Runner snippets for this connection pdts_enabled: True if PDTs are enabled on this connection + project_id: ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. named_driver_version_requested: Requested JDBC driver version name named_driver_version_actual: Resolved JDBC driver version host: Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. @@ -5923,11 +5794,13 @@ class DBConnection(model.Model): username: Username for server authentication password: (Write-Only) Password for server authentication has_password: Whether or not the password is present + service_account_auth_enabled: Whether Service Account OAuth authentication is enabled for this connection uses_oauth: Whether the connection uses OAuth for authentication. uses_key_pair_auth: Whether the connection uses key-pair for authentication. uses_instance_oauth: Whether the integration uses the oauth instance account. uses_service_auth: Whether the connection uses service authentication certificate. certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + user_attr_certificate: The name of the user attribute containing the connection certificate. file_type: (Write-Only) Certificate keyfile type - .json, .p8 or .p12 database: Database name db_timezone: Time zone of database @@ -5983,6 +5856,7 @@ class DBConnection(model.Model): dialect: Optional["Dialect"] = None snippets: Optional[Sequence["Snippet"]] = None pdts_enabled: Optional[bool] = None + project_id: Optional[str] = None named_driver_version_requested: Optional[str] = None named_driver_version_actual: Optional[str] = None host: Optional[str] = None @@ -5990,11 +5864,13 @@ class DBConnection(model.Model): username: Optional[str] = None password: Optional[str] = None has_password: Optional[bool] = None + service_account_auth_enabled: Optional[bool] = None uses_oauth: Optional[bool] = None uses_key_pair_auth: Optional[bool] = None uses_instance_oauth: Optional[bool] = None uses_service_auth: Optional[bool] = None certificate: Optional[str] = None + user_attr_certificate: Optional[str] = None file_type: Optional[str] = None database: Optional[str] = None db_timezone: Optional[str] = None @@ -6052,6 +5928,7 @@ def __init__( dialect: Optional["Dialect"] = None, snippets: Optional[Sequence["Snippet"]] = None, pdts_enabled: Optional[bool] = None, + project_id: Optional[str] = None, named_driver_version_requested: Optional[str] = None, named_driver_version_actual: Optional[str] = None, host: Optional[str] = None, @@ -6059,11 +5936,13 @@ def __init__( username: Optional[str] = None, password: Optional[str] = None, has_password: Optional[bool] = None, + service_account_auth_enabled: Optional[bool] = None, uses_oauth: Optional[bool] = None, uses_key_pair_auth: Optional[bool] = None, uses_instance_oauth: Optional[bool] = None, uses_service_auth: Optional[bool] = None, certificate: Optional[str] = None, + user_attr_certificate: Optional[str] = None, file_type: Optional[str] = None, database: Optional[str] = None, db_timezone: Optional[str] = None, @@ -6118,6 +5997,7 @@ def __init__( self.dialect = dialect self.snippets = snippets self.pdts_enabled = pdts_enabled + self.project_id = project_id self.named_driver_version_requested = named_driver_version_requested self.named_driver_version_actual = named_driver_version_actual self.host = host @@ -6125,11 +6005,13 @@ def __init__( self.username = username self.password = password self.has_password = has_password + self.service_account_auth_enabled = service_account_auth_enabled self.uses_oauth = uses_oauth self.uses_key_pair_auth = uses_key_pair_auth self.uses_instance_oauth = uses_instance_oauth self.uses_service_auth = uses_service_auth self.certificate = certificate + self.user_attr_certificate = user_attr_certificate self.file_type = file_type self.database = database self.db_timezone = db_timezone @@ -6189,6 +6071,7 @@ class DBConnectionBase(model.Model): dialect: snippets: SQL Runner snippets for this connection pdts_enabled: True if PDTs are enabled on this connection + project_id: ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. """ can: Optional[MutableMapping[str, bool]] = None @@ -6196,6 +6079,7 @@ class DBConnectionBase(model.Model): dialect: Optional["Dialect"] = None snippets: Optional[Sequence["Snippet"]] = None pdts_enabled: Optional[bool] = None + project_id: Optional[str] = None def __init__( self, @@ -6204,13 +6088,15 @@ def __init__( name: Optional[str] = None, dialect: Optional["Dialect"] = None, snippets: Optional[Sequence["Snippet"]] = None, - pdts_enabled: Optional[bool] = None + pdts_enabled: Optional[bool] = None, + project_id: Optional[str] = None ): self.can = can self.name = name self.dialect = dialect self.snippets = snippets self.pdts_enabled = pdts_enabled + self.project_id = project_id @attr.s(auto_attribs=True, init=False) @@ -6631,6 +6517,7 @@ class DialectInfoOptions(model.Model): auth: Has auth support cost_estimate: Has configurable cost estimation disabled: Disable this connection. This will prevent any queries from running on this connection. + query_holding_disabled: Disable query holding for this connection. disable_context_comment: Can disable query context comments host: Host is required instance_name: Instance name is required @@ -6649,6 +6536,7 @@ class DialectInfoOptions(model.Model): username: Username can be specified username_required: Username is required supports_connection_pooling: Has support for connection pooling + user_attribute_certificate: Has user attribute certificate support """ additional_params: Optional[bool] = None @@ -6657,6 +6545,7 @@ class DialectInfoOptions(model.Model): auth: Optional[bool] = None cost_estimate: Optional[bool] = None disabled: Optional[bool] = None + query_holding_disabled: Optional[bool] = None disable_context_comment: Optional[bool] = None host: Optional[bool] = None instance_name: Optional[bool] = None @@ -6675,6 +6564,7 @@ class DialectInfoOptions(model.Model): username: Optional[bool] = None username_required: Optional[bool] = None supports_connection_pooling: Optional[bool] = None + user_attribute_certificate: Optional[bool] = None def __init__( self, @@ -6685,6 +6575,7 @@ def __init__( auth: Optional[bool] = None, cost_estimate: Optional[bool] = None, disabled: Optional[bool] = None, + query_holding_disabled: Optional[bool] = None, disable_context_comment: Optional[bool] = None, host: Optional[bool] = None, instance_name: Optional[bool] = None, @@ -6702,7 +6593,8 @@ def __init__( tns: Optional[bool] = None, username: Optional[bool] = None, username_required: Optional[bool] = None, - supports_connection_pooling: Optional[bool] = None + supports_connection_pooling: Optional[bool] = None, + user_attribute_certificate: Optional[bool] = None ): self.additional_params = additional_params self.after_connect_statements = after_connect_statements @@ -6710,6 +6602,7 @@ def __init__( self.auth = auth self.cost_estimate = cost_estimate self.disabled = disabled + self.query_holding_disabled = query_holding_disabled self.disable_context_comment = disable_context_comment self.host = host self.instance_name = instance_name @@ -6728,6 +6621,7 @@ def __init__( self.username = username self.username_required = username_required self.supports_connection_pooling = supports_connection_pooling + self.user_attribute_certificate = user_attribute_certificate @attr.s(auto_attribs=True, init=False) @@ -6810,6 +6704,7 @@ class EmbedConfig(model.Model): embed_cookieless_v2: Is Cookieless embedding enabled for this Looker embed_content_navigation: Is embed content navigation enabled for this looker embed_content_management: Is embed content management enabled for this Looker + embed_vis_modernization_default: Default net new visualizations in embedded context to Modern theme 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. @@ -6825,6 +6720,7 @@ class EmbedConfig(model.Model): embed_cookieless_v2: Optional[bool] = None embed_content_navigation: Optional[bool] = None embed_content_management: Optional[bool] = None + embed_vis_modernization_default: Optional[bool] = None strict_sameorigin_for_login: Optional[bool] = None look_filters: Optional[bool] = None hide_look_navigation: Optional[bool] = None @@ -6842,6 +6738,7 @@ def __init__( embed_cookieless_v2: Optional[bool] = None, embed_content_navigation: Optional[bool] = None, embed_content_management: Optional[bool] = None, + embed_vis_modernization_default: Optional[bool] = None, strict_sameorigin_for_login: Optional[bool] = None, look_filters: Optional[bool] = None, hide_look_navigation: Optional[bool] = None, @@ -6856,6 +6753,7 @@ def __init__( self.embed_cookieless_v2 = embed_cookieless_v2 self.embed_content_navigation = embed_content_navigation self.embed_content_management = embed_content_management + self.embed_vis_modernization_default = embed_vis_modernization_default self.strict_sameorigin_for_login = strict_sameorigin_for_login self.look_filters = look_filters self.hide_look_navigation = hide_look_navigation @@ -7555,39 +7453,6 @@ class Format(enum.Enum): Format.__new__ = model.safe_enum__new__ # type: ignore -@attr.s(auto_attribs=True, init=False) -class GenericError(model.Model): - """ - Attributes: - type: A URI reference that identifies the problem type - title: Overview of the error - detail: Detail of the error - status: The HTTP status code for the problem - instance: URI reference that identifies the specific occurrence of the problem - """ - - type: Optional[str] = None - title: Optional[str] = None - detail: Optional[str] = None - status: Optional[str] = None - instance: Optional[str] = None - - def __init__( - self, - *, - type: Optional[str] = None, - title: Optional[str] = None, - detail: Optional[str] = None, - status: Optional[str] = None, - instance: Optional[str] = None - ): - self.type = type - self.title = title - self.detail = detail - self.status = status - self.instance = instance - - @attr.s(auto_attribs=True, init=False) class GitBranch(model.Model): """ @@ -7723,112 +7588,6 @@ def __init__( self.status = status -@attr.s(auto_attribs=True, init=False) -class GitDiagnosticIssue(model.Model): - """ - Attributes: - can: Operations the current user is able to perform on this object - id: Unique ID of the diagnostic issue. - report_id: Parent diagnostic report ID. - project_id: Target Looker Project ID. - project_type: Environment scope (developer/production). - issue_type: Git diagnostic issue category. - issue_version: Version schema. - state: Current execution status. - created_at: Creation timestamp. - updated_at: Last update timestamp. - """ - - can: Optional[MutableMapping[str, bool]] = None - id: Optional[str] = None - report_id: Optional[str] = None - project_id: Optional[str] = None - project_type: Optional[str] = None - issue_type: Optional[str] = None - issue_version: Optional[str] = None - state: Optional[str] = None - created_at: Optional[datetime.datetime] = None - updated_at: Optional[datetime.datetime] = None - - def __init__( - self, - *, - can: Optional[MutableMapping[str, bool]] = None, - id: Optional[str] = None, - report_id: Optional[str] = None, - project_id: Optional[str] = None, - project_type: Optional[str] = None, - issue_type: Optional[str] = None, - issue_version: Optional[str] = None, - state: Optional[str] = None, - created_at: Optional[datetime.datetime] = None, - updated_at: Optional[datetime.datetime] = None - ): - self.can = can - self.id = id - self.report_id = report_id - self.project_id = project_id - self.project_type = project_type - self.issue_type = issue_type - self.issue_version = issue_version - self.state = state - self.created_at = created_at - self.updated_at = updated_at - - -@attr.s(auto_attribs=True, init=False) -class GitDiagnosticReport(model.Model): - """ - Attributes: - can: Operations the current user is able to perform on this object - id: Unique ID of the git diagnostic report. - project_id: Target Looker Project ID. - user_id: ID of the user initiating the diagnosis. - state: Raw lifecycle state. - status: Status derived from state. - created_at: Creation time. - updated_at: Update time. - project_type: Project structure type. - issues: Diagnostic issues associated with this report. - """ - - can: Optional[MutableMapping[str, bool]] = None - id: Optional[str] = None - project_id: Optional[str] = None - user_id: Optional[str] = None - state: Optional[str] = None - status: Optional[str] = None - created_at: Optional[datetime.datetime] = None - updated_at: Optional[datetime.datetime] = None - project_type: Optional[str] = None - issues: Optional[Sequence["GitDiagnosticIssue"]] = None - - def __init__( - self, - *, - can: Optional[MutableMapping[str, bool]] = None, - id: Optional[str] = None, - project_id: Optional[str] = None, - user_id: Optional[str] = None, - state: Optional[str] = None, - status: Optional[str] = None, - created_at: Optional[datetime.datetime] = None, - updated_at: Optional[datetime.datetime] = None, - project_type: Optional[str] = None, - issues: Optional[Sequence["GitDiagnosticIssue"]] = None - ): - self.can = can - self.id = id - self.project_id = project_id - self.user_id = user_id - self.state = state - self.status = status - self.created_at = created_at - self.updated_at = updated_at - self.project_type = project_type - self.issues = issues - - @attr.s(auto_attribs=True, init=False) class GitStatus(model.Model): """ @@ -7879,6 +7638,8 @@ class GoldenQuery(model.Model): sorts: Sorts of the associated Looker Query limit: Limit of the associated Looker Query client_id: Client ID of the associated Looker Query + pivots: Pivots of the associated Looker Query + dynamic_fields: Dynamic fields of the associated Looker Query """ can: Optional[MutableMapping[str, bool]] = None @@ -7898,6 +7659,8 @@ class GoldenQuery(model.Model): sorts: Optional[Sequence[str]] = None limit: Optional[str] = None client_id: Optional[str] = None + pivots: Optional[Sequence[str]] = None + dynamic_fields: Optional[str] = None def __init__( self, @@ -7918,7 +7681,9 @@ def __init__( filters: Optional[MutableMapping[str, Any]] = None, sorts: Optional[Sequence[str]] = None, limit: Optional[str] = None, - client_id: Optional[str] = None + client_id: Optional[str] = None, + pivots: Optional[Sequence[str]] = None, + dynamic_fields: Optional[str] = None ): self.can = can self.id = id @@ -7937,6 +7702,8 @@ def __init__( self.sorts = sorts self.limit = limit self.client_id = client_id + self.pivots = pivots + self.dynamic_fields = dynamic_fields @attr.s(auto_attribs=True, init=False) @@ -8318,6 +8085,51 @@ def __init__( self.visible_item_order = visible_item_order +@attr.s(auto_attribs=True, init=False) +class Image(model.Model): + """ + Attributes: + can: Operations the current user is able to perform on this object + id: Unique Id + file_name: Original file name + format: Image format (e.g. PNG, JPG) + label: Accessibility label + url: URL of the image + created_at: Creation timestamp + updated_at: Update timestamp + """ + + can: Optional[MutableMapping[str, bool]] = None + id: Optional[str] = None + file_name: Optional[str] = None + format: Optional[str] = None + label: Optional[str] = None + url: Optional[str] = None + created_at: Optional[datetime.datetime] = None + updated_at: Optional[datetime.datetime] = None + + def __init__( + self, + *, + can: Optional[MutableMapping[str, bool]] = None, + id: Optional[str] = None, + file_name: Optional[str] = None, + format: Optional[str] = None, + label: Optional[str] = None, + url: Optional[str] = None, + created_at: Optional[datetime.datetime] = None, + updated_at: Optional[datetime.datetime] = None + ): + self.can = can + self.id = id + self.file_name = file_name + self.format = format + self.label = label + self.url = url + self.created_at = created_at + self.updated_at = updated_at + + @attr.s(auto_attribs=True, init=False) class ImportedProject(model.Model): """ @@ -10839,121 +10651,6 @@ def __init__( self.success = success -@attr.s(auto_attribs=True, init=False) -class LookMLValidatorError(model.Model): - """ - Attributes: - type: A URI reference that identifies the problem type - title: Overview of the error - detail: Detail of the error - status: The HTTP status code for the problem - instance: URI reference that identifies the specific occurrence of the problem - model: LookML model that contains the error - explore: LookML Explore that contains the error - field_name: LookML field that caused the error - message: Message returned by the LookML validator - severity: Severity of the error (warning, error, fatal, info, success) - line_number: Line number of the error in the LookML file - lookml_url: URL to the LookML that caused the error - file_path: IDE folder path to the LookML file that caused the error - """ - - type: Optional[str] = None - title: Optional[str] = None - detail: Optional[str] = None - status: Optional[str] = None - instance: Optional[str] = None - model: Optional[str] = None - explore: Optional[str] = None - field_name: Optional[str] = None - message: Optional[str] = None - severity: Optional[str] = None - line_number: Optional[str] = None - lookml_url: Optional[str] = None - file_path: Optional[str] = None - - def __init__( - self, - *, - type: Optional[str] = None, - title: Optional[str] = None, - detail: Optional[str] = None, - status: Optional[str] = None, - instance: Optional[str] = None, - model: Optional[str] = None, - explore: Optional[str] = None, - field_name: Optional[str] = None, - message: Optional[str] = None, - severity: Optional[str] = None, - line_number: Optional[str] = None, - lookml_url: Optional[str] = None, - file_path: Optional[str] = None - ): - self.type = type - self.title = title - self.detail = detail - self.status = status - self.instance = instance - self.model = model - self.explore = explore - self.field_name = field_name - self.message = message - self.severity = severity - self.line_number = line_number - self.lookml_url = lookml_url - self.file_path = file_path - - -@attr.s(auto_attribs=True, init=False) -class LookMLValidatorErrorItem(model.Model): - """ - Attributes: - lookml_error: - generic_error: - """ - - lookml_error: Optional["LookMLValidatorError"] = None - generic_error: Optional["GenericError"] = None - - def __init__( - self, - *, - lookml_error: Optional["LookMLValidatorError"] = None, - generic_error: Optional["GenericError"] = None - ): - self.lookml_error = lookml_error - self.generic_error = generic_error - - -@attr.s(auto_attribs=True, init=False) -class LookMLValidatorResult(model.Model): - """ - Attributes: - name: Name of the validator (lookml) - status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - error_count: Total number of failed LookML validations - errors: Details of the LookML that failed validation - """ - - name: Optional[str] = None - status: Optional[str] = None - error_count: Optional[int] = None - errors: Optional[Sequence["LookMLValidatorErrorItem"]] = None - - def __init__( - self, - *, - name: Optional[str] = None, - status: Optional[str] = None, - error_count: Optional[int] = None, - errors: Optional[Sequence["LookMLValidatorErrorItem"]] = None - ): - self.name = name - self.status = status - self.error_count = error_count - self.errors = errors - - @attr.s(auto_attribs=True, init=False) class LookModel(model.Model): """ @@ -11374,6 +11071,7 @@ class McpTools(model.Model): get_dashboards: get_dimensions: get_explores: + get_field_value_suggestions: get_filters: get_looks: get_measures: @@ -11400,6 +11098,8 @@ class McpTools(model.Model): get_lookml_tests: run_lookml_tests: create_view_from_table: + render_visualization: + render_dashboard: """ enable_all: Optional[bool] = None @@ -11417,6 +11117,7 @@ class McpTools(model.Model): get_dashboards: Optional["McpToolSetting"] = None get_dimensions: Optional["McpToolSetting"] = None get_explores: Optional["McpToolSetting"] = None + get_field_value_suggestions: Optional["McpToolSetting"] = None get_filters: Optional["McpToolSetting"] = None get_looks: Optional["McpToolSetting"] = None get_measures: Optional["McpToolSetting"] = None @@ -11443,6 +11144,8 @@ class McpTools(model.Model): get_lookml_tests: Optional["McpToolSetting"] = None run_lookml_tests: Optional["McpToolSetting"] = None create_view_from_table: Optional["McpToolSetting"] = None + render_visualization: Optional["McpToolSetting"] = None + render_dashboard: Optional["McpToolSetting"] = None def __init__( self, @@ -11462,6 +11165,7 @@ def __init__( get_dashboards: Optional["McpToolSetting"] = None, get_dimensions: Optional["McpToolSetting"] = None, get_explores: Optional["McpToolSetting"] = None, + get_field_value_suggestions: Optional["McpToolSetting"] = None, get_filters: Optional["McpToolSetting"] = None, get_looks: Optional["McpToolSetting"] = None, get_measures: Optional["McpToolSetting"] = None, @@ -11487,7 +11191,9 @@ 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 + create_view_from_table: Optional["McpToolSetting"] = None, + render_visualization: Optional["McpToolSetting"] = None, + render_dashboard: Optional["McpToolSetting"] = None ): self.enable_all = enable_all self.add_dashboard_element = add_dashboard_element @@ -11504,6 +11210,7 @@ def __init__( self.get_dashboards = get_dashboards self.get_dimensions = get_dimensions self.get_explores = get_explores + self.get_field_value_suggestions = get_field_value_suggestions self.get_filters = get_filters self.get_looks = get_looks self.get_measures = get_measures @@ -11530,6 +11237,8 @@ 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.render_visualization = render_visualization + self.render_dashboard = render_dashboard @attr.s(auto_attribs=True, init=False) @@ -11956,7 +11665,8 @@ class OauthClientApp(model.Model): Attributes: can: Operations the current user is able to perform on this object client_guid: The globally unique id of this application - redirect_uri: The uri with which this application will receive an auth code by browser redirect. + redirect_uri: (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) + redirect_uris: The authorized uris for which this application will receive an auth code by browser redirect. display_name: The application's display name description: A description of the application that will be displayed to users enabled: When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. @@ -11968,6 +11678,7 @@ class OauthClientApp(model.Model): can: Optional[MutableMapping[str, bool]] = None client_guid: Optional[str] = None redirect_uri: Optional[str] = None + redirect_uris: Optional[Sequence[str]] = None display_name: Optional[str] = None description: Optional[str] = None enabled: Optional[bool] = None @@ -11981,6 +11692,7 @@ def __init__( can: Optional[MutableMapping[str, bool]] = None, client_guid: Optional[str] = None, redirect_uri: Optional[str] = None, + redirect_uris: Optional[Sequence[str]] = None, display_name: Optional[str] = None, description: Optional[str] = None, enabled: Optional[bool] = None, @@ -11991,6 +11703,7 @@ def __init__( self.can = can self.client_guid = client_guid self.redirect_uri = redirect_uri + self.redirect_uris = redirect_uris self.display_name = display_name self.description = description self.enabled = enabled @@ -12613,6 +12326,231 @@ def __init__( self.dependency_status = dependency_status +@attr.s(auto_attribs=True, init=False) +class ProjectCISuite(model.Model): + """ + Attributes: + can: Operations the current user is able to perform on this object + id: ID of the CI suite + name: Name of the CI suite + project_id: ID of the LookML project + created_at: Time and date that the CI suite was created + updated_at: Time and date that the CI suite was updated + schedule_trigger_is_enabled: Whether the CI suite schedule trigger is active + schedule_trigger_crontab: Crontab that the CI suite is scheduled to run + schedule_trigger_timezone: Timezone for the CI suite schedule + alerting_enabled: Whether alerting is enabled for the CI suite + alert_email_addresses: Email addresses to send alerts to + alert_on_failed_status: Whether to alert on failed status + alert_on_error_status: Whether to alert on error status + alert_on_passed_status: Whether to alert on passed status + alert_on_cancelled_status: Whether to alert on cancelled status + change_request_trigger_is_enabled: Whether the CI suite change request trigger is active + change_request_trigger_hook_id: ID of the hook that triggers the CI Suite to run + change_request_trigger_target_branch: Git branch that should be compared against when the CI suite is run, used when the run is incremental + guid: GUID of the CI suite + dbt_cloud_trigger_is_enabled: Whether the CI suite dbt Cloud trigger is active + dbt_cloud_trigger_job_id: Job ID of the dbt Cloud job + dbt_cloud_trigger_user_attribute_id: User Attribute ID used for schema substitution + dbt_cloud_webhook_id: Webhook ID registered in dbt Cloud + webhook_secret: (Write-Only) Webhook secret used to authenticate incoming webhook requests + has_webhook_secret: Whether the CI suite has a webhook secret configured + assert_validator_config_is_enabled: Whether assert validation is enabled for the CI suite + assert_validator_config_concurrency: Number of tests that should run concurrently during assert validation + assert_validator_config_selectors: Explores that assert validation should run for (model_name/explore_name) + assert_validator_config_exclusions: Explores that should be excluded from assert validation (model_name/explore_name) + content_validator_config_is_enabled: Whether content validation is enabled for the CI suite + content_validator_config_exclude_personal: Whether content validation should ignore personal folders + content_validator_config_incremental: Whether content should validate incrementally + content_validator_config_exclude_folders: Folders whose content should not be validated + content_validator_config_include_folders: Folders whose content should be validated + content_validator_config_selectors: Explores whose content should be validated (model_name/explore_name) + content_validator_config_exclusions: Explores that should be excluded from content validation (model_name/explore_name) + lookml_validator_config_is_enabled: Whether LookML validation is enabled for the CI suite + lookml_validator_config_severity: Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + lookml_validator_config_timeout: Amount of time after which LookML Validation should stop running + style_validator_config_is_enabled: Whether LookML Style Validator is enabled for the CI suite + style_validator_config_incremental: Whether LookML Style Validator should run incrementally on changed LookML files only + sql_validator_config_is_enabled: Whether SQL validation is enabled for the CI suite + sql_validator_config_fail_fast: Whether SQL validation should stop after the first failure + sql_validator_config_incremental: Whether SQL should validate incrementally + sql_validator_config_ignore_hidden: Whether SQL validation should ignore hidden fields + sql_validator_config_query_concurrency: Number of queries that should run concurrently during SQL validation + sql_validator_config_chunk_size: The max number of rows that should be returned for each query + sql_validator_config_selectors: Explores whose sql should be validated (model_name/explore_name) + sql_validator_config_exclusions: Explores that should be excluded from SQL validation (model_name/explore_name) + upstream_trigger_is_enabled: Whether the CI suite upstream project imports trigger is active + upstream_projects: Names of upstream projects subscribed for pull request triggers + """ + + can: Optional[MutableMapping[str, bool]] = None + id: Optional[str] = None + name: Optional[str] = None + project_id: Optional[str] = None + created_at: Optional[datetime.datetime] = None + updated_at: Optional[datetime.datetime] = None + schedule_trigger_is_enabled: Optional[bool] = None + schedule_trigger_crontab: Optional[str] = None + schedule_trigger_timezone: Optional[str] = None + alerting_enabled: Optional[bool] = None + alert_email_addresses: Optional[Sequence[str]] = None + alert_on_failed_status: Optional[bool] = None + alert_on_error_status: Optional[bool] = None + alert_on_passed_status: Optional[bool] = None + alert_on_cancelled_status: Optional[bool] = None + change_request_trigger_is_enabled: Optional[bool] = None + change_request_trigger_hook_id: Optional[str] = None + change_request_trigger_target_branch: Optional[str] = None + guid: Optional[str] = None + dbt_cloud_trigger_is_enabled: Optional[bool] = None + dbt_cloud_trigger_job_id: Optional[int] = None + dbt_cloud_trigger_user_attribute_id: Optional[str] = None + dbt_cloud_webhook_id: Optional[str] = None + webhook_secret: Optional[str] = None + has_webhook_secret: Optional[bool] = None + assert_validator_config_is_enabled: Optional[bool] = None + assert_validator_config_concurrency: Optional[int] = None + assert_validator_config_selectors: Optional[Sequence[str]] = None + assert_validator_config_exclusions: Optional[Sequence[str]] = None + content_validator_config_is_enabled: Optional[bool] = None + content_validator_config_exclude_personal: Optional[bool] = None + content_validator_config_incremental: Optional[bool] = None + content_validator_config_exclude_folders: Optional[Sequence[str]] = None + content_validator_config_include_folders: Optional[Sequence[str]] = None + content_validator_config_selectors: Optional[Sequence[str]] = None + content_validator_config_exclusions: Optional[Sequence[str]] = None + lookml_validator_config_is_enabled: Optional[bool] = None + lookml_validator_config_severity: Optional[str] = None + lookml_validator_config_timeout: Optional[int] = None + style_validator_config_is_enabled: Optional[bool] = None + style_validator_config_incremental: Optional[bool] = None + sql_validator_config_is_enabled: Optional[bool] = None + sql_validator_config_fail_fast: Optional[bool] = None + sql_validator_config_incremental: Optional[bool] = None + sql_validator_config_ignore_hidden: Optional[bool] = None + sql_validator_config_query_concurrency: Optional[int] = None + sql_validator_config_chunk_size: Optional[int] = None + sql_validator_config_selectors: Optional[Sequence[str]] = None + sql_validator_config_exclusions: Optional[Sequence[str]] = None + upstream_trigger_is_enabled: Optional[bool] = None + upstream_projects: Optional[Sequence[str]] = None + + def __init__( + self, + *, + can: Optional[MutableMapping[str, bool]] = None, + id: Optional[str] = None, + name: Optional[str] = None, + project_id: Optional[str] = None, + created_at: Optional[datetime.datetime] = None, + updated_at: Optional[datetime.datetime] = None, + schedule_trigger_is_enabled: Optional[bool] = None, + schedule_trigger_crontab: Optional[str] = None, + schedule_trigger_timezone: Optional[str] = None, + alerting_enabled: Optional[bool] = None, + alert_email_addresses: Optional[Sequence[str]] = None, + alert_on_failed_status: Optional[bool] = None, + alert_on_error_status: Optional[bool] = None, + alert_on_passed_status: Optional[bool] = None, + alert_on_cancelled_status: Optional[bool] = None, + change_request_trigger_is_enabled: Optional[bool] = None, + change_request_trigger_hook_id: Optional[str] = None, + change_request_trigger_target_branch: Optional[str] = None, + guid: Optional[str] = None, + dbt_cloud_trigger_is_enabled: Optional[bool] = None, + dbt_cloud_trigger_job_id: Optional[int] = None, + dbt_cloud_trigger_user_attribute_id: Optional[str] = None, + dbt_cloud_webhook_id: Optional[str] = None, + webhook_secret: Optional[str] = None, + has_webhook_secret: Optional[bool] = None, + assert_validator_config_is_enabled: Optional[bool] = None, + assert_validator_config_concurrency: Optional[int] = None, + assert_validator_config_selectors: Optional[Sequence[str]] = None, + assert_validator_config_exclusions: Optional[Sequence[str]] = None, + content_validator_config_is_enabled: Optional[bool] = None, + content_validator_config_exclude_personal: Optional[bool] = None, + content_validator_config_incremental: Optional[bool] = None, + content_validator_config_exclude_folders: Optional[Sequence[str]] = None, + content_validator_config_include_folders: Optional[Sequence[str]] = None, + content_validator_config_selectors: Optional[Sequence[str]] = None, + content_validator_config_exclusions: Optional[Sequence[str]] = None, + lookml_validator_config_is_enabled: Optional[bool] = None, + lookml_validator_config_severity: Optional[str] = None, + lookml_validator_config_timeout: Optional[int] = None, + style_validator_config_is_enabled: Optional[bool] = None, + style_validator_config_incremental: Optional[bool] = None, + sql_validator_config_is_enabled: Optional[bool] = None, + sql_validator_config_fail_fast: Optional[bool] = None, + sql_validator_config_incremental: Optional[bool] = None, + sql_validator_config_ignore_hidden: Optional[bool] = None, + sql_validator_config_query_concurrency: Optional[int] = None, + sql_validator_config_chunk_size: Optional[int] = None, + sql_validator_config_selectors: Optional[Sequence[str]] = None, + sql_validator_config_exclusions: Optional[Sequence[str]] = None, + upstream_trigger_is_enabled: Optional[bool] = None, + upstream_projects: Optional[Sequence[str]] = None + ): + self.can = can + self.id = id + self.name = name + self.project_id = project_id + self.created_at = created_at + self.updated_at = updated_at + self.schedule_trigger_is_enabled = schedule_trigger_is_enabled + self.schedule_trigger_crontab = schedule_trigger_crontab + self.schedule_trigger_timezone = schedule_trigger_timezone + self.alerting_enabled = alerting_enabled + self.alert_email_addresses = alert_email_addresses + self.alert_on_failed_status = alert_on_failed_status + self.alert_on_error_status = alert_on_error_status + self.alert_on_passed_status = alert_on_passed_status + self.alert_on_cancelled_status = alert_on_cancelled_status + self.change_request_trigger_is_enabled = change_request_trigger_is_enabled + self.change_request_trigger_hook_id = change_request_trigger_hook_id + self.change_request_trigger_target_branch = change_request_trigger_target_branch + self.guid = guid + self.dbt_cloud_trigger_is_enabled = dbt_cloud_trigger_is_enabled + self.dbt_cloud_trigger_job_id = dbt_cloud_trigger_job_id + self.dbt_cloud_trigger_user_attribute_id = dbt_cloud_trigger_user_attribute_id + self.dbt_cloud_webhook_id = dbt_cloud_webhook_id + self.webhook_secret = webhook_secret + self.has_webhook_secret = has_webhook_secret + self.assert_validator_config_is_enabled = assert_validator_config_is_enabled + self.assert_validator_config_concurrency = assert_validator_config_concurrency + self.assert_validator_config_selectors = assert_validator_config_selectors + self.assert_validator_config_exclusions = assert_validator_config_exclusions + self.content_validator_config_is_enabled = content_validator_config_is_enabled + self.content_validator_config_exclude_personal = ( + content_validator_config_exclude_personal + ) + self.content_validator_config_incremental = content_validator_config_incremental + self.content_validator_config_exclude_folders = ( + content_validator_config_exclude_folders + ) + self.content_validator_config_include_folders = ( + content_validator_config_include_folders + ) + self.content_validator_config_selectors = content_validator_config_selectors + self.content_validator_config_exclusions = content_validator_config_exclusions + self.lookml_validator_config_is_enabled = lookml_validator_config_is_enabled + self.lookml_validator_config_severity = lookml_validator_config_severity + self.lookml_validator_config_timeout = lookml_validator_config_timeout + self.style_validator_config_is_enabled = style_validator_config_is_enabled + self.style_validator_config_incremental = style_validator_config_incremental + self.sql_validator_config_is_enabled = sql_validator_config_is_enabled + self.sql_validator_config_fail_fast = sql_validator_config_fail_fast + self.sql_validator_config_incremental = sql_validator_config_incremental + self.sql_validator_config_ignore_hidden = sql_validator_config_ignore_hidden + self.sql_validator_config_query_concurrency = ( + sql_validator_config_query_concurrency + ) + self.sql_validator_config_chunk_size = sql_validator_config_chunk_size + self.sql_validator_config_selectors = sql_validator_config_selectors + self.sql_validator_config_exclusions = sql_validator_config_exclusions + self.upstream_trigger_is_enabled = upstream_trigger_is_enabled + self.upstream_projects = upstream_projects + + @attr.s(auto_attribs=True, init=False) class ProjectError(model.Model): """ @@ -12723,19 +12661,6 @@ def __init__( self.git_status = git_status -@attr.s(auto_attribs=True, init=False) -class ProjectRun(model.Model): - """ - Attributes: - run: - """ - - run: Optional["Run"] = None - - def __init__(self, *, run: Optional["Run"] = None): - self.run = run - - @attr.s(auto_attribs=True, init=False) class ProjectValidation(model.Model): """ @@ -13532,83 +13457,6 @@ def __init__( self.users_url = users_url -@attr.s(auto_attribs=True, init=False) -class Run(model.Model): - """ - Attributes: - run_id: ID of the CI run - created_at: Time and date that the CI run was initiated - started_at: Time and date that the CI run began executing - finished_at: Time and date that the CI run completed - status_url: Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite - status: Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) - git_service: Git service for CI run (e.g. GitHub) - git_state: - result: - schedule: - target_branch: Git branch that the CI run compares against during validation, used for incremental runs - title: Name of the CI suite - trigger: Trigger for CI run (unknown, manual, schedule, change_request) - change_request: - suite_id: ID of the CI suite - username: Username of the user who triggered the CI run, if the CI run was manually triggered - """ - - run_id: Optional[str] = None - created_at: Optional[datetime.datetime] = None - started_at: Optional[datetime.datetime] = None - finished_at: Optional[datetime.datetime] = None - status_url: Optional[str] = None - status: Optional[str] = None - git_service: Optional[str] = None - git_state: Optional["CIGitState"] = None - result: Optional["RunResult"] = None - schedule: Optional["CIScheduleTrigger"] = None - target_branch: Optional[str] = None - title: Optional[str] = None - trigger: Optional[str] = None - change_request: Optional["CIChangeRequest"] = None - suite_id: Optional[str] = None - username: Optional[str] = None - - def __init__( - self, - *, - run_id: Optional[str] = None, - created_at: Optional[datetime.datetime] = None, - started_at: Optional[datetime.datetime] = None, - finished_at: Optional[datetime.datetime] = None, - status_url: Optional[str] = None, - status: Optional[str] = None, - git_service: Optional[str] = None, - git_state: Optional["CIGitState"] = None, - result: Optional["RunResult"] = None, - schedule: Optional["CIScheduleTrigger"] = None, - target_branch: Optional[str] = None, - title: Optional[str] = None, - trigger: Optional[str] = None, - change_request: Optional["CIChangeRequest"] = None, - suite_id: Optional[str] = None, - username: Optional[str] = None - ): - self.run_id = run_id - self.created_at = created_at - self.started_at = started_at - self.finished_at = finished_at - self.status_url = status_url - self.status = status - self.git_service = git_service - self.git_state = git_state - self.result = result - self.schedule = schedule - self.target_branch = target_branch - self.title = title - self.trigger = trigger - self.change_request = change_request - self.suite_id = suite_id - self.username = username - - @attr.s(auto_attribs=True, init=False) class RunningQueries(model.Model): """ @@ -13705,58 +13553,9 @@ def __init__( self.connection_id = connection_id self.message = message self.status = status - self.runtime = runtime - self.sql = sql - self.sql_interface_sql = sql_interface_sql - - -@attr.s(auto_attribs=True, init=False) -class RunResult(model.Model): - """ - Attributes: - sql_result: - sql_error: - assert_result: - assert_error: - content_result: - content_error: - lookml_result: - lookml_error: - generic_error: - """ - - sql_result: Optional["SqlValidatorResult"] = None - sql_error: Optional["GenericError"] = None - assert_result: Optional["AssertValidatorResult"] = None - assert_error: Optional["GenericError"] = None - content_result: Optional["ContentValidatorResult"] = None - content_error: Optional["GenericError"] = None - lookml_result: Optional["LookMLValidatorResult"] = None - lookml_error: Optional["GenericError"] = None - generic_error: Optional["GenericError"] = None - - def __init__( - self, - *, - sql_result: Optional["SqlValidatorResult"] = None, - sql_error: Optional["GenericError"] = None, - assert_result: Optional["AssertValidatorResult"] = None, - assert_error: Optional["GenericError"] = None, - content_result: Optional["ContentValidatorResult"] = None, - content_error: Optional["GenericError"] = None, - lookml_result: Optional["LookMLValidatorResult"] = None, - lookml_error: Optional["GenericError"] = None, - generic_error: Optional["GenericError"] = None - ): - self.sql_result = sql_result - self.sql_error = sql_error - self.assert_result = assert_result - self.assert_error = assert_error - self.content_result = content_result - self.content_error = content_error - self.lookml_result = lookml_result - self.lookml_error = lookml_error - self.generic_error = generic_error + self.runtime = runtime + self.sql = sql + self.sql_interface_sql = sql_interface_sql @attr.s(auto_attribs=True, init=False) @@ -14124,6 +13923,7 @@ class ScheduledPlan(model.Model): color_theme: Color scheme of the dashboard if applicable long_tables: Whether or not to expand table vis to full length pdf_page_breaks: Whether or not to add page breaks between tabs + include_filters: Whether or not to include filters context tab_ids: IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) inline_table_width: The pixel width at which we render the inline table visualizations query_id: Query id @@ -14131,9 +13931,11 @@ class ScheduledPlan(model.Model): created_at: Date and time when ScheduledPlan was created updated_at: Date and time when ScheduledPlan was last updated title: Title + content_title: Title of the underlying content (Dashboard, Look, LookML Dashboard, or Explore) associated with this ScheduledPlan user: next_run_at: When the ScheduledPlan will next run (null if running once) last_run_at: When the ScheduledPlan was last run + last_run_status: Status of the last run for this ScheduledPlan can: Operations the current user is able to perform on this object """ @@ -14167,6 +13969,7 @@ class ScheduledPlan(model.Model): color_theme: Optional[str] = None long_tables: Optional[bool] = None pdf_page_breaks: Optional[bool] = None + include_filters: Optional[bool] = None tab_ids: Optional[Sequence[str]] = None inline_table_width: Optional[int] = None query_id: Optional[str] = None @@ -14174,9 +13977,11 @@ class ScheduledPlan(model.Model): created_at: Optional[datetime.datetime] = None updated_at: Optional[datetime.datetime] = None title: Optional[str] = None + content_title: Optional[str] = None user: Optional["UserPublic"] = None next_run_at: Optional[datetime.datetime] = None last_run_at: Optional[datetime.datetime] = None + last_run_status: Optional[str] = None can: Optional[MutableMapping[str, bool]] = None def __init__( @@ -14214,6 +14019,7 @@ def __init__( color_theme: Optional[str] = None, long_tables: Optional[bool] = None, pdf_page_breaks: Optional[bool] = None, + include_filters: Optional[bool] = None, tab_ids: Optional[Sequence[str]] = None, inline_table_width: Optional[int] = None, query_id: Optional[str] = None, @@ -14221,9 +14027,11 @@ def __init__( created_at: Optional[datetime.datetime] = None, updated_at: Optional[datetime.datetime] = None, title: Optional[str] = None, + content_title: Optional[str] = None, user: Optional["UserPublic"] = None, next_run_at: Optional[datetime.datetime] = None, last_run_at: Optional[datetime.datetime] = None, + last_run_status: Optional[str] = None, can: Optional[MutableMapping[str, bool]] = None ): self.name = name @@ -14256,6 +14064,7 @@ def __init__( self.color_theme = color_theme self.long_tables = long_tables self.pdf_page_breaks = pdf_page_breaks + self.include_filters = include_filters self.tab_ids = tab_ids self.inline_table_width = inline_table_width self.query_id = query_id @@ -14263,9 +14072,11 @@ def __init__( self.created_at = created_at self.updated_at = updated_at self.title = title + self.content_title = content_title self.user = user self.next_run_at = next_run_at self.last_run_at = last_run_at + self.last_run_status = last_run_status self.can = can @@ -14283,6 +14094,7 @@ class ScheduledPlanDestination(model.Model): type: Type of the address ('email', 'webhook', 's3', or 'sftp') parameters: JSON object containing parameters for external scheduling. For Amazon S3, this requires keys and values for access_key_id and region. For SFTP, this requires a key and value for username. secret_parameters: (Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password. + include_filters: Whether or not to include filters context message: Optional message to be included in scheduled emails """ @@ -14296,6 +14108,7 @@ class ScheduledPlanDestination(model.Model): type: Optional[str] = None parameters: Optional[str] = None secret_parameters: Optional[str] = None + include_filters: Optional[bool] = None message: Optional[str] = None def __init__( @@ -14311,6 +14124,7 @@ def __init__( type: Optional[str] = None, parameters: Optional[str] = None, secret_parameters: Optional[str] = None, + include_filters: Optional[bool] = None, message: Optional[str] = None ): self.id = id @@ -14323,6 +14137,7 @@ def __init__( self.type = type self.parameters = parameters self.secret_parameters = secret_parameters + self.include_filters = include_filters self.message = message @@ -14764,6 +14579,7 @@ class Setting(model.Model): override_warnings: (Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings. 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_vis_modernization_default: Default net new visualizations in embedded context to Modern theme embed_enabled: True if embedding is enabled https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise embed_config: login_notification_enabled: Login notification enabled @@ -14798,6 +14614,7 @@ class Setting(model.Model): override_warnings: Optional[bool] = None email_domain_allowlist: Optional[Sequence[str]] = None embed_cookieless_v2: Optional[bool] = None + embed_vis_modernization_default: Optional[bool] = None embed_enabled: Optional[bool] = None embed_config: Optional["EmbedConfig"] = None login_notification_enabled: Optional[bool] = None @@ -14834,6 +14651,7 @@ def __init__( override_warnings: Optional[bool] = None, email_domain_allowlist: Optional[Sequence[str]] = None, embed_cookieless_v2: Optional[bool] = None, + embed_vis_modernization_default: Optional[bool] = None, embed_enabled: Optional[bool] = None, embed_config: Optional["EmbedConfig"] = None, login_notification_enabled: Optional[bool] = None, @@ -14867,6 +14685,7 @@ def __init__( self.override_warnings = override_warnings self.email_domain_allowlist = email_domain_allowlist self.embed_cookieless_v2 = embed_cookieless_v2 + self.embed_vis_modernization_default = embed_vis_modernization_default self.embed_enabled = embed_enabled self.embed_config = embed_config self.login_notification_enabled = login_notification_enabled @@ -15208,154 +15027,6 @@ def __init__( self.vis_config = vis_config -@attr.s(auto_attribs=True, init=False) -class SqlValidatorError(model.Model): - """ - Attributes: - type: A URI reference that identifies the problem type - title: Overview of the error - detail: Detail of the error - status: The HTTP status code for the problem - instance: URI reference that identifies the specific occurrence of the problem - model: LookML model that contains the Explore that failed SQL validation - explore: LookML Explore that failed SQL validation - message: Message returned by the SQL validation - explore_url: URL to the Explore - lookml_url: URL to the LookML that caused the error - dimension: LookML dimension that caused the error - line_number: Line of the error in the LookML file - """ - - type: Optional[str] = None - title: Optional[str] = None - detail: Optional[str] = None - status: Optional[str] = None - instance: Optional[str] = None - model: Optional[str] = None - explore: Optional[str] = None - message: Optional[str] = None - explore_url: Optional[str] = None - lookml_url: Optional[str] = None - dimension: Optional[str] = None - line_number: Optional[str] = None - - def __init__( - self, - *, - type: Optional[str] = None, - title: Optional[str] = None, - detail: Optional[str] = None, - status: Optional[str] = None, - instance: Optional[str] = None, - model: Optional[str] = None, - explore: Optional[str] = None, - message: Optional[str] = None, - explore_url: Optional[str] = None, - lookml_url: Optional[str] = None, - dimension: Optional[str] = None, - line_number: Optional[str] = None - ): - self.type = type - self.title = title - self.detail = detail - self.status = status - self.instance = instance - self.model = model - self.explore = explore - self.message = message - self.explore_url = explore_url - self.lookml_url = lookml_url - self.dimension = dimension - self.line_number = line_number - - -@attr.s(auto_attribs=True, init=False) -class SqlValidatorErrorItem(model.Model): - """ - Attributes: - sql_error: - generic_error: - """ - - sql_error: Optional["SqlValidatorError"] = None - generic_error: Optional["GenericError"] = None - - def __init__( - self, - *, - sql_error: Optional["SqlValidatorError"] = None, - generic_error: Optional["GenericError"] = None - ): - self.sql_error = sql_error - self.generic_error = generic_error - - -@attr.s(auto_attribs=True, init=False) -class SqlValidatorResult(model.Model): - """ - Attributes: - name: Name of the validator (sql) - incremental: Whether the validation was incremental - status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - result: The results of tested Explores - """ - - name: Optional[str] = None - incremental: Optional[bool] = None - status: Optional[str] = None - result: Optional[Sequence["SqlValidatorTestedExplore"]] = None - - def __init__( - self, - *, - name: Optional[str] = None, - incremental: Optional[bool] = None, - status: Optional[str] = None, - result: Optional[Sequence["SqlValidatorTestedExplore"]] = None - ): - self.name = name - self.incremental = incremental - self.status = status - self.result = result - - -@attr.s(auto_attribs=True, init=False) -class SqlValidatorTestedExplore(model.Model): - """ - Attributes: - model: LookML model that was tested - explore: LookML Explore that was tested - status: Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - skip_reason: Reason the validation was skipped - error_count: Total number of failed validations - errors: Details of the LookML that failed SQL validation - """ - - model: Optional[str] = None - explore: Optional[str] = None - status: Optional[str] = None - skip_reason: Optional[str] = None - error_count: Optional[int] = None - errors: Optional[Sequence["SqlValidatorErrorItem"]] = None - - def __init__( - self, - *, - model: Optional[str] = None, - explore: Optional[str] = None, - status: Optional[str] = None, - skip_reason: Optional[str] = None, - error_count: Optional[int] = None, - errors: Optional[Sequence["SqlValidatorErrorItem"]] = None - ): - self.model = model - self.explore = explore - self.status = status - self.skip_reason = skip_reason - self.error_count = error_count - self.errors = errors - - @attr.s(auto_attribs=True, init=False) class SshPublicKey(model.Model): """ @@ -15770,6 +15441,9 @@ class ThemeSettings(model.Model): """ Attributes: background_color: Default background color + background_image_url: URL for background image + background_image_id: Optional. ID of theme background image. + background_opacity: Background image opacity (0.0 to 1.0). base_font_size: Base font size for scaling fonts (only supported by legacy dashboards) color_collection_id: Optional. ID of color collection to use with the theme. Use an empty string for none. font_color: Default font color @@ -15817,6 +15491,9 @@ class ThemeSettings(model.Model): """ background_color: Optional[str] = None + background_image_url: Optional[str] = None + background_image_id: Optional[str] = None + background_opacity: Optional[float] = None base_font_size: Optional[str] = None color_collection_id: Optional[str] = None font_color: Optional[str] = None @@ -15866,6 +15543,9 @@ def __init__( self, *, background_color: Optional[str] = None, + background_image_url: Optional[str] = None, + background_image_id: Optional[str] = None, + background_opacity: Optional[float] = None, base_font_size: Optional[str] = None, color_collection_id: Optional[str] = None, font_color: Optional[str] = None, @@ -15912,6 +15592,9 @@ def __init__( border_radius: Optional[str] = None ): self.background_color = background_color + self.background_image_url = background_image_url + self.background_image_id = background_image_id + self.background_opacity = background_opacity self.base_font_size = base_font_size self.color_collection_id = color_collection_id self.font_color = font_color @@ -16211,7 +15894,7 @@ class UserAttribute(model.Model): Attributes: name: Name of user attribute label: Human-friendly label for user attribute - type: Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + type: Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") can: Operations the current user is able to perform on this object id: Unique Id default_value: Default value for when no value is set on the user @@ -16412,6 +16095,79 @@ def __init__( self.hidden_value_domain_whitelist = hidden_value_domain_whitelist +@attr.s(auto_attribs=True, init=False) +class UserDbConnection(model.Model): + """ + Attributes: + can: Operations the current user is able to perform on this object + id: ID of the connection + name: Name of the connection (must match virtual namespace pattern) + user_id: ID of the user who owns the connection + dialect: Database dialect name + auth_type: Authentication type (oauth, service_account, password) + host: Host name/address of server + port: Port number on server + database: Database name + schema: Schema name + jdbc_additional_params: Additional JDBC parameters + oauth_application_id: OAuth application ID (if auth_type is oauth) + enabled: Whether this connection is enabled + created_at: When the connection was created + updated_at: When the connection was last updated + """ + + can: Optional[MutableMapping[str, bool]] = None + id: Optional[str] = None + name: Optional[str] = None + user_id: Optional[int] = None + dialect: Optional[str] = None + auth_type: Optional[str] = None + host: Optional[str] = None + port: Optional[str] = None + database: Optional[str] = None + schema: Optional[str] = None + jdbc_additional_params: Optional[str] = None + oauth_application_id: Optional[int] = None + enabled: Optional[bool] = None + created_at: Optional[datetime.datetime] = None + updated_at: Optional[datetime.datetime] = None + + def __init__( + self, + *, + can: Optional[MutableMapping[str, bool]] = None, + id: Optional[str] = None, + name: Optional[str] = None, + user_id: Optional[int] = None, + dialect: Optional[str] = None, + auth_type: Optional[str] = None, + host: Optional[str] = None, + port: Optional[str] = None, + database: Optional[str] = None, + schema: Optional[str] = None, + jdbc_additional_params: Optional[str] = None, + oauth_application_id: Optional[int] = None, + enabled: Optional[bool] = None, + created_at: Optional[datetime.datetime] = None, + updated_at: Optional[datetime.datetime] = None + ): + self.can = can + self.id = id + self.name = name + self.user_id = user_id + self.dialect = dialect + self.auth_type = auth_type + self.host = host + self.port = port + self.database = database + self.schema = schema + self.jdbc_additional_params = jdbc_additional_params + self.oauth_application_id = oauth_application_id + self.enabled = enabled + self.created_at = created_at + self.updated_at = updated_at + + @attr.s(auto_attribs=True, init=False) class UserEmailOnly(model.Model): """ @@ -16778,7 +16534,7 @@ def __init__( class WriteAgent(model.Model): """ Dynamic writeable type for Agent removes: - 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 + 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, is_lookml, lookml_agent_id, lookml_edit_uri Attributes: created_by_user_id: User that created the Agent @@ -17286,7 +17042,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_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 + 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, is_lookml, lookml_agent_id, lookml_edit_uri """ name: Optional[str] = None @@ -17544,6 +17300,7 @@ class WriteDashboard(model.Model): tile_text_color: Tile text color title_color: Title color appearance: + layout_granularity: The layout granularity to apply to this dashboard (ie: default or granular) 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: """ @@ -17576,6 +17333,7 @@ class WriteDashboard(model.Model): tile_text_color: Optional[str] = None title_color: Optional[str] = None appearance: Optional["DashboardAppearance"] = None + layout_granularity: Optional[str] = None preserve_desktop_layout: Optional[bool] = None download_settings: Optional["DashboardDownloadSettings"] = None @@ -17610,6 +17368,7 @@ def __init__( tile_text_color: Optional[str] = None, title_color: Optional[str] = None, appearance: Optional["DashboardAppearance"] = None, + layout_granularity: Optional[str] = None, preserve_desktop_layout: Optional[bool] = None, download_settings: Optional["DashboardDownloadSettings"] = None ): @@ -17643,6 +17402,7 @@ def __init__( self.tile_text_color = tile_text_color self.title_color = title_color self.appearance = appearance + self.layout_granularity = layout_granularity self.preserve_desktop_layout = preserve_desktop_layout self.download_settings = download_settings @@ -17677,7 +17437,7 @@ def __init__( class WriteDashboardElement(model.Model): """ Dynamic writeable type for DashboardElement removes: - can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html + can, body_text_as_html, group_id, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html, images Attributes: body_text: Text tile body text @@ -17708,6 +17468,7 @@ class WriteDashboardElement(model.Model): aria_description: Custom ARIA description text certification_metadata: Dynamic writeable type for Certification removes: ui_status, user_name, updated_at + image_id: ID of Dashboard Image """ body_text: Optional[str] = None @@ -17734,6 +17495,7 @@ class WriteDashboardElement(model.Model): extension_id: Optional[str] = None aria_description: Optional[str] = None certification_metadata: Optional["WriteCertification"] = None + image_id: Optional[str] = None def __init__( self, @@ -17763,7 +17525,8 @@ def __init__( rich_content_json: Optional[str] = None, extension_id: Optional[str] = None, aria_description: Optional[str] = None, - certification_metadata: Optional["WriteCertification"] = None + certification_metadata: Optional["WriteCertification"] = None, + image_id: Optional[str] = None ): self.body_text = body_text self.dashboard_id = dashboard_id @@ -17789,6 +17552,7 @@ def __init__( self.extension_id = extension_id self.aria_description = aria_description self.certification_metadata = certification_metadata + self.image_id = image_id @attr.s(auto_attribs=True, init=False) @@ -17925,6 +17689,7 @@ class WriteDashboardLayoutComponent(model.Model): granular_column: Column (granular layout) granular_width: Width (granular layout) granular_height: Height (granular layout) + group_id: Id of parent Dashboard Layout Component group """ dashboard_layout_id: Optional[str] = None @@ -17938,6 +17703,7 @@ class WriteDashboardLayoutComponent(model.Model): granular_column: Optional[int] = None granular_width: Optional[int] = None granular_height: Optional[int] = None + group_id: Optional[str] = None def __init__( self, @@ -17952,7 +17718,8 @@ def __init__( granular_row: Optional[int] = None, granular_column: Optional[int] = None, granular_width: Optional[int] = None, - granular_height: Optional[int] = None + granular_height: Optional[int] = None, + group_id: Optional[str] = None ): self.dashboard_layout_id = dashboard_layout_id self.dashboard_element_id = dashboard_element_id @@ -17965,6 +17732,7 @@ def __init__( self.granular_column = granular_column self.granular_width = granular_width self.granular_height = granular_height + self.group_id = group_id @attr.s(auto_attribs=True, init=False) @@ -18017,13 +17785,16 @@ class WriteDBConnection(model.Model): Attributes: name: Name of the connection. Also used as the unique identifier + project_id: ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. named_driver_version_requested: Requested JDBC driver version name host: Host name/address of server; or the string 'localhost' in case of a connection over an SSH tunnel. port: Port number on server. If the connection is over an SSH tunnel, then the local port associated with the SSH tunnel. username: Username for server authentication password: (Write-Only) Password for server authentication + service_account_auth_enabled: Whether Service Account OAuth authentication is enabled for this connection uses_key_pair_auth: Whether the connection uses key-pair for authentication. certificate: (Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect). + user_attr_certificate: The name of the user attribute containing the connection certificate. file_type: (Write-Only) Certificate keyfile type - .json, .p8 or .p12 database: Database name db_timezone: Time zone of database @@ -18067,13 +17838,16 @@ class WriteDBConnection(model.Model): """ name: Optional[str] = None + project_id: Optional[str] = None named_driver_version_requested: Optional[str] = None host: Optional[str] = None port: Optional[str] = None username: Optional[str] = None password: Optional[str] = None + service_account_auth_enabled: Optional[bool] = None uses_key_pair_auth: Optional[bool] = None certificate: Optional[str] = None + user_attr_certificate: Optional[str] = None file_type: Optional[str] = None database: Optional[str] = None db_timezone: Optional[str] = None @@ -18118,13 +17892,16 @@ def __init__( self, *, name: Optional[str] = None, + project_id: Optional[str] = None, named_driver_version_requested: Optional[str] = None, host: Optional[str] = None, port: Optional[str] = None, username: Optional[str] = None, password: Optional[str] = None, + service_account_auth_enabled: Optional[bool] = None, uses_key_pair_auth: Optional[bool] = None, certificate: Optional[str] = None, + user_attr_certificate: Optional[str] = None, file_type: Optional[str] = None, database: Optional[str] = None, db_timezone: Optional[str] = None, @@ -18166,13 +17943,16 @@ def __init__( service_name: Optional[str] = None ): self.name = name + self.project_id = project_id self.named_driver_version_requested = named_driver_version_requested self.host = host self.port = port self.username = username self.password = password + self.service_account_auth_enabled = service_account_auth_enabled self.uses_key_pair_auth = uses_key_pair_auth self.certificate = certificate + self.user_attr_certificate = user_attr_certificate self.file_type = file_type self.database = database self.db_timezone = db_timezone @@ -18322,7 +18102,7 @@ def __init__( class WriteEmbedConfig(model.Model): """ Dynamic writeable type for EmbedConfig removes: - permissions, embed_enabled + embed_vis_modernization_default, permissions, embed_enabled Attributes: domain_allowlist: List of domains to allow for embedding @@ -18484,48 +18264,25 @@ def __init__(self, *, name: Optional[str] = None, ref: Optional[str] = None): self.ref = ref -@attr.s(auto_attribs=True, init=False) -class WriteGitDiagnosticReport(model.Model): - """ - Dynamic writeable type for GitDiagnosticReport removes: - can, id, project_id, user_id, state, status, created_at, updated_at, issues - - Attributes: - project_type: Project structure type. - """ - - project_type: Optional[str] = None - - def __init__(self, *, project_type: Optional[str] = None): - self.project_type = project_type - - @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, explore, model, fields, filters, sorts, limit, client_id + can, id, query_id, is_active, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at, explore, model, fields, filters, sorts, limit, client_id, pivots, dynamic_fields 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: Optional[Sequence[str]] = None, answer: Optional[str] = None ): self.questions = questions self.answer = answer - self.is_active = is_active @attr.s(auto_attribs=True, init=False) @@ -18963,6 +18720,8 @@ class WriteMcpTools(model.Model): get_dimensions: Dynamic writeable type for McpToolSetting removes: description, category, access_level get_explores: Dynamic writeable type for McpToolSetting removes: + description, category, access_level + get_field_value_suggestions: Dynamic writeable type for McpToolSetting removes: description, category, access_level get_filters: Dynamic writeable type for McpToolSetting removes: description, category, access_level @@ -19015,6 +18774,10 @@ 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 + render_visualization: Dynamic writeable type for McpToolSetting removes: + description, category, access_level + render_dashboard: Dynamic writeable type for McpToolSetting removes: description, category, access_level """ @@ -19033,6 +18796,7 @@ class WriteMcpTools(model.Model): get_dashboards: Optional["WriteMcpToolSetting"] = None get_dimensions: Optional["WriteMcpToolSetting"] = None get_explores: Optional["WriteMcpToolSetting"] = None + get_field_value_suggestions: Optional["WriteMcpToolSetting"] = None get_filters: Optional["WriteMcpToolSetting"] = None get_looks: Optional["WriteMcpToolSetting"] = None get_measures: Optional["WriteMcpToolSetting"] = None @@ -19059,6 +18823,8 @@ class WriteMcpTools(model.Model): get_lookml_tests: Optional["WriteMcpToolSetting"] = None run_lookml_tests: Optional["WriteMcpToolSetting"] = None create_view_from_table: Optional["WriteMcpToolSetting"] = None + render_visualization: Optional["WriteMcpToolSetting"] = None + render_dashboard: Optional["WriteMcpToolSetting"] = None def __init__( self, @@ -19078,6 +18844,7 @@ def __init__( get_dashboards: Optional["WriteMcpToolSetting"] = None, get_dimensions: Optional["WriteMcpToolSetting"] = None, get_explores: Optional["WriteMcpToolSetting"] = None, + get_field_value_suggestions: Optional["WriteMcpToolSetting"] = None, get_filters: Optional["WriteMcpToolSetting"] = None, get_looks: Optional["WriteMcpToolSetting"] = None, get_measures: Optional["WriteMcpToolSetting"] = None, @@ -19103,7 +18870,9 @@ 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 + create_view_from_table: Optional["WriteMcpToolSetting"] = None, + render_visualization: Optional["WriteMcpToolSetting"] = None, + render_dashboard: Optional["WriteMcpToolSetting"] = None ): self.enable_all = enable_all self.add_dashboard_element = add_dashboard_element @@ -19120,6 +18889,7 @@ def __init__( self.get_dashboards = get_dashboards self.get_dimensions = get_dimensions self.get_explores = get_explores + self.get_field_value_suggestions = get_field_value_suggestions self.get_filters = get_filters self.get_looks = get_looks self.get_measures = get_measures @@ -19146,6 +18916,8 @@ 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.render_visualization = render_visualization + self.render_dashboard = render_dashboard @attr.s(auto_attribs=True, init=False) @@ -19260,7 +19032,8 @@ class WriteOauthClientApp(model.Model): can, client_guid, tokens_invalid_before, activated_users Attributes: - redirect_uri: The uri with which this application will receive an auth code by browser redirect. + redirect_uri: (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) + redirect_uris: The authorized uris for which this application will receive an auth code by browser redirect. display_name: The application's display name description: A description of the application that will be displayed to users enabled: When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. @@ -19268,6 +19041,7 @@ class WriteOauthClientApp(model.Model): """ redirect_uri: Optional[str] = None + redirect_uris: Optional[Sequence[str]] = None display_name: Optional[str] = None description: Optional[str] = None enabled: Optional[bool] = None @@ -19277,12 +19051,14 @@ def __init__( self, *, redirect_uri: Optional[str] = None, + redirect_uris: Optional[Sequence[str]] = None, display_name: Optional[str] = None, description: Optional[str] = None, enabled: Optional[bool] = None, group_id: Optional[str] = None ): self.redirect_uri = redirect_uri + self.redirect_uris = redirect_uris self.display_name = display_name self.description = description self.enabled = enabled @@ -19618,6 +19394,198 @@ def __init__( self.dependency_status = dependency_status +@attr.s(auto_attribs=True, init=False) +class WriteProjectCISuite(model.Model): + """ + Dynamic writeable type for ProjectCISuite removes: + can, id, project_id, created_at, updated_at, change_request_trigger_hook_id, guid, dbt_cloud_webhook_id, has_webhook_secret + + Attributes: + name: Name of the CI suite + schedule_trigger_is_enabled: Whether the CI suite schedule trigger is active + schedule_trigger_crontab: Crontab that the CI suite is scheduled to run + schedule_trigger_timezone: Timezone for the CI suite schedule + alerting_enabled: Whether alerting is enabled for the CI suite + alert_email_addresses: Email addresses to send alerts to + alert_on_failed_status: Whether to alert on failed status + alert_on_error_status: Whether to alert on error status + alert_on_passed_status: Whether to alert on passed status + alert_on_cancelled_status: Whether to alert on cancelled status + change_request_trigger_is_enabled: Whether the CI suite change request trigger is active + change_request_trigger_target_branch: Git branch that should be compared against when the CI suite is run, used when the run is incremental + dbt_cloud_trigger_is_enabled: Whether the CI suite dbt Cloud trigger is active + dbt_cloud_trigger_job_id: Job ID of the dbt Cloud job + dbt_cloud_trigger_user_attribute_id: User Attribute ID used for schema substitution + webhook_secret: (Write-Only) Webhook secret used to authenticate incoming webhook requests + assert_validator_config_is_enabled: Whether assert validation is enabled for the CI suite + assert_validator_config_concurrency: Number of tests that should run concurrently during assert validation + assert_validator_config_selectors: Explores that assert validation should run for (model_name/explore_name) + assert_validator_config_exclusions: Explores that should be excluded from assert validation (model_name/explore_name) + content_validator_config_is_enabled: Whether content validation is enabled for the CI suite + content_validator_config_exclude_personal: Whether content validation should ignore personal folders + content_validator_config_incremental: Whether content should validate incrementally + content_validator_config_exclude_folders: Folders whose content should not be validated + content_validator_config_include_folders: Folders whose content should be validated + content_validator_config_selectors: Explores whose content should be validated (model_name/explore_name) + content_validator_config_exclusions: Explores that should be excluded from content validation (model_name/explore_name) + lookml_validator_config_is_enabled: Whether LookML validation is enabled for the CI suite + lookml_validator_config_severity: Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + lookml_validator_config_timeout: Amount of time after which LookML Validation should stop running + style_validator_config_is_enabled: Whether LookML Style Validator is enabled for the CI suite + style_validator_config_incremental: Whether LookML Style Validator should run incrementally on changed LookML files only + sql_validator_config_is_enabled: Whether SQL validation is enabled for the CI suite + sql_validator_config_fail_fast: Whether SQL validation should stop after the first failure + sql_validator_config_incremental: Whether SQL should validate incrementally + sql_validator_config_ignore_hidden: Whether SQL validation should ignore hidden fields + sql_validator_config_query_concurrency: Number of queries that should run concurrently during SQL validation + sql_validator_config_chunk_size: The max number of rows that should be returned for each query + sql_validator_config_selectors: Explores whose sql should be validated (model_name/explore_name) + sql_validator_config_exclusions: Explores that should be excluded from SQL validation (model_name/explore_name) + upstream_trigger_is_enabled: Whether the CI suite upstream project imports trigger is active + upstream_projects: Names of upstream projects subscribed for pull request triggers + """ + + name: Optional[str] = None + schedule_trigger_is_enabled: Optional[bool] = None + schedule_trigger_crontab: Optional[str] = None + schedule_trigger_timezone: Optional[str] = None + alerting_enabled: Optional[bool] = None + alert_email_addresses: Optional[Sequence[str]] = None + alert_on_failed_status: Optional[bool] = None + alert_on_error_status: Optional[bool] = None + alert_on_passed_status: Optional[bool] = None + alert_on_cancelled_status: Optional[bool] = None + change_request_trigger_is_enabled: Optional[bool] = None + change_request_trigger_target_branch: Optional[str] = None + dbt_cloud_trigger_is_enabled: Optional[bool] = None + dbt_cloud_trigger_job_id: Optional[int] = None + dbt_cloud_trigger_user_attribute_id: Optional[str] = None + webhook_secret: Optional[str] = None + assert_validator_config_is_enabled: Optional[bool] = None + assert_validator_config_concurrency: Optional[int] = None + assert_validator_config_selectors: Optional[Sequence[str]] = None + assert_validator_config_exclusions: Optional[Sequence[str]] = None + content_validator_config_is_enabled: Optional[bool] = None + content_validator_config_exclude_personal: Optional[bool] = None + content_validator_config_incremental: Optional[bool] = None + content_validator_config_exclude_folders: Optional[Sequence[str]] = None + content_validator_config_include_folders: Optional[Sequence[str]] = None + content_validator_config_selectors: Optional[Sequence[str]] = None + content_validator_config_exclusions: Optional[Sequence[str]] = None + lookml_validator_config_is_enabled: Optional[bool] = None + lookml_validator_config_severity: Optional[str] = None + lookml_validator_config_timeout: Optional[int] = None + style_validator_config_is_enabled: Optional[bool] = None + style_validator_config_incremental: Optional[bool] = None + sql_validator_config_is_enabled: Optional[bool] = None + sql_validator_config_fail_fast: Optional[bool] = None + sql_validator_config_incremental: Optional[bool] = None + sql_validator_config_ignore_hidden: Optional[bool] = None + sql_validator_config_query_concurrency: Optional[int] = None + sql_validator_config_chunk_size: Optional[int] = None + sql_validator_config_selectors: Optional[Sequence[str]] = None + sql_validator_config_exclusions: Optional[Sequence[str]] = None + upstream_trigger_is_enabled: Optional[bool] = None + upstream_projects: Optional[Sequence[str]] = None + + def __init__( + self, + *, + name: Optional[str] = None, + schedule_trigger_is_enabled: Optional[bool] = None, + schedule_trigger_crontab: Optional[str] = None, + schedule_trigger_timezone: Optional[str] = None, + alerting_enabled: Optional[bool] = None, + alert_email_addresses: Optional[Sequence[str]] = None, + alert_on_failed_status: Optional[bool] = None, + alert_on_error_status: Optional[bool] = None, + alert_on_passed_status: Optional[bool] = None, + alert_on_cancelled_status: Optional[bool] = None, + change_request_trigger_is_enabled: Optional[bool] = None, + change_request_trigger_target_branch: Optional[str] = None, + dbt_cloud_trigger_is_enabled: Optional[bool] = None, + dbt_cloud_trigger_job_id: Optional[int] = None, + dbt_cloud_trigger_user_attribute_id: Optional[str] = None, + webhook_secret: Optional[str] = None, + assert_validator_config_is_enabled: Optional[bool] = None, + assert_validator_config_concurrency: Optional[int] = None, + assert_validator_config_selectors: Optional[Sequence[str]] = None, + assert_validator_config_exclusions: Optional[Sequence[str]] = None, + content_validator_config_is_enabled: Optional[bool] = None, + content_validator_config_exclude_personal: Optional[bool] = None, + content_validator_config_incremental: Optional[bool] = None, + content_validator_config_exclude_folders: Optional[Sequence[str]] = None, + content_validator_config_include_folders: Optional[Sequence[str]] = None, + content_validator_config_selectors: Optional[Sequence[str]] = None, + content_validator_config_exclusions: Optional[Sequence[str]] = None, + lookml_validator_config_is_enabled: Optional[bool] = None, + lookml_validator_config_severity: Optional[str] = None, + lookml_validator_config_timeout: Optional[int] = None, + style_validator_config_is_enabled: Optional[bool] = None, + style_validator_config_incremental: Optional[bool] = None, + sql_validator_config_is_enabled: Optional[bool] = None, + sql_validator_config_fail_fast: Optional[bool] = None, + sql_validator_config_incremental: Optional[bool] = None, + sql_validator_config_ignore_hidden: Optional[bool] = None, + sql_validator_config_query_concurrency: Optional[int] = None, + sql_validator_config_chunk_size: Optional[int] = None, + sql_validator_config_selectors: Optional[Sequence[str]] = None, + sql_validator_config_exclusions: Optional[Sequence[str]] = None, + upstream_trigger_is_enabled: Optional[bool] = None, + upstream_projects: Optional[Sequence[str]] = None + ): + self.name = name + self.schedule_trigger_is_enabled = schedule_trigger_is_enabled + self.schedule_trigger_crontab = schedule_trigger_crontab + self.schedule_trigger_timezone = schedule_trigger_timezone + self.alerting_enabled = alerting_enabled + self.alert_email_addresses = alert_email_addresses + self.alert_on_failed_status = alert_on_failed_status + self.alert_on_error_status = alert_on_error_status + self.alert_on_passed_status = alert_on_passed_status + self.alert_on_cancelled_status = alert_on_cancelled_status + self.change_request_trigger_is_enabled = change_request_trigger_is_enabled + self.change_request_trigger_target_branch = change_request_trigger_target_branch + self.dbt_cloud_trigger_is_enabled = dbt_cloud_trigger_is_enabled + self.dbt_cloud_trigger_job_id = dbt_cloud_trigger_job_id + self.dbt_cloud_trigger_user_attribute_id = dbt_cloud_trigger_user_attribute_id + self.webhook_secret = webhook_secret + self.assert_validator_config_is_enabled = assert_validator_config_is_enabled + self.assert_validator_config_concurrency = assert_validator_config_concurrency + self.assert_validator_config_selectors = assert_validator_config_selectors + self.assert_validator_config_exclusions = assert_validator_config_exclusions + self.content_validator_config_is_enabled = content_validator_config_is_enabled + self.content_validator_config_exclude_personal = ( + content_validator_config_exclude_personal + ) + self.content_validator_config_incremental = content_validator_config_incremental + self.content_validator_config_exclude_folders = ( + content_validator_config_exclude_folders + ) + self.content_validator_config_include_folders = ( + content_validator_config_include_folders + ) + self.content_validator_config_selectors = content_validator_config_selectors + self.content_validator_config_exclusions = content_validator_config_exclusions + self.lookml_validator_config_is_enabled = lookml_validator_config_is_enabled + self.lookml_validator_config_severity = lookml_validator_config_severity + self.lookml_validator_config_timeout = lookml_validator_config_timeout + self.style_validator_config_is_enabled = style_validator_config_is_enabled + self.style_validator_config_incremental = style_validator_config_incremental + self.sql_validator_config_is_enabled = sql_validator_config_is_enabled + self.sql_validator_config_fail_fast = sql_validator_config_fail_fast + self.sql_validator_config_incremental = sql_validator_config_incremental + self.sql_validator_config_ignore_hidden = sql_validator_config_ignore_hidden + self.sql_validator_config_query_concurrency = ( + sql_validator_config_query_concurrency + ) + self.sql_validator_config_chunk_size = sql_validator_config_chunk_size + self.sql_validator_config_selectors = sql_validator_config_selectors + self.sql_validator_config_exclusions = sql_validator_config_exclusions + self.upstream_trigger_is_enabled = upstream_trigger_is_enabled + self.upstream_projects = upstream_projects + + @attr.s(auto_attribs=True, init=False) class WriteQuery(model.Model): """ @@ -19949,7 +19917,7 @@ def __init__( class WriteScheduledPlan(model.Model): """ Dynamic writeable type for ScheduledPlan removes: - id, created_at, updated_at, title, user, next_run_at, last_run_at, can + id, created_at, updated_at, title, content_title, user, next_run_at, last_run_at, last_run_status, can Attributes: name: Name of this scheduled plan @@ -19982,6 +19950,7 @@ class WriteScheduledPlan(model.Model): color_theme: Color scheme of the dashboard if applicable long_tables: Whether or not to expand table vis to full length pdf_page_breaks: Whether or not to add page breaks between tabs + include_filters: Whether or not to include filters context tab_ids: IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) inline_table_width: The pixel width at which we render the inline table visualizations query_id: Query id @@ -20017,6 +19986,7 @@ class WriteScheduledPlan(model.Model): color_theme: Optional[str] = None long_tables: Optional[bool] = None pdf_page_breaks: Optional[bool] = None + include_filters: Optional[bool] = None tab_ids: Optional[Sequence[str]] = None inline_table_width: Optional[int] = None query_id: Optional[str] = None @@ -20056,6 +20026,7 @@ def __init__( color_theme: Optional[str] = None, long_tables: Optional[bool] = None, pdf_page_breaks: Optional[bool] = None, + include_filters: Optional[bool] = None, tab_ids: Optional[Sequence[str]] = None, inline_table_width: Optional[int] = None, query_id: Optional[str] = None @@ -20090,6 +20061,7 @@ def __init__( self.color_theme = color_theme self.long_tables = long_tables self.pdf_page_breaks = pdf_page_breaks + self.include_filters = include_filters self.tab_ids = tab_ids self.inline_table_width = inline_table_width self.query_id = query_id @@ -20179,8 +20151,9 @@ class WriteSetting(model.Model): override_warnings: (Write-Only) If warnings are preventing a host URL change, this parameter allows for overriding warnings to force update the setting. Does not directly change any Looker settings. 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_vis_modernization_default: Default net new visualizations in embedded context to Modern theme embed_config: Dynamic writeable type for EmbedConfig removes: - permissions, embed_enabled + embed_vis_modernization_default, 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 @@ -20209,6 +20182,7 @@ class WriteSetting(model.Model): override_warnings: Optional[bool] = None email_domain_allowlist: Optional[Sequence[str]] = None embed_cookieless_v2: Optional[bool] = None + embed_vis_modernization_default: Optional[bool] = None embed_config: Optional["WriteEmbedConfig"] = None dashboard_auto_refresh_restriction: Optional[bool] = None dashboard_auto_refresh_minimum_interval: Optional[str] = None @@ -20240,6 +20214,7 @@ def __init__( override_warnings: Optional[bool] = None, email_domain_allowlist: Optional[Sequence[str]] = None, embed_cookieless_v2: Optional[bool] = None, + embed_vis_modernization_default: Optional[bool] = None, embed_config: Optional["WriteEmbedConfig"] = None, dashboard_auto_refresh_restriction: Optional[bool] = None, dashboard_auto_refresh_minimum_interval: Optional[str] = None, @@ -20268,6 +20243,7 @@ def __init__( self.override_warnings = override_warnings self.email_domain_allowlist = email_domain_allowlist self.embed_cookieless_v2 = embed_cookieless_v2 + self.embed_vis_modernization_default = embed_vis_modernization_default self.embed_config = embed_config self.dashboard_auto_refresh_restriction = dashboard_auto_refresh_restriction self.dashboard_auto_refresh_minimum_interval = ( @@ -20462,7 +20438,7 @@ class WriteUserAttribute(model.Model): Attributes: name: Name of user attribute label: Human-friendly label for user attribute - type: Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + type: Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") default_value: Default value for when no value is set on the user value_is_hidden: If true, users will not be able to view values of this attribute user_can_view: Non-admin users can see the values of their attributes and use them in filters @@ -20525,6 +20501,22 @@ def __init__(self, *, value: Optional[str] = None): self.value = value +@attr.s(auto_attribs=True, init=False) +class WriteUserDbConnection(model.Model): + """ + Dynamic writeable type for UserDbConnection removes: + can, id, name, user_id, dialect, auth_type, host, port, database, schema, jdbc_additional_params, oauth_application_id, created_at, updated_at + + Attributes: + enabled: Whether this connection is enabled + """ + + enabled: Optional[bool] = None + + def __init__(self, *, enabled: Optional[bool] = None): + self.enabled = enabled + + @attr.s(auto_attribs=True, init=False) class WriteWhitelabelConfiguration(model.Model): """ diff --git a/python/looker_sdk/sdk/constants.py b/python/looker_sdk/sdk/constants.py index e2c35983e..316587dff 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.12" +sdk_version = "26.18" environment_prefix = "LOOKERSDK" diff --git a/spec/Looker.4.0.json b/spec/Looker.4.0.json index ffea6747c..926eac373 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.12", - "x-looker-release-version": "26.12.3", + "version": "4.0.26.18", + "x-looker-release-version": "26.18.1", "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": { @@ -175,7 +175,7 @@ ], "operationId": "create_query_task", "summary": "Run Query Async", - "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n", + "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n", "parameters": [ { "name": "body", @@ -663,7 +663,7 @@ ], "operationId": "run_query", "summary": "Run Query", - "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n\n\n", "produces": [ "text", "application/json", @@ -823,7 +823,7 @@ ], "operationId": "run_inline_query", "summary": "Run Inline Query", - "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n\n\n", "produces": [ "text", "application/json", @@ -985,7 +985,7 @@ ], "operationId": "run_url_encoded_query", "summary": "Run Url Encoded Query", - "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/4.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n fields: \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n sorts: \"products.count desc 0\",\n limit: \"500\",\n query_timezone: \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/4.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n fields: \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n sorts: \"products.count desc 0\",\n limit: \"500\",\n query_timezone: \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n\n\n", "produces": [ "text", "application/json", @@ -1585,6 +1585,54 @@ "x-looker-rate-limited": true } }, + "/agents/lookml/{agent_id}": { + "get": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "agent_lookml", + "summary": "Get LookML of a UDD Agent", + "description": "### Get LookML of a UDD Agent\n\nReturns the LookML representation of a user-defined (UDD) agent.\n", + "parameters": [ + { + "name": "agent_id", + "in": "path", + "description": "Id of agent", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "lookml of agent", + "schema": { + "$ref": "#/definitions/AgentLookml" + } + }, + "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 + } + }, "/alerts/{alert_id}/follow": { "post": { "tags": [ @@ -2830,14 +2878,14 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/ci/runs/{run_id}": { + "/projects/{project_id}/continuous_integration/runs/search": { "get": { "tags": [ "Project" ], - "operationId": "get_ci_run", - "summary": "Fetch Continuous Integration run", - "description": "### Fetches a CI Run.\n\nThis endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead.\n", + "operationId": "search_continuous_integration_runs", + "summary": "Search Continuous Integration runs", + "description": "### Search Continuous Integration Runs for a project.\n\nReturns an array of Continuous Integration Run objects that match the specified search criteria.\n", "parameters": [ { "name": "project_id", @@ -2846,173 +2894,75 @@ "required": true, "type": "string" }, - { - "name": "run_id", - "in": "path", - "description": "Run Id", - "required": true, - "type": "string" - }, { "name": "fields", "in": "query", "description": "Requested fields", "required": false, "type": "string" - } - ], - "responses": { - "200": { - "description": "CI Run", - "schema": { - "$ref": "#/definitions/ProjectRun" - } }, - "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" - } - } - }, - "deprecated": true, - "x-looker-status": "deprecated", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/ci/run": { - "post": { - "tags": [ - "Project" - ], - "operationId": "create_ci_run", - "summary": "Create a Continuous Integration run", - "description": "### Creates a CI Run.\n\nThis endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead.\n", - "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, + "name": "suite_id", + "in": "query", + "description": "Filter by suite id. Can be a comma-separated list of ids.", + "required": false, "type": "string" }, { - "name": "body", - "in": "body", - "description": "Options for creating a CI run", - "required": true, - "schema": { - "$ref": "#/definitions/CreateCIRunRequest" - } + "name": "status", + "in": "query", + "description": "Filter by status. Can be a comma-separated list of statuses.", + "required": false, + "type": "string" }, { - "name": "fields", + "name": "user_id", "in": "query", - "description": "Requested fields", + "description": "Filter by user id. Can be a comma-separated list of ids.", "required": false, "type": "string" - } - ], - "responses": { - "200": { - "description": "CI Run", - "schema": { - "$ref": "#/definitions/CreateCIRunResponse" - } - }, - "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" - } - } - }, - "deprecated": true, - "x-looker-status": "deprecated", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/continuous_integration/runs": { - "post": { - "tags": [ - "Project" - ], - "operationId": "create_continuous_integration_run", - "summary": "Create and queue a Continuous Integration run", - "description": "### Creates and queues a Continuous Integration Run.\n\n", - "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, + "name": "trigger_type", + "in": "query", + "description": "Filter by trigger type. Can be a comma-separated list of types.", + "required": false, "type": "string" }, { - "name": "body", - "in": "body", - "description": "Options for creating a Continuous Integration run", - "required": true, - "schema": { - "$ref": "#/definitions/CreateContinuousIntegrationRunRequest" - } + "name": "limit", + "in": "query", + "description": "Number of results to return (min 1, max 100, default 50, used with offset)", + "required": false, + "type": "integer", + "format": "int64" }, { - "name": "fields", + "name": "offset", "in": "query", - "description": "Requested fields", + "description": "Number of results to skip before returning. (used with limit)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Continuous Integration run info", + "description": "Continuous Integration Runs", "schema": { - "$ref": "#/definitions/CIRun" + "type": "array", + "items": { + "$ref": "#/definitions/CIRun" + } } }, - "201": { - "description": "Created" - }, "400": { "description": "Bad Request", "schema": { @@ -3025,18 +2975,6 @@ "$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": { @@ -3044,19 +2982,19 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects/{project_id}/continuous_integration/runs/{run_id}": { + "/projects/{project_id}/continuous_integration/suites": { "get": { "tags": [ "Project" ], - "operationId": "get_continuous_integration_run", - "summary": "Get a Continuous Integration run", - "description": "### Gets a Continuous Integration run.\n\n", + "operationId": "get_continuous_integration_suites", + "summary": "Fetch Multiple Continuous Integration Suites for Project", + "description": "### Fetches Multiple CI Suite Configurations for Project.\n\n", "parameters": [ { "name": "project_id", @@ -3065,65 +3003,46 @@ "required": true, "type": "string" }, - { - "name": "run_id", - "in": "path", - "description": "Run Id", - "required": true, - "type": "string" - }, { "name": "fields", "in": "query", "description": "Requested fields", "required": false, "type": "string" - } - ], - "responses": { - "200": { - "description": "Continuous Integration run info", - "schema": { - "$ref": "#/definitions/CIRun" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "limit", + "in": "query", + "description": "Number of suites to return (min 1, max 100, default 50)", + "required": false, + "type": "integer", + "format": "int64" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "offset", + "in": "query", + "description": "Row offset at which to fetch suites", + "required": false, + "type": "integer", + "format": "int64" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "created_at", + "in": "query", + "description": "Time at which to fetch suites", + "required": false, + "type": "string", + "format": "date-time" } - }, - "x-looker-status": "beta", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/cloud_storage": { - "get": { - "tags": [ - "Config" ], - "operationId": "cloud_storage_configuration", - "summary": "Get Cloud Storage", - "description": "Get the current Cloud Storage Configuration.\n", "responses": { "200": { - "description": "Current Cloud Storage Configuration", + "description": "Continuous Integration Suite", "schema": { - "$ref": "#/definitions/BackupConfiguration" + "type": "array", + "items": { + "$ref": "#/definitions/ProjectCISuite" + } } }, "400": { @@ -3149,29 +3068,43 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "Config" + "Project" ], - "operationId": "update_cloud_storage_configuration", - "summary": "Update Cloud Storage", - "description": "Update the current Cloud Storage Configuration.\n", + "operationId": "create_continuous_integration_suite", + "summary": "Create a Continuous Integration Suite for Project", + "description": "### Fetches a CI Suite Configuration.\n\n", "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Options for Cloud Storage Configuration", + "description": "Options for creating a Continuous Integration suite", "required": true, "schema": { - "$ref": "#/definitions/BackupConfiguration" + "$ref": "#/definitions/ProjectCISuite" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "New state for specified model set.", + "description": "Continuous Integration Suite", "schema": { - "$ref": "#/definitions/BackupConfiguration" + "$ref": "#/definitions/ProjectCISuite" } }, "400": { @@ -3186,6 +3119,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -3204,31 +3143,42 @@ "x-looker-rate-limited": true } }, - "/color_collections": { + "/projects/{project_id}/continuous_integration/suites/{suite_id}": { "get": { "tags": [ - "ColorCollection" + "Project" ], - "operationId": "all_color_collections", - "summary": "Get all Color Collections", - "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "get_continuous_integration_suite", + "summary": "Fetch Continuous Integration Suite for Project", + "description": "### Fetches a CI Suite Configuration.\n\n", "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "type": "string" + }, + { + "name": "suite_id", + "in": "path", + "description": "Suite Id", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "type": "string" } ], "responses": { "200": { - "description": "ColorCollections", + "description": "Continuous Integration Suite", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ColorCollection" - } + "$ref": "#/definitions/ProjectCISuite" } }, "400": { @@ -3254,29 +3204,110 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "delete": { "tags": [ - "ColorCollection" + "Project" ], - "operationId": "create_color_collection", - "summary": "Create ColorCollection", - "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "delete_continuous_integration_suite", + "summary": "Delete Continuous Integration suite", + "description": "### Deletes a Continuous Integration Suite.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "type": "string" + }, + { + "name": "suite_id", + "in": "path", + "description": "Suite Id", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" + } + ], + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "patch": { + "tags": [ + "Project" + ], + "operationId": "update_continuous_integration_suite", + "summary": "Update a Continuous Integration suite", + "description": "### Updates a Continuous Integration Suite.\n\n", "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "type": "string" + }, + { + "name": "suite_id", + "in": "path", + "description": "Suite Id", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "ColorCollection", + "description": "Options for updating a Continuous Integration suite", "required": true, "schema": { - "$ref": "#/definitions/ColorCollection" + "$ref": "#/definitions/ProjectCISuite" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "ColorCollection", + "description": "Continuous Integration Suite", "schema": { - "$ref": "#/definitions/ColorCollection" + "$ref": "#/definitions/ProjectCISuite" } }, "400": { @@ -3285,8 +3316,75 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/projects/{project_id}/continuous_integration/runs": { + "post": { + "tags": [ + "Project" + ], + "operationId": "create_continuous_integration_run", + "summary": "Create and queue a Continuous Integration run", + "description": "### Creates and queues a Continuous Integration Run.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Options for creating a Continuous Integration run", + "required": true, + "schema": { + "$ref": "#/definitions/CreateContinuousIntegrationRunRequest" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Continuous Integration run info", + "schema": { + "$ref": "#/definitions/CIRun" + } + }, + "201": { + "description": "Created" + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -3321,31 +3419,48 @@ "x-looker-rate-limited": true } }, - "/color_collections/custom": { - "get": { + "/projects/{project_id}/continuous_integration/runs/{run_id}/duplicate": { + "post": { "tags": [ - "ColorCollection" + "Project" ], - "operationId": "color_collections_custom", - "summary": "Get all Custom Color Collections", - "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "duplicate_continuous_integration_run", + "summary": "Duplicate and queue a Continuous Integration run", + "description": "### Duplicates and queues a Continuous Integration Run.\n\n", "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "type": "string" + }, + { + "name": "run_id", + "in": "path", + "description": "Run ID to duplicate and re-run", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "type": "string" } ], "responses": { "200": { - "description": "ColorCollections", + "description": "Duplicate Continuous Integration Run", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ColorCollection" - } + "$ref": "#/definitions/CIRun" + } + }, + "201": { + "description": "Continuous Integration run info", + "schema": { + "$ref": "#/definitions/CIRun" } }, "400": { @@ -3360,6 +3475,18 @@ "$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": { @@ -3372,31 +3499,42 @@ "x-looker-rate-limited": true } }, - "/color_collections/standard": { + "/projects/{project_id}/continuous_integration/runs/{run_id}": { "get": { "tags": [ - "ColorCollection" + "Project" ], - "operationId": "color_collections_standard", - "summary": "Get all Standard Color Collections", - "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "get_continuous_integration_run", + "summary": "Get a Continuous Integration run", + "description": "### Gets a Continuous Integration run.\n\n", "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "type": "string" + }, + { + "name": "run_id", + "in": "path", + "description": "Run Id", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "type": "string" } ], "responses": { "200": { - "description": "ColorCollections", + "description": "Continuous Integration run info", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ColorCollection" - } + "$ref": "#/definitions/CIRun" } }, "400": { @@ -3421,30 +3559,35 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/color_collections/default": { - "put": { + }, + "delete": { "tags": [ - "ColorCollection" + "Project" ], - "operationId": "set_default_color_collection", - "summary": "Set Default Color Collection", - "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "cancel_continuous_integration_run", + "summary": "Cancel a Continuous Integration run", + "description": "### Cancels a Continuous Integration Run.\n\n", "parameters": [ { - "name": "collection_id", - "in": "query", - "description": "ID of color collection to set as default", + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "type": "string" + }, + { + "name": "run_id", + "in": "path", + "description": "Run Id", "required": true, "type": "string" } ], "responses": { - "200": { - "description": "ColorCollection", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/ColorCollection" + "type": "string" } }, "400": { @@ -3459,10 +3602,10 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", + "409": { + "description": "Resource Already Exists", "schema": { - "$ref": "#/definitions/ValidationError" + "$ref": "#/definitions/Error" } }, "429": { @@ -3475,19 +3618,69 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/cloud_storage": { "get": { "tags": [ - "ColorCollection" + "Config" ], - "operationId": "default_color_collection", - "summary": "Get Default Color Collection", - "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", + "operationId": "cloud_storage_configuration", + "summary": "Get Cloud Storage", + "description": "Get the current Cloud Storage Configuration.\n", "responses": { "200": { - "description": "ColorCollection", + "description": "Current Cloud Storage Configuration", "schema": { - "$ref": "#/definitions/ColorCollection" + "$ref": "#/definitions/BackupConfiguration" + } + }, + "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 + }, + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_cloud_storage_configuration", + "summary": "Update Cloud Storage", + "description": "Update the current Cloud Storage Configuration.\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Options for Cloud Storage Configuration", + "required": true, + "schema": { + "$ref": "#/definitions/BackupConfiguration" + } + } + ], + "responses": { + "200": { + "description": "New state for specified model set.", + "schema": { + "$ref": "#/definitions/BackupConfiguration" } }, "400": { @@ -3502,6 +3695,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -3514,22 +3713,15 @@ "x-looker-rate-limited": true } }, - "/color_collections/{collection_id}": { + "/color_collections": { "get": { "tags": [ "ColorCollection" ], - "operationId": "color_collection", - "summary": "Get Color Collection by ID", - "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "all_color_collections", + "summary": "Get all Color Collections", + "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "Id of Color Collection", - "required": true, - "type": "string" - }, { "name": "fields", "in": "query", @@ -3540,9 +3732,12 @@ ], "responses": { "200": { - "description": "ColorCollection", + "description": "ColorCollections", "schema": { - "$ref": "#/definitions/ColorCollection" + "type": "array", + "items": { + "$ref": "#/definitions/ColorCollection" + } } }, "400": { @@ -3568,21 +3763,14 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ "ColorCollection" ], - "operationId": "update_color_collection", - "summary": "Update Custom Color collection", - "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "create_color_collection", + "summary": "Create ColorCollection", + "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "Id of Custom Color Collection", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", @@ -3618,6 +3806,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -3634,31 +3828,33 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/color_collections/custom": { + "get": { "tags": [ "ColorCollection" ], - "operationId": "delete_color_collection", - "summary": "Delete ColorCollection", - "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "color_collections_custom", + "summary": "Get all Custom Color Collections", + "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "parameters": [ { - "name": "collection_id", - "in": "path", - "description": "Id of Color Collection", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "Success" - }, - "204": { - "description": "Successfully deleted.", + "description": "ColorCollections", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/ColorCollection" + } } }, "400": { @@ -3667,12 +3863,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -3691,32 +3881,351 @@ "x-looker-rate-limited": true } }, - "/content_favorite/search": { + "/color_collections/standard": { "get": { "tags": [ - "Content" + "ColorCollection" ], - "operationId": "search_content_favorites", - "summary": "Search Favorite Contents", - "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "color_collections_standard", + "summary": "Get all Standard Color Collections", + "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "parameters": [ { - "name": "id", - "in": "query", - "description": "Match content favorite id(s)", - "required": false, - "type": "string" - }, - { - "name": "user_id", + "name": "fields", "in": "query", - "description": "Match user id(s). To create a list of multiple ids, use commas as separators", + "description": "Requested fields.", "required": false, "type": "string" + } + ], + "responses": { + "200": { + "description": "ColorCollections", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ColorCollection" + } + } }, - { - "name": "content_metadata_id", - "in": "query", + "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 + } + }, + "/color_collections/default": { + "put": { + "tags": [ + "ColorCollection" + ], + "operationId": "set_default_color_collection", + "summary": "Set Default Color Collection", + "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "query", + "description": "ID of color collection to set as default", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "schema": { + "$ref": "#/definitions/ColorCollection" + } + }, + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "default_color_collection", + "summary": "Get Default Color Collection", + "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", + "responses": { + "200": { + "description": "ColorCollection", + "schema": { + "$ref": "#/definitions/ColorCollection" + } + }, + "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 + } + }, + "/color_collections/{collection_id}": { + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "color_collection", + "summary": "Get Color Collection by ID", + "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Color Collection", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "schema": { + "$ref": "#/definitions/ColorCollection" + } + }, + "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 + }, + "patch": { + "tags": [ + "ColorCollection" + ], + "operationId": "update_color_collection", + "summary": "Update Custom Color collection", + "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Custom Color Collection", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "ColorCollection", + "required": true, + "schema": { + "$ref": "#/definitions/ColorCollection" + } + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "schema": { + "$ref": "#/definitions/ColorCollection" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$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": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "delete": { + "tags": [ + "ColorCollection" + ], + "operationId": "delete_color_collection", + "summary": "Delete ColorCollection", + "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Color Collection", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Success" + }, + "204": { + "description": "Successfully deleted.", + "schema": { + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/content_favorite/search": { + "get": { + "tags": [ + "Content" + ], + "operationId": "search_content_favorites", + "summary": "Search Favorite Contents", + "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Match content favorite id(s)", + "required": false, + "type": "string" + }, + { + "name": "user_id", + "in": "query", + "description": "Match user id(s). To create a list of multiple ids, use commas as separators", + "required": false, + "type": "string" + }, + { + "name": "content_metadata_id", + "in": "query", "description": "Match content metadata id(s). To create a list of multiple ids, use commas as separators", "required": false, "type": "string" @@ -5246,6 +5755,71 @@ "x-looker-rate-limited": true } }, + "/conversations/{conversation_id}/messages/{user_message_id}/responses": { + "get": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "get_conversation_message_responses", + "summary": "Get Agent Responses for User Message", + "description": "### Get Agent Responses for User Message\n\nGet all agent response messages generated for a specific user prompt.\n\nAn agent response often consists of multiple message blocks (such as text explanations,\nvisualizations, and follow-up suggestions). This endpoint returns all response messages\nfollowing the specified user message up to the next user prompt.\n\n", + "parameters": [ + { + "name": "conversation_id", + "in": "path", + "description": "Conversation ID", + "required": true, + "type": "string" + }, + { + "name": "user_message_id", + "in": "path", + "description": "User Conversation Message ID", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "agent response messages", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ConversationMessage" + } + } + }, + "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 + } + }, "/conversations/search": { "get": { "tags": [ @@ -5715,19 +6289,35 @@ "x-looker-rate-limited": true } }, - "/custom_welcome_email": { + "/users/{user_id}/credentials_email": { "get": { "tags": [ - "Config" + "User" + ], + "operationId": "user_credentials_email", + "summary": "Get Email/Password Credential", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } ], - "operationId": "custom_welcome_email", - "summary": "Get Custom Welcome Email", - "description": "### Get the current status and content of custom welcome emails\n", "responses": { "200": { - "description": "Custom Welcome Email", + "description": "Email/Password Credential", "schema": { - "$ref": "#/definitions/CustomWelcomeEmail" + "$ref": "#/definitions/CredentialsEmail" } }, "400": { @@ -5736,6 +6326,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -5749,41 +6345,47 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "Config" + "User" ], - "operationId": "update_custom_welcome_email", - "summary": "Update Custom Welcome Email Content", - "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", + "operationId": "create_user_credentials_email", + "summary": "Create Email/Password Credential", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Custom Welcome Email setting and value to save", + "description": "Email/Password Credential", "required": true, "schema": { - "$ref": "#/definitions/CustomWelcomeEmail" + "$ref": "#/definitions/CredentialsEmail" } }, { - "name": "send_test_welcome_email", + "name": "fields", "in": "query", - "description": "If true a test email with the content from the request will be sent to the current user after saving", + "description": "Requested fields.", "required": false, - "type": "boolean" + "type": "string" } ], "responses": { "200": { - "description": "Custom Welcome Email", + "description": "Email/Password Credential", "schema": { - "$ref": "#/definitions/CustomWelcomeEmail" + "$ref": "#/definitions/CredentialsEmail" } }, "400": { @@ -5792,16 +6394,22 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", + "409": { + "description": "Resource Already Exists", "schema": { - "$ref": "#/definitions/ValidationError" + "$ref": "#/definitions/Error" } }, "429": { @@ -5811,36 +6419,47 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/custom_welcome_email_test": { - "put": { + }, + "patch": { "tags": [ - "Config" + "User" ], - "operationId": "update_custom_welcome_email_test", - "summary": "Send a test welcome email to the currently logged in user with the supplied content ", - "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", + "operationId": "update_user_credentials_email", + "summary": "Update Email/Password Credential", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Subject, header, and Body of the email to be sent.", + "description": "Email/Password Credential", "required": true, "schema": { - "$ref": "#/definitions/WelcomeEmailTest" + "$ref": "#/definitions/CredentialsEmail" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Send Test Welcome Email", + "description": "Email/Password Credential", "schema": { - "$ref": "#/definitions/WelcomeEmailTest" + "$ref": "#/definitions/CredentialsEmail" } }, "400": { @@ -5849,16 +6468,16 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "schema": { - "$ref": "#/definitions/ValidationError" + "$ref": "#/definitions/Error" } }, "429": { @@ -5871,33 +6490,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards": { - "get": { + }, + "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "all_dashboards", - "summary": "Get All Dashboards", - "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", + "operationId": "delete_user_credentials_email", + "summary": "Delete Email/Password Credential", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, "type": "string" } ], "responses": { - "200": { - "description": "dashboards", + "204": { + "description": "Successfully deleted.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/DashboardBase" - } + "type": "string" } }, "400": { @@ -5906,6 +6520,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -5922,30 +6542,44 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/users/{user_id}/credentials_email/password_reset": { "post": { "tags": [ - "Dashboard" + "User" ], - "operationId": "create_dashboard", - "summary": "Create Dashboard", - "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title` and `space_id` are required fields.\n`Space_id` must contain the id of an existing space.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", + "operationId": "create_user_credentials_email_password_reset", + "summary": "Create Password Reset Token", + "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Dashboard", + "name": "user_id", + "in": "path", + "description": "Id of user", "required": true, - "schema": { - "$ref": "#/definitions/Dashboard" - } + "type": "string" + }, + { + "name": "expires", + "in": "query", + "description": "Expiring token.", + "required": false, + "type": "boolean" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Dashboard", + "description": "email/password credential", "schema": { - "$ref": "#/definitions/Dashboard" + "$ref": "#/definitions/CredentialsEmail" } }, "400": { @@ -5954,24 +6588,18 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -5984,97 +6612,20 @@ "x-looker-rate-limited": true } }, - "/dashboards/search": { - "get": { + "/users/{user_id}/credentials_email/send_password_reset": { + "post": { "tags": [ - "Dashboard" + "User" ], - "operationId": "search_dashboards", - "summary": "Search Dashboards", - "description": "### Search Dashboards\n\nReturns an array of **user-defined dashboard** objects that match the specified search criteria.\nNote, [search_dashboards()](#!/Dashboard/search_dashboards) does not return LookML dashboard objects.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", + "operationId": "send_user_credentials_email_password_reset", + "summary": "Send Password Reset Token", + "description": "### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ - { - "name": "id", - "in": "query", - "description": "Match dashboard id.", - "required": false, - "type": "string" - }, - { - "name": "slug", - "in": "query", - "description": "Match dashboard slug.", - "required": false, - "type": "string" - }, - { - "name": "title", - "in": "query", - "description": "Match Dashboard title.", - "required": false, - "type": "string" - }, - { - "name": "description", - "in": "query", - "description": "Match Dashboard description.", - "required": false, - "type": "string" - }, - { - "name": "content_favorite_id", - "in": "query", - "description": "Filter on a content favorite id.", - "required": false, - "type": "string" - }, - { - "name": "folder_id", - "in": "query", - "description": "Filter on a particular folder.", - "required": false, - "type": "string" - }, - { - "name": "deleted", - "in": "query", - "description": "Filter on dashboards deleted status.", - "required": false, - "type": "string" - }, { "name": "user_id", - "in": "query", - "description": "Filter on dashboards created by a particular user.", - "required": false, - "type": "string" - }, - { - "name": "view_count", - "in": "query", - "description": "Filter on a particular value of view_count", - "required": false, - "type": "string" - }, - { - "name": "content_metadata_id", - "in": "query", - "description": "Filter on a content favorite id.", - "required": false, - "type": "string" - }, - { - "name": "curate", - "in": "query", - "description": "Exclude items that exist only in personal spaces other than the users", - "required": false, - "type": "boolean" - }, - { - "name": "last_viewed_at", - "in": "query", - "description": "Select dashboards based on when they were last viewed", - "required": false, + "in": "path", + "description": "Id of user", + "required": true, "type": "string" }, { @@ -6083,71 +6634,13 @@ "description": "Requested fields.", "required": false, "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "One or more fields to sort by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :view_count, :favorite_count, :slug, :content_favorite_id, :content_metadata_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :certification_status]", - "required": false, - "type": "string" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "type": "boolean" - }, - { - "name": "not_owned_by", - "in": "query", - "description": "Filter out the dashboards owned by the user passed at the :user_id params", - "required": false, - "type": "boolean" } ], "responses": { "200": { - "description": "dashboards", + "description": "email/password credential", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Dashboard" - } + "$ref": "#/definitions/CredentialsEmail" } }, "400": { @@ -6156,6 +6649,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -6174,57 +6673,35 @@ "x-looker-rate-limited": true } }, - "/dashboards/{lookml_dashboard_id}/import/{space_id}": { - "post": { + "/users/{user_id}/credentials_google": { + "get": { "tags": [ - "Dashboard" + "User" ], - "operationId": "import_lookml_dashboard", - "summary": "Import LookML Dashboard", - "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", + "operationId": "user_credentials_google", + "summary": "Get Google Auth Credential", + "description": "### Google authentication login information for the specified user.\n", "parameters": [ { - "name": "lookml_dashboard_id", - "in": "path", - "description": "Id of LookML dashboard", - "required": true, - "type": "string" - }, - { - "name": "space_id", + "name": "user_id", "in": "path", - "description": "Id of space to import the dashboard to", + "description": "Id of user", "required": true, "type": "string" }, { - "name": "body", - "in": "body", - "description": "Dashboard", - "required": false, - "schema": { - "$ref": "#/definitions/Dashboard" - } - }, - { - "name": "raw_locale", + "name": "fields", "in": "query", - "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", + "description": "Requested fields.", "required": false, - "type": "boolean" + "type": "string" } ], "responses": { "200": { - "description": "Dashboard", - "schema": { - "$ref": "#/definitions/Dashboard" - } - }, - "201": { - "description": "dashboard", + "description": "Google Auth Credential", "schema": { - "$ref": "#/definitions/Dashboard" + "$ref": "#/definitions/CredentialsGoogle" } }, "400": { @@ -6233,24 +6710,18 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -6261,52 +6732,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/{lookml_dashboard_id}/sync": { - "patch": { + }, + "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "sync_lookml_dashboard", - "summary": "Sync LookML Dashboard", - "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nIf the dashboard_ids parameter is specified, only the dashboards with the specified ids will be updated.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", + "operationId": "delete_user_credentials_google", + "summary": "Delete Google Auth Credential", + "description": "### Delete Google authentication login information for the specified user.\n", "parameters": [ { - "name": "lookml_dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of LookML dashboard, in the form 'model::dashboardname'", + "description": "Id of user", "required": true, "type": "string" - }, - { - "name": "raw_locale", - "in": "query", - "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", - "required": false, - "type": "boolean" - }, - { - "name": "dashboard_ids", - "in": "query", - "description": "An array of UDD dashboard IDs to sync. If not specified, all UDD dashboards will be synced.", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv" } ], "responses": { - "200": { - "description": "Ids of all the dashboards that were updated by this operation", + "204": { + "description": "Successfully deleted.", "schema": { - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } + "type": "string" } }, "400": { @@ -6315,16 +6762,16 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "schema": { - "$ref": "#/definitions/ValidationError" + "$ref": "#/definitions/Error" } }, "429": { @@ -6339,28 +6786,35 @@ "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}": { - "delete": { + "/users/{user_id}/credentials_looker_openid": { + "get": { "tags": [ - "Dashboard" + "User" ], - "operationId": "delete_dashboard", - "summary": "Delete Dashboard", - "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", + "operationId": "user_credentials_looker_openid", + "summary": "Get Looker OpenId Credential", + "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Looker OpenId Credential", "schema": { - "type": "string" + "$ref": "#/definitions/CredentialsLookerOpenid" } }, "400": { @@ -6369,14 +6823,14 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } @@ -6392,36 +6846,27 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "update_dashboard", - "summary": "Update Dashboard", - "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", + "operationId": "delete_user_credentials_looker_openid", + "summary": "Delete Looker OpenId Credential", + "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Dashboard", - "required": true, - "schema": { - "$ref": "#/definitions/Dashboard" - } } ], "responses": { - "200": { - "description": "Dashboard", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/Dashboard" + "type": "string" } }, "400": { @@ -6430,24 +6875,18 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -6458,19 +6897,21 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/users/{user_id}/credentials_saml": { "get": { "tags": [ - "Dashboard" + "User" ], - "operationId": "dashboard", - "summary": "Get Dashboard", - "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", + "operationId": "user_credentials_saml", + "summary": "Get Saml Auth Credential", + "description": "### Saml authentication login information for the specified user.\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "type": "string" }, @@ -6484,9 +6925,9 @@ ], "responses": { "200": { - "description": "Dashboard", + "description": "Saml Auth Credential", "schema": { - "$ref": "#/definitions/Dashboard" + "$ref": "#/definitions/CredentialsSaml" } }, "400": { @@ -6495,6 +6936,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -6511,30 +6958,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/aggregate_table_lookml/{dashboard_id}": { - "get": { + }, + "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "dashboard_aggregate_table_lookml", - "summary": "Get Aggregate Table LookML for a dashboard", - "description": "### Get Aggregate Table LookML for Each Query on a Dashboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", + "operationId": "delete_user_credentials_saml", + "summary": "Delete Saml Auth Credential", + "description": "### Delete Saml authentication login information for the specified user.\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "type": "string" } ], "responses": { - "200": { - "description": "JSON for Aggregate Table LookML", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/DashboardAggregateTableLookml" + "type": "string" } }, "400": { @@ -6543,6 +6988,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -6561,34 +7012,20 @@ "x-looker-rate-limited": true } }, - "/dashboards/lookml/search": { + "/users/{user_id}/credentials_totp": { "get": { "tags": [ - "Dashboard" + "User" ], - "operationId": "search_lookml_dashboards", - "summary": "Search LookML Dashboards", - "description": "### Search LookML Dashboards\n\nReturns an array of **LookML Dashboard** objects that match the specified search criteria.\nNote, this only returns LookML Dashboards in production.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml)\n", + "operationId": "user_credentials_totp", + "summary": "Get Two-Factor Credential", + "description": "### Get two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "folder_id", - "in": "query", - "description": "Filter on a particular folder.", - "required": false, - "type": "string" - }, - { - "name": "title", - "in": "query", - "description": "Match LookML Dashboard title.", - "required": false, - "type": "string" - }, - { - "name": "content_favorite_id", - "in": "query", - "description": "Filter on a content favorite id.", - "required": false, + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, "type": "string" }, { @@ -6597,36 +7034,81 @@ "description": "Requested fields.", "required": false, "type": "string" + } + ], + "responses": { + "200": { + "description": "Two-Factor Credential", + "schema": { + "$ref": "#/definitions/CredentialsTotp" + } + }, + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "post": { + "tags": [ + "User" + ], + "operationId": "create_user_credentials_totp", + "summary": "Create Two-Factor Credential", + "description": "### Create two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "parameters": [ { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "type": "integer", - "format": "int64" + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "type": "string" }, { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "name": "body", + "in": "body", + "description": "Two-Factor Credential", "required": false, - "type": "integer", - "format": "int64" + "schema": { + "$ref": "#/definitions/CredentialsTotp" + } }, { - "name": "sorts", + "name": "fields", "in": "query", - "description": "One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "dashboards", + "description": "Two-Factor Credential", "schema": { - "$ref": "#/definitions/DashboardLookml" + "$ref": "#/definitions/CredentialsTotp" } }, "400": { @@ -6635,12 +7117,30 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "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": { @@ -6651,30 +7151,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/lookml/{dashboard_id}": { - "get": { + }, + "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "dashboard_lookml", - "summary": "Get lookml of a UDD", - "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", + "operationId": "delete_user_credentials_totp", + "summary": "Delete Two-Factor Credential", + "description": "### Delete two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "type": "string" } ], "responses": { - "200": { - "description": "json of dashboard", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/DashboardLookml" + "type": "string" } }, "400": { @@ -6683,6 +7181,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -6701,41 +7205,19 @@ "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}/move": { - "patch": { + "/custom_welcome_email": { + "get": { "tags": [ - "Dashboard" - ], - "operationId": "move_dashboard", - "summary": "Move Dashboard", - "description": "### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", - "parameters": [ - { - "name": "dashboard_id", - "in": "path", - "description": "Dashboard id to move.", - "required": true, - "type": "string" - }, - { - "name": "folder_id", - "in": "query", - "description": "Folder id to move to.", - "required": true, - "type": "string" - } + "Config" ], + "operationId": "custom_welcome_email", + "summary": "Get Custom Welcome Email", + "description": "### Get the current status and content of custom welcome emails\n", "responses": { "200": { - "description": "Dashboard", - "schema": { - "$ref": "#/definitions/Dashboard" - } - }, - "201": { - "description": "dashboard", + "description": "Custom Welcome Email", "schema": { - "$ref": "#/definitions/Dashboard" + "$ref": "#/definitions/CustomWelcomeEmail" } }, "400": { @@ -6750,12 +7232,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -6763,35 +7239,41 @@ } } }, - "x-looker-status": "stable", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/lookml": { - "post": { + }, + "patch": { "tags": [ - "Dashboard" + "Config" ], - "operationId": "import_dashboard_from_lookml", - "summary": "Import Dashboard from LookML", - "description": "### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard.\n\nIf a dashboard exists with the YAML-defined \"preferred_slug\", the new dashboard will overwrite it. Otherwise, a new\ndashboard will be created. Note that when a dashboard is overwritten, alerts will not be maintained.\n\nIf a folder_id is specified: new dashboards will be placed in that folder, and overwritten dashboards will be moved to it\nIf the folder_id isn't specified: new dashboards will be placed in the caller's personal folder, and overwritten dashboards\nwill remain where they were\n\nLookML must contain valid LookML YAML code. It's recommended to use the LookML format returned\nfrom [dashboard_lookml()](#!/Dashboard/dashboard_lookml) as the input LookML (newlines replaced with \n).\n\nNote that the created dashboard is not linked to any LookML Dashboard,\ni.e. [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard) will not update dashboards created by this method.\n", + "operationId": "update_custom_welcome_email", + "summary": "Update Custom Welcome Email Content", + "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", "parameters": [ { "name": "body", "in": "body", - "description": "DashboardLookML", + "description": "Custom Welcome Email setting and value to save", "required": true, "schema": { - "$ref": "#/definitions/DashboardLookml" + "$ref": "#/definitions/CustomWelcomeEmail" } + }, + { + "name": "send_test_welcome_email", + "in": "query", + "description": "If true a test email with the content from the request will be sent to the current user after saving", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "dashboard", + "description": "Custom Welcome Email", "schema": { - "$ref": "#/definitions/Dashboard" + "$ref": "#/definitions/CustomWelcomeEmail" } }, "400": { @@ -6806,12 +7288,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -6825,35 +7301,36 @@ } } }, - "x-looker-status": "stable", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/dashboards/from_lookml": { - "post": { + "/custom_welcome_email_test": { + "put": { "tags": [ - "Dashboard" + "Config" ], - "operationId": "create_dashboard_from_lookml", - "summary": "Create Dashboard from LookML", - "description": "# DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml)\n", + "operationId": "update_custom_welcome_email_test", + "summary": "Send a test welcome email to the currently logged in user with the supplied content ", + "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", "parameters": [ { "name": "body", "in": "body", - "description": "DashboardLookML", + "description": "Subject, header, and Body of the email to be sent.", "required": true, "schema": { - "$ref": "#/definitions/DashboardLookml" + "$ref": "#/definitions/WelcomeEmailTest" } } ], "responses": { "200": { - "description": "dashboard", + "description": "Send Test Welcome Email", "schema": { - "$ref": "#/definitions/Dashboard" + "$ref": "#/definitions/WelcomeEmailTest" } }, "400": { @@ -6868,12 +7345,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -6892,41 +7363,31 @@ "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}/copy": { - "post": { + "/dashboards": { + "get": { "tags": [ "Dashboard" ], - "operationId": "copy_dashboard", - "summary": "Copy Dashboard", - "description": "### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n", + "operationId": "all_dashboards", + "summary": "Get All Dashboards", + "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", "parameters": [ { - "name": "dashboard_id", - "in": "path", - "description": "Dashboard id to copy.", - "required": true, - "type": "string" - }, - { - "name": "folder_id", + "name": "fields", "in": "query", - "description": "Folder id to copy to.", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Dashboard", - "schema": { - "$ref": "#/definitions/Dashboard" - } - }, - "201": { - "description": "dashboard", + "description": "dashboards", "schema": { - "$ref": "#/definitions/Dashboard" + "type": "array", + "items": { + "$ref": "#/definitions/DashboardBase" + } } }, "400": { @@ -6941,18 +7402,6 @@ "$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": { @@ -6963,37 +7412,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/{dashboard_id}/certification": { - "patch": { + }, + "post": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_certification", - "summary": "Update Dashboard Certification", - "description": "### Update dashboard certification\n", + "operationId": "create_dashboard", + "summary": "Create Dashboard", + "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title` and `space_id` are required fields.\n`Space_id` must contain the id of an existing space.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", "parameters": [ - { - "name": "dashboard_id", - "in": "path", - "description": "Dashboard id to update certification.", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "Certification Data", + "description": "Dashboard", "required": true, "schema": { - "$ref": "#/definitions/Certification" + "$ref": "#/definitions/Dashboard" } } ], "responses": { "200": { - "description": "dashboards", + "description": "Dashboard", "schema": { "$ref": "#/definitions/Dashboard" } @@ -7010,65 +7450,8 @@ "$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 - } - }, - "/dashboards/lookml/{dashboard_id}/certification": { - "patch": { - "tags": [ - "Dashboard" - ], - "operationId": "update_lookml_certification", - "summary": "Update LookML Dashboard Certification", - "description": "### Update LookML dashboard certification\n", - "parameters": [ - { - "name": "dashboard_id", - "in": "path", - "description": "LookML Dashboard id to update certification.", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Certification Data", - "required": true, - "schema": { - "$ref": "#/definitions/Certification" - } - } - ], - "responses": { - "200": { - "description": "dashboards", - "schema": { - "$ref": "#/definitions/Dashboard" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } @@ -7086,48 +7469,104 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/dashboard_elements/search": { + "/dashboards/search": { "get": { "tags": [ "Dashboard" ], - "operationId": "search_dashboard_elements", - "summary": "Search Dashboard Elements", - "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "search_dashboards", + "summary": "Search Dashboards", + "description": "### Search Dashboards\n\nReturns an array of **user-defined dashboard** objects that match the specified search criteria.\nNote, [search_dashboards()](#!/Dashboard/search_dashboards) does not return LookML dashboard objects.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", "parameters": [ { - "name": "dashboard_id", + "name": "id", "in": "query", - "description": "Select elements that refer to a given dashboard id", + "description": "Match dashboard id.", "required": false, "type": "string" }, { - "name": "look_id", + "name": "slug", "in": "query", - "description": "Select elements that refer to a given look id", + "description": "Match dashboard slug.", "required": false, "type": "string" }, { "name": "title", "in": "query", - "description": "Match the title of element", + "description": "Match Dashboard title.", + "required": false, + "type": "string" + }, + { + "name": "description", + "in": "query", + "description": "Match Dashboard description.", + "required": false, + "type": "string" + }, + { + "name": "content_favorite_id", + "in": "query", + "description": "Filter on a content favorite id.", + "required": false, + "type": "string" + }, + { + "name": "folder_id", + "in": "query", + "description": "Filter on a particular folder.", "required": false, "type": "string" }, { "name": "deleted", "in": "query", - "description": "Select soft-deleted dashboard elements", + "description": "Filter on dashboards deleted status.", + "required": false, + "type": "string" + }, + { + "name": "user_id", + "in": "query", + "description": "Filter on dashboards created by a particular user.", + "required": false, + "type": "string" + }, + { + "name": "view_count", + "in": "query", + "description": "Filter on a particular value of view_count", + "required": false, + "type": "string" + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Filter on a content favorite id.", + "required": false, + "type": "string" + }, + { + "name": "curate", + "in": "query", + "description": "Exclude items that exist only in personal spaces other than the users", "required": false, "type": "boolean" }, + { + "name": "last_viewed_at", + "in": "query", + "description": "Select dashboards based on when they were last viewed", + "required": false, + "type": "string" + }, { "name": "fields", "in": "query", @@ -7135,6 +7574,47 @@ "required": false, "type": "string" }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "One or more fields to sort by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :view_count, :favorite_count, :slug, :content_favorite_id, :content_metadata_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :certification_status]", + "required": false, + "type": "string" + }, { "name": "filter_or", "in": "query", @@ -7143,20 +7623,20 @@ "type": "boolean" }, { - "name": "sorts", + "name": "not_owned_by", "in": "query", - "description": "Fields to sort by. Sortable fields: [:look_id, :dashboard_id, :deleted, :title]", + "description": "Filter out the dashboards owned by the user passed at the :user_id params", "required": false, - "type": "string" + "type": "boolean" } ], "responses": { "200": { - "description": "Dashboard elements", + "description": "dashboards", "schema": { "type": "array", "items": { - "$ref": "#/definitions/DashboardElement" + "$ref": "#/definitions/Dashboard" } } }, @@ -7184,35 +7664,57 @@ "x-looker-rate-limited": true } }, - "/dashboard_elements/{dashboard_element_id}": { - "get": { + "/dashboards/{lookml_dashboard_id}/import/{space_id}": { + "post": { "tags": [ "Dashboard" ], - "operationId": "dashboard_element", - "summary": "Get DashboardElement", - "description": "### Get information about the dashboard element with a specific id.", + "operationId": "import_lookml_dashboard", + "summary": "Import LookML Dashboard", + "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", "parameters": [ { - "name": "dashboard_element_id", + "name": "lookml_dashboard_id", "in": "path", - "description": "Id of dashboard element", + "description": "Id of LookML dashboard", "required": true, "type": "string" }, { - "name": "fields", + "name": "space_id", + "in": "path", + "description": "Id of space to import the dashboard to", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Dashboard", + "required": false, + "schema": { + "$ref": "#/definitions/Dashboard" + } + }, + { + "name": "raw_locale", "in": "query", - "description": "Requested fields.", + "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", "required": false, - "type": "string" + "type": "boolean" } ], "responses": { "200": { - "description": "DashboardElement", + "description": "Dashboard", "schema": { - "$ref": "#/definitions/DashboardElement" + "$ref": "#/definitions/Dashboard" + } + }, + "201": { + "description": "dashboard", + "schema": { + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -7227,50 +7729,16 @@ "$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 - }, - "delete": { - "tags": [ - "Dashboard" - ], - "operationId": "delete_dashboard_element", - "summary": "Delete DashboardElement", - "description": "### Delete a dashboard element with a specific id.", - "parameters": [ - { - "name": "dashboard_element_id", - "in": "path", - "description": "Id of dashboard element", - "required": true, - "type": "string" - } - ], - "responses": { - "204": { - "description": "Successfully deleted.", - "schema": { - "type": "string" - } - }, - "400": { - "description": "Bad Request", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/ValidationError" } }, "429": { @@ -7283,44 +7751,52 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/dashboards/{lookml_dashboard_id}/sync": { "patch": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_element", - "summary": "Update DashboardElement", - "description": "### Update the dashboard element with a specific id.", + "operationId": "sync_lookml_dashboard", + "summary": "Sync LookML Dashboard", + "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nIf the dashboard_ids parameter is specified, only the dashboards with the specified ids will be updated.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", "parameters": [ { - "name": "dashboard_element_id", + "name": "lookml_dashboard_id", "in": "path", - "description": "Id of dashboard element", + "description": "Id of LookML dashboard, in the form 'model::dashboardname'", "required": true, "type": "string" }, { - "name": "body", - "in": "body", - "description": "DashboardElement", - "required": true, - "schema": { - "$ref": "#/definitions/DashboardElement" - } + "name": "raw_locale", + "in": "query", + "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", + "required": false, + "type": "boolean" }, { - "name": "fields", + "name": "dashboard_ids", "in": "query", - "description": "Requested fields.", + "description": "An array of UDD dashboard IDs to sync. If not specified, all UDD dashboards will be synced.", "required": false, - "type": "string" + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" } ], "responses": { "200": { - "description": "DashboardElement", + "description": "Ids of all the dashboards that were updated by this operation", "schema": { - "$ref": "#/definitions/DashboardElement" + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } } }, "400": { @@ -7353,14 +7829,14 @@ "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}/dashboard_elements": { - "get": { + "/dashboards/{dashboard_id}": { + "delete": { "tags": [ "Dashboard" ], - "operationId": "dashboard_dashboard_elements", - "summary": "Get All DashboardElements", - "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", + "operationId": "delete_dashboard", + "summary": "Delete Dashboard", + "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", "parameters": [ { "name": "dashboard_id", @@ -7368,23 +7844,13 @@ "description": "Id of dashboard", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { - "200": { - "description": "DashboardElement", + "204": { + "description": "Successfully deleted.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/DashboardElement" - } + "type": "string" } }, "400": { @@ -7399,6 +7865,12 @@ "$ref": "#/definitions/Error" } }, + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -7409,46 +7881,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboard_elements": { - "post": { + }, + "patch": { "tags": [ "Dashboard" ], - "operationId": "create_dashboard_element", - "summary": "Create DashboardElement", - "description": "### Create a dashboard element on the dashboard with a specific id.", + "operationId": "update_dashboard", + "summary": "Update Dashboard", + "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "DashboardElement", + "description": "Dashboard", "required": true, "schema": { - "$ref": "#/definitions/DashboardElement" + "$ref": "#/definitions/Dashboard" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "apply_filters", - "in": "query", - "description": "Apply relevant filters on dashboard to this tile", - "required": false, - "type": "boolean" } ], "responses": { "200": { - "description": "DashboardElement", + "description": "Dashboard", "schema": { - "$ref": "#/definitions/DashboardElement" + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -7463,8 +7926,8 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "405": { + "description": "Resource Can't Be Modified", "schema": { "$ref": "#/definitions/Error" } @@ -7485,21 +7948,19 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboard_filters/{dashboard_filter_id}": { + }, "get": { "tags": [ "Dashboard" ], - "operationId": "dashboard_filter", - "summary": "Get Dashboard Filter", - "description": "### Get information about the dashboard filters with a specific id.", + "operationId": "dashboard", + "summary": "Get Dashboard", + "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", "parameters": [ { - "name": "dashboard_filter_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard filters", + "description": "Id of dashboard", "required": true, "type": "string" }, @@ -7513,9 +7974,9 @@ ], "responses": { "200": { - "description": "Dashboard Filter", + "description": "Dashboard", "schema": { - "$ref": "#/definitions/DashboardFilter" + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -7540,28 +8001,44 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/dashboards/{dashboard_id}/images/{image_slug}": { + "get": { "tags": [ "Dashboard" ], - "operationId": "delete_dashboard_filter", - "summary": "Delete Dashboard Filter", - "description": "### Delete a dashboard filter with a specific id.", + "operationId": "get_dashboard_image", + "summary": "Get Dashboard Image", + "description": "### Get Dashboard Image\n\nReturns the image content for a dashboard element.\n", + "produces": [ + "image/svg+xml", + "image/png", + "image/jpeg", + "image/gif" + ], "parameters": [ { - "name": "dashboard_filter_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard filter", + "description": "Id of dashboard", + "required": true, + "type": "string" + }, + { + "name": "image_slug", + "in": "path", + "description": "Slug of image", "required": true, "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Image content", "schema": { - "type": "string" + "type": "string", + "format": "binary" } }, "400": { @@ -7570,6 +8047,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -7583,47 +8066,33 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/dashboards/aggregate_table_lookml/{dashboard_id}": { + "get": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_filter", - "summary": "Update Dashboard Filter", - "description": "### Update the dashboard filter with a specific id.", + "operationId": "dashboard_aggregate_table_lookml", + "summary": "Get Aggregate Table LookML for a dashboard", + "description": "### Get Aggregate Table LookML for Each Query on a Dashboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", "parameters": [ { - "name": "dashboard_filter_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard filter", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Dashboard Filter", + "description": "Id of dashboard", "required": true, - "schema": { - "$ref": "#/definitions/DashboardFilter" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, "type": "string" } ], "responses": { "200": { - "description": "Dashboard Filter", + "description": "JSON for Aggregate Table LookML", "schema": { - "$ref": "#/definitions/DashboardFilter" + "$ref": "#/definitions/DashboardAggregateTableLookml" } }, "400": { @@ -7638,12 +8107,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -7656,38 +8119,72 @@ "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}/dashboard_filters": { + "/dashboards/lookml/search": { "get": { "tags": [ "Dashboard" ], - "operationId": "dashboard_dashboard_filters", - "summary": "Get All Dashboard Filters", - "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", + "operationId": "search_lookml_dashboards", + "summary": "Search LookML Dashboards", + "description": "### Search LookML Dashboards\n\nReturns an array of **LookML Dashboard** objects that match the specified search criteria.\nNote, this only returns LookML Dashboards in production.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n**Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title.\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml)\n", "parameters": [ { - "name": "dashboard_id", - "in": "path", - "description": "Id of dashboard", - "required": true, + "name": "folder_id", + "in": "query", + "description": "Filter on a particular folder.", + "required": false, "type": "string" }, { - "name": "fields", + "name": "title", "in": "query", - "description": "Requested fields.", + "description": "Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title.", "required": false, "type": "string" - } + }, + { + "name": "content_favorite_id", + "in": "query", + "description": "Filter on a content favorite id.", + "required": false, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title.", + "required": false, + "type": "string" + } ], "responses": { "200": { - "description": "Dashboard Filter", + "description": "dashboards", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/DashboardFilter" - } + "$ref": "#/definitions/DashboardLookml" } }, "400": { @@ -7714,37 +8211,28 @@ "x-looker-rate-limited": true } }, - "/dashboard_filters": { - "post": { + "/dashboards/lookml/{dashboard_id}": { + "get": { "tags": [ "Dashboard" ], - "operationId": "create_dashboard_filter", - "summary": "Create Dashboard Filter", - "description": "### Create a dashboard filter on the dashboard with a specific id.", + "operationId": "dashboard_lookml", + "summary": "Get lookml of a UDD", + "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Dashboard Filter", + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", "required": true, - "schema": { - "$ref": "#/definitions/CreateDashboardFilter" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, "type": "string" } ], "responses": { "200": { - "description": "Dashboard Filter", + "description": "json of dashboard", "schema": { - "$ref": "#/definitions/DashboardFilter" + "$ref": "#/definitions/DashboardLookml" } }, "400": { @@ -7759,18 +8247,6 @@ "$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": { @@ -7783,35 +8259,48 @@ "x-looker-rate-limited": true } }, - "/dashboard_layout_components/{dashboard_layout_component_id}": { - "get": { + "/dashboards/{dashboard_id}/move": { + "patch": { "tags": [ "Dashboard" ], - "operationId": "dashboard_layout_component", - "summary": "Get DashboardLayoutComponent", - "description": "### Get information about the dashboard elements with a specific id.", + "operationId": "move_dashboard", + "summary": "Move Dashboard", + "description": "### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", "parameters": [ { - "name": "dashboard_layout_component_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard layout component", + "description": "Dashboard id to move.", "required": true, "type": "string" }, { - "name": "fields", + "name": "folder_id", "in": "query", - "description": "Requested fields.", + "description": "Folder id to move to.", + "required": true, + "type": "string" + }, + { + "name": "project_name", + "in": "query", + "description": "LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "DashboardLayoutComponent", + "description": "Dashboard", "schema": { - "$ref": "#/definitions/DashboardLayoutComponent" + "$ref": "#/definitions/Dashboard" + } + }, + "201": { + "description": "dashboard", + "schema": { + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -7826,6 +8315,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -7836,44 +8331,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/dashboards/lookml": { + "post": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_layout_component", - "summary": "Update DashboardLayoutComponent", - "description": "### Update the dashboard element with a specific id.", + "operationId": "import_dashboard_from_lookml", + "summary": "Import Dashboard from LookML", + "description": "### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard.\n\nIf a dashboard exists with the YAML-defined \"preferred_slug\", the new dashboard will overwrite it. Otherwise, a new\ndashboard will be created. Note that when a dashboard is overwritten, alerts will not be maintained.\n\nIf a folder_id is specified: new dashboards will be placed in that folder, and overwritten dashboards will be moved to it\nIf the folder_id isn't specified: new dashboards will be placed in the caller's personal folder, and overwritten dashboards\nwill remain where they were\n\nLookML must contain valid LookML YAML code. It's recommended to use the LookML format returned\nfrom [dashboard_lookml()](#!/Dashboard/dashboard_lookml) as the input LookML (newlines replaced with \n).\n\nNote that the created dashboard is not linked to any LookML Dashboard,\ni.e. [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard) will not update dashboards created by this method.\n", "parameters": [ - { - "name": "dashboard_layout_component_id", - "in": "path", - "description": "Id of dashboard layout component", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "DashboardLayoutComponent", + "description": "DashboardLookML", "required": true, "schema": { - "$ref": "#/definitions/DashboardLayoutComponent" + "$ref": "#/definitions/DashboardLookml" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "DashboardLayoutComponent", + "description": "dashboard", "schema": { - "$ref": "#/definitions/DashboardLayoutComponent" + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -7888,6 +8371,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -7906,38 +8395,30 @@ "x-looker-rate-limited": true } }, - "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { - "get": { + "/dashboards/from_lookml": { + "post": { "tags": [ "Dashboard" ], - "operationId": "dashboard_layout_dashboard_layout_components", - "summary": "Get All DashboardLayoutComponents", - "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", + "operationId": "create_dashboard_from_lookml", + "summary": "Create Dashboard from LookML", + "description": "# DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml)\n", "parameters": [ { - "name": "dashboard_layout_id", - "in": "path", - "description": "Id of dashboard layout component", + "name": "body", + "in": "body", + "description": "DashboardLookML", "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" + "schema": { + "$ref": "#/definitions/DashboardLookml" + } } ], "responses": { "200": { - "description": "DashboardLayoutComponent", + "description": "dashboard", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/DashboardLayoutComponent" - } + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -7952,6 +8433,18 @@ "$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": { @@ -7964,35 +8457,41 @@ "x-looker-rate-limited": true } }, - "/dashboard_layouts/{dashboard_layout_id}": { - "get": { + "/dashboards/{dashboard_id}/copy": { + "post": { "tags": [ "Dashboard" ], - "operationId": "dashboard_layout", - "summary": "Get DashboardLayout", - "description": "### Get information about the dashboard layouts with a specific id.", + "operationId": "copy_dashboard", + "summary": "Copy Dashboard", + "description": "### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n", "parameters": [ { - "name": "dashboard_layout_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard layouts", + "description": "Dashboard id to copy.", "required": true, "type": "string" }, { - "name": "fields", + "name": "folder_id", "in": "query", - "description": "Requested fields.", + "description": "Folder id to copy to.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "DashboardLayout", + "description": "Dashboard", "schema": { - "$ref": "#/definitions/DashboardLayout" + "$ref": "#/definitions/Dashboard" + } + }, + "201": { + "description": "dashboard", + "schema": { + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -8007,6 +8506,18 @@ "$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": { @@ -8017,28 +8528,39 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/dashboards/{dashboard_id}/certification": { + "patch": { "tags": [ "Dashboard" ], - "operationId": "delete_dashboard_layout", - "summary": "Delete DashboardLayout", - "description": "### Delete a dashboard layout with a specific id.", + "operationId": "update_dashboard_certification", + "summary": "Update Dashboard Certification", + "description": "### Update dashboard certification\n", "parameters": [ { - "name": "dashboard_layout_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard layout", + "description": "Dashboard id to update certification.", "required": true, "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Certification Data", + "required": true, + "schema": { + "$ref": "#/definitions/Certification" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "dashboards", "schema": { - "type": "string" + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -8066,47 +8588,42 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/dashboards/lookml/{dashboard_id}/certification": { "patch": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_layout", - "summary": "Update DashboardLayout", - "description": "### Update the dashboard layout with a specific id.", + "operationId": "update_lookml_certification", + "summary": "Update LookML Dashboard Certification", + "description": "### Update LookML dashboard certification\n", "parameters": [ { - "name": "dashboard_layout_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard layout", + "description": "LookML Dashboard id to update certification.", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "DashboardLayout", + "description": "Certification Data", "required": true, "schema": { - "$ref": "#/definitions/DashboardLayout" + "$ref": "#/definitions/Certification" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "DashboardLayout", + "description": "dashboards", "schema": { - "$ref": "#/definitions/DashboardLayout" + "$ref": "#/definitions/Dashboard" } }, "400": { @@ -8134,42 +8651,77 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}/dashboard_layouts": { + "/dashboard_elements/search": { "get": { "tags": [ "Dashboard" ], - "operationId": "dashboard_dashboard_layouts", - "summary": "Get All DashboardLayouts", - "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", + "operationId": "search_dashboard_elements", + "summary": "Search Dashboard Elements", + "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { "name": "dashboard_id", - "in": "path", - "description": "Id of dashboard", - "required": true, + "in": "query", + "description": "Select elements that refer to a given dashboard id", + "required": false, + "type": "string" + }, + { + "name": "look_id", + "in": "query", + "description": "Select elements that refer to a given look id", + "required": false, + "type": "string" + }, + { + "name": "title", + "in": "query", + "description": "Match the title of element", + "required": false, "type": "string" }, + { + "name": "deleted", + "in": "query", + "description": "Select soft-deleted dashboard elements", + "required": false, + "type": "boolean" + }, { "name": "fields", "in": "query", "description": "Requested fields.", "required": false, "type": "string" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "type": "boolean" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by. Sortable fields: [:look_id, :dashboard_id, :deleted, :title]", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "DashboardLayout", + "description": "Dashboard elements", "schema": { "type": "array", "items": { - "$ref": "#/definitions/DashboardLayout" + "$ref": "#/definitions/DashboardElement" } } }, @@ -8197,23 +8749,21 @@ "x-looker-rate-limited": true } }, - "/dashboard_layouts": { - "post": { + "/dashboard_elements/{dashboard_element_id}": { + "get": { "tags": [ "Dashboard" ], - "operationId": "create_dashboard_layout", - "summary": "Create DashboardLayout", - "description": "### Create a dashboard layout on the dashboard with a specific id.", + "operationId": "dashboard_element", + "summary": "Get DashboardElement", + "description": "### Get information about the dashboard element with a specific id.", "parameters": [ { - "name": "body", - "in": "body", - "description": "DashboardLayout", + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element", "required": true, - "schema": { - "$ref": "#/definitions/DashboardLayout" - } + "type": "string" }, { "name": "fields", @@ -8225,9 +8775,9 @@ ], "responses": { "200": { - "description": "DashboardLayout", + "description": "DashboardElement", "schema": { - "$ref": "#/definitions/DashboardLayout" + "$ref": "#/definitions/DashboardElement" } }, "400": { @@ -8242,18 +8792,6 @@ "$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": { @@ -8264,28 +8802,26 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboard_filter_state/{guid}": { - "get": { + }, + "delete": { "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", + "operationId": "delete_dashboard_element", + "summary": "Delete DashboardElement", + "description": "### Delete a dashboard element with a specific id.", "parameters": [ { - "name": "guid", + "name": "dashboard_element_id", "in": "path", - "description": "GUID of the filter state", + "description": "Id of dashboard element", "required": true, "type": "string" } ], "responses": { - "200": { - "description": "JSON string of filter state", + "204": { + "description": "Successfully deleted.", "schema": { "type": "string" } @@ -8312,38 +8848,44 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboard_filter_state": { - "post": { + }, + "patch": { "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", + "operationId": "update_dashboard_element", + "summary": "Update DashboardElement", + "description": "### Update the dashboard element with a specific id.", "parameters": [ + { + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "JSON string of filter state", + "description": "DashboardElement", "required": true, "schema": { - "type": "string" + "$ref": "#/definitions/DashboardElement" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Dashboard Filter State", - "schema": { - "$ref": "#/definitions/Dashboard" - } - }, - "201": { - "description": "JSON with GUID", + "description": "DashboardElement", "schema": { - "type": "string" + "$ref": "#/definitions/DashboardElement" } }, "400": { @@ -8358,12 +8900,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -8382,30 +8918,38 @@ "x-looker-rate-limited": true } }, - "/data_actions": { - "post": { + "/dashboards/{dashboard_id}/dashboard_elements": { + "get": { "tags": [ - "DataAction" + "Dashboard" ], - "operationId": "perform_data_action", - "summary": "Send a Data Action", - "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", + "operationId": "dashboard_dashboard_elements", + "summary": "Get All DashboardElements", + "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", "parameters": [ { - "name": "body", - "in": "body", - "description": "Data Action Request", + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", "required": true, - "schema": { - "$ref": "#/definitions/DataActionRequest" - } + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Data Action Response", + "description": "DashboardElement", "schema": { - "$ref": "#/definitions/DataActionResponse" + "type": "array", + "items": { + "$ref": "#/definitions/DashboardElement" + } } }, "400": { @@ -8432,33 +8976,44 @@ "x-looker-rate-limited": true } }, - "/data_actions/form": { + "/dashboard_elements": { "post": { "tags": [ - "DataAction" + "Dashboard" ], - "operationId": "fetch_remote_data_action_form", - "summary": "Fetch Remote Data Action Form", - "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", + "operationId": "create_dashboard_element", + "summary": "Create DashboardElement", + "description": "### Create a dashboard element on the dashboard with a specific id.", "parameters": [ { "name": "body", "in": "body", - "description": "Data Action Request", + "description": "DashboardElement", "required": true, "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/definitions/DashboardElement" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "apply_filters", + "in": "query", + "description": "Apply relevant filters on dashboard to this tile", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Data Action Form", + "description": "DashboardElement", "schema": { - "$ref": "#/definitions/DataActionForm" + "$ref": "#/definitions/DashboardElement" } }, "400": { @@ -8473,6 +9028,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -8491,22 +9052,35 @@ "x-looker-rate-limited": true } }, - "/datagroups": { + "/dashboard_filters/{dashboard_filter_id}": { "get": { "tags": [ - "Datagroup" + "Dashboard" + ], + "operationId": "dashboard_filter", + "summary": "Get Dashboard Filter", + "description": "### Get information about the dashboard filters with a specific id.", + "parameters": [ + { + "name": "dashboard_filter_id", + "in": "path", + "description": "Id of dashboard filters", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } ], - "operationId": "all_datagroups", - "summary": "Get All Datagroups", - "description": "### Get information about all datagroups.\n", "responses": { "200": { - "description": "Datagroup", + "description": "Dashboard Filter", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Datagroup" - } + "$ref": "#/definitions/DashboardFilter" } }, "400": { @@ -8531,30 +9105,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/datagroups/{datagroup_id}": { - "get": { + }, + "delete": { "tags": [ - "Datagroup" + "Dashboard" ], - "operationId": "datagroup", - "summary": "Get Datagroup", - "description": "### Get information about a datagroup.\n", + "operationId": "delete_dashboard_filter", + "summary": "Delete Dashboard Filter", + "description": "### Delete a dashboard filter with a specific id.", "parameters": [ { - "name": "datagroup_id", + "name": "dashboard_filter_id", "in": "path", - "description": "ID of datagroup.", + "description": "Id of dashboard filter", "required": true, "type": "string" } ], "responses": { - "200": { - "description": "Datagroup", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/Datagroup" + "type": "string" } }, "400": { @@ -8582,34 +9154,41 @@ }, "patch": { "tags": [ - "Datagroup" + "Dashboard" ], - "operationId": "update_datagroup", - "summary": "Update Datagroup", - "description": "### Update a datagroup using the specified params.\n", + "operationId": "update_dashboard_filter", + "summary": "Update Dashboard Filter", + "description": "### Update the dashboard filter with a specific id.", "parameters": [ { - "name": "datagroup_id", + "name": "dashboard_filter_id", "in": "path", - "description": "ID of datagroup.", + "description": "Id of dashboard filter", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Datagroup", + "description": "Dashboard Filter", "required": true, "schema": { - "$ref": "#/definitions/Datagroup" + "$ref": "#/definitions/DashboardFilter" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Datagroup", + "description": "Dashboard Filter", "schema": { - "$ref": "#/definitions/Datagroup" + "$ref": "#/definitions/DashboardFilter" } }, "400": { @@ -8624,12 +9203,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -8648,15 +9221,22 @@ "x-looker-rate-limited": true } }, - "/connections": { + "/dashboards/{dashboard_id}/dashboard_filters": { "get": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "all_connections", - "summary": "Get All Connections", - "description": "### Get information about all connections.\n", + "operationId": "dashboard_dashboard_filters", + "summary": "Get All Dashboard Filters", + "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", @@ -8667,11 +9247,11 @@ ], "responses": { "200": { - "description": "Connection", + "description": "Dashboard Filter", "schema": { "type": "array", "items": { - "$ref": "#/definitions/DBConnection" + "$ref": "#/definitions/DashboardFilter" } } }, @@ -8697,30 +9277,39 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/dashboard_filters": { "post": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "create_connection", - "summary": "Create Connection", - "description": "### Create a connection using the specified configuration.\n", + "operationId": "create_dashboard_filter", + "summary": "Create Dashboard Filter", + "description": "### Create a dashboard filter on the dashboard with a specific id.", "parameters": [ { "name": "body", "in": "body", - "description": "Connection", + "description": "Dashboard Filter", "required": true, "schema": { - "$ref": "#/definitions/DBConnection" + "$ref": "#/definitions/CreateDashboardFilter" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Connection", + "description": "Dashboard Filter", "schema": { - "$ref": "#/definitions/DBConnection" + "$ref": "#/definitions/DashboardFilter" } }, "400": { @@ -8729,12 +9318,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -8765,19 +9348,19 @@ "x-looker-rate-limited": true } }, - "/connections/{connection_name}": { + "/dashboard_layout_components/{dashboard_layout_component_id}": { "get": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "connection", - "summary": "Get Connection", - "description": "### Get information about a connection.\n", + "operationId": "dashboard_layout_component", + "summary": "Get DashboardLayoutComponent", + "description": "### Get information about the dashboard elements with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_component_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layout component", "required": true, "type": "string" }, @@ -8791,9 +9374,9 @@ ], "responses": { "200": { - "description": "Connection", + "description": "DashboardLayoutComponent", "schema": { - "$ref": "#/definitions/DBConnection" + "$ref": "#/definitions/DashboardLayoutComponent" } }, "400": { @@ -8821,34 +9404,41 @@ }, "patch": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "update_connection", - "summary": "Update Connection", - "description": "### Update a connection using the specified configuration.\n", + "operationId": "update_dashboard_layout_component", + "summary": "Update DashboardLayoutComponent", + "description": "### Update the dashboard element with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_component_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layout component", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Connection", + "description": "DashboardLayoutComponent", "required": true, "schema": { - "$ref": "#/definitions/DBConnection" + "$ref": "#/definitions/DashboardLayoutComponent" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Connection", + "description": "DashboardLayoutComponent", "schema": { - "$ref": "#/definitions/DBConnection" + "$ref": "#/definitions/DashboardLayoutComponent" } }, "400": { @@ -8857,24 +9447,12 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "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": { @@ -8891,28 +9469,40 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { + "get": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "delete_connection", - "summary": "Delete Connection", - "description": "### Delete a connection.\n", + "operationId": "dashboard_layout_dashboard_layout_components", + "summary": "Get All DashboardLayoutComponents", + "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layout component", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "DashboardLayoutComponent", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/DashboardLayoutComponent" + } } }, "400": { @@ -8939,35 +9529,35 @@ "x-looker-rate-limited": true } }, - "/connections/{connection_name}/connection_override/{override_context}": { - "delete": { + "/dashboard_layouts/{dashboard_layout_id}": { + "get": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "delete_connection_override", - "summary": "Delete Connection Override", - "description": "### Delete a connection override.\n", + "operationId": "dashboard_layout", + "summary": "Get DashboardLayout", + "description": "### Get information about the dashboard layouts with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layouts", "required": true, "type": "string" }, { - "name": "override_context", - "in": "path", - "description": "Context of connection override", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "DashboardLayout", "schema": { - "type": "string" + "$ref": "#/definitions/DashboardLayout" } }, "400": { @@ -8982,12 +9572,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -8998,44 +9582,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/connections/{connection_name}/test": { - "put": { + }, + "delete": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "test_connection", - "summary": "Test Connection", - "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", + "operationId": "delete_dashboard_layout", + "summary": "Delete DashboardLayout", + "description": "### Delete a dashboard layout with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layout", "required": true, "type": "string" - }, - { - "name": "tests", - "in": "query", - "description": "Array of names of tests to run", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv" } ], "responses": { - "200": { - "description": "Test results", + "204": { + "description": "Successfully deleted.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/DBConnectionTestResult" - } + "type": "string" } }, "400": { @@ -9066,46 +9634,44 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/connections/test": { - "put": { + }, + "patch": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "test_connection_config", - "summary": "Test Connection Configuration", - "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", + "operationId": "update_dashboard_layout", + "summary": "Update DashboardLayout", + "description": "### Update the dashboard layout with a specific id.", "parameters": [ + { + "name": "dashboard_layout_id", + "in": "path", + "description": "Id of dashboard layout", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Connection", + "description": "DashboardLayout", "required": true, "schema": { - "$ref": "#/definitions/DBConnection" + "$ref": "#/definitions/DashboardLayout" } }, { - "name": "tests", + "name": "fields", "in": "query", - "description": "Array of names of tests to run", + "description": "Requested fields.", "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv" + "type": "string" } ], "responses": { "200": { - "description": "Test results", + "description": "DashboardLayout", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/DBConnectionTestResult" - } + "$ref": "#/definitions/DashboardLayout" } }, "400": { @@ -9138,40 +9704,40 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/manifest/lock_all": { - "post": { + "/dashboards/{dashboard_id}/dashboard_layouts": { + "get": { "tags": [ - "Project" + "Dashboard" ], - "operationId": "lock_all", - "summary": "Lock All", - "description": " ### Generate Lockfile for All LookML Dependencies\n\n Git must have been configured, must be in dev mode and deploy permission required\n\n Install_all is a two step process\n 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref.\n 2. The project will then write out a lockfile including each remote_dependency with its resolved ref.\n\n", + "operationId": "dashboard_dashboard_layouts", + "summary": "Get All DashboardLayouts", + "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", "parameters": [ { - "name": "project_id", + "name": "dashboard_id", "in": "path", - "description": "Id of project", + "description": "Id of dashboard", "required": true, "type": "string" }, { "name": "fields", "in": "query", - "description": "Requested fields", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Project Dependency Manager", + "description": "DashboardLayout", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/DashboardLayout" + } } }, - "204": { - "description": "Returns 204 if dependencies successfully installed, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "schema": { @@ -9184,12 +9750,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -9202,42 +9762,37 @@ "x-looker-rate-limited": true } }, - "/derived_table/graph/model/{model}": { - "get": { + "/dashboard_layouts": { + "post": { "tags": [ - "DerivedTable" + "Dashboard" ], - "operationId": "graph_derived_tables_for_model", - "summary": "Get Derived Table graph for model", - "description": "### Discover information about derived tables\n", + "operationId": "create_dashboard_layout", + "summary": "Create DashboardLayout", + "description": "### Create a dashboard layout on the dashboard with a specific id.", "parameters": [ { - "name": "model", - "in": "path", - "description": "The name of the Lookml model.", + "name": "body", + "in": "body", + "description": "DashboardLayout", "required": true, - "type": "string" - }, - { - "name": "format", - "in": "query", - "description": "The format of the graph. Valid values are [dot]. Default is `dot`", - "required": false, - "type": "string" + "schema": { + "$ref": "#/definitions/DashboardLayout" + } }, { - "name": "color", + "name": "fields", "in": "query", - "description": "Color denoting the build status of the graph. Grey = not built, green = built, yellow = building, red = error.", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Derived Table", + "description": "DashboardLayout", "schema": { - "$ref": "#/definitions/DependencyGraph" + "$ref": "#/definitions/DashboardLayout" } }, "400": { @@ -9252,6 +9807,18 @@ "$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": { @@ -9264,42 +9831,28 @@ "x-looker-rate-limited": true } }, - "/derived_table/graph/view/{view}": { + "/dashboard_filter_state/{guid}": { "get": { "tags": [ - "DerivedTable" + "Dashboard" ], - "operationId": "graph_derived_tables_for_view", - "summary": "Get subgraph of derived table and dependencies", - "description": "### Get the subgraph representing this derived table and its dependencies.\n", + "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": "view", + "name": "guid", "in": "path", - "description": "The derived table's view name.", + "description": "GUID of the filter state", "required": true, "type": "string" - }, - { - "name": "models", - "in": "query", - "description": "The models where this derived table is defined.", - "required": false, - "type": "string" - }, - { - "name": "workspace", - "in": "query", - "description": "The model directory to look in, either `dev` or `production`.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Graph of the derived table component, represented in the DOT language.", + "description": "JSON string of filter state", "schema": { - "$ref": "#/definitions/DependencyGraph" + "type": "string" } }, "400": { @@ -9326,63 +9879,36 @@ "x-looker-rate-limited": true } }, - "/derived_table/{model_name}/{view_name}/start": { - "get": { + "/dashboard_filter_state": { + "post": { "tags": [ - "DerivedTable" + "Dashboard" ], - "operationId": "start_pdt_build", - "summary": "Start a PDT materialization", - "description": "Enqueue materialization for a PDT with the given model name and view name", + "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": "model_name", - "in": "path", - "description": "The model of the PDT to start building.", - "required": true, - "type": "string" - }, - { - "name": "view_name", - "in": "path", - "description": "The view name of the PDT to start building.", + "name": "body", + "in": "body", + "description": "JSON string of filter state", "required": true, - "type": "string" - }, - { - "name": "force_rebuild", - "in": "query", - "description": "Force rebuild of required dependent PDTs, even if they are already materialized.", - "required": false, - "type": "string" - }, - { - "name": "force_full_incremental", - "in": "query", - "description": "Force involved incremental PDTs to fully re-materialize.", - "required": false, - "type": "string" - }, - { - "name": "workspace", - "in": "query", - "description": "Workspace in which to materialize selected PDT ('dev' or default 'production').", - "required": false, - "type": "string" - }, - { - "name": "source", - "in": "query", - "description": "The source of this request.", - "required": false, - "type": "string" + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Derived Table", + "description": "Dashboard Filter State", "schema": { - "$ref": "#/definitions/MaterializePDT" + "$ref": "#/definitions/Dashboard" + } + }, + "201": { + "description": "JSON with GUID", + "schema": { + "type": "string" } }, "400": { @@ -9397,6 +9923,18 @@ "$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": { @@ -9409,28 +9947,30 @@ "x-looker-rate-limited": true } }, - "/derived_table/{materialization_id}/status": { - "get": { + "/data_actions": { + "post": { "tags": [ - "DerivedTable" + "DataAction" ], - "operationId": "check_pdt_build", - "summary": "Check status of a PDT materialization", - "description": "Check status of PDT materialization", + "operationId": "perform_data_action", + "summary": "Send a Data Action", + "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", "parameters": [ { - "name": "materialization_id", - "in": "path", - "description": "The materialization id to check status for.", + "name": "body", + "in": "body", + "description": "Data Action Request", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/DataActionRequest" + } } ], "responses": { "200": { - "description": "Derived Table", + "description": "Data Action Response", "schema": { - "$ref": "#/definitions/MaterializePDT" + "$ref": "#/definitions/DataActionResponse" } }, "400": { @@ -9457,35 +9997,33 @@ "x-looker-rate-limited": true } }, - "/derived_table/{materialization_id}/stop": { - "get": { + "/data_actions/form": { + "post": { "tags": [ - "DerivedTable" + "DataAction" ], - "operationId": "stop_pdt_build", - "summary": "Stop a PDT materialization", - "description": "Stop a PDT materialization", + "operationId": "fetch_remote_data_action_form", + "summary": "Fetch Remote Data Action Form", + "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", "parameters": [ { - "name": "materialization_id", - "in": "path", - "description": "The materialization id to stop.", + "name": "body", + "in": "body", + "description": "Data Action Request", "required": true, - "type": "string" - }, - { - "name": "source", - "in": "query", - "description": "The source of this request.", - "required": false, - "type": "string" + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Derived Table", + "description": "Data Action Form", "schema": { - "$ref": "#/definitions/MaterializePDT" + "$ref": "#/definitions/DataActionForm" } }, "400": { @@ -9500,6 +10038,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -9512,30 +10056,21 @@ "x-looker-rate-limited": true } }, - "/dialect_info": { + "/datagroups": { "get": { "tags": [ - "Connection" - ], - "operationId": "all_dialect_infos", - "summary": "Get All Dialect Infos", - "description": "### Get information about all dialects.\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - } + "Datagroup" ], + "operationId": "all_datagroups", + "summary": "Get All Datagroups", + "description": "### Get information about all datagroups.\n", "responses": { "200": { - "description": "Dialect Info", + "description": "Datagroup", "schema": { "type": "array", "items": { - "$ref": "#/definitions/DialectInfo" + "$ref": "#/definitions/Datagroup" } } }, @@ -9563,19 +10098,28 @@ "x-looker-rate-limited": true } }, - "/digest_emails_enabled": { + "/datagroups/{datagroup_id}": { "get": { "tags": [ - "Config" + "Datagroup" + ], + "operationId": "datagroup", + "summary": "Get Datagroup", + "description": "### Get information about a datagroup.\n", + "parameters": [ + { + "name": "datagroup_id", + "in": "path", + "description": "ID of datagroup.", + "required": true, + "type": "string" + } ], - "operationId": "digest_emails_enabled", - "summary": "Get Digest_emails", - "description": "### Retrieve the value for whether or not digest emails is enabled\n", "responses": { "200": { - "description": "Digest_emails", + "description": "Datagroup", "schema": { - "$ref": "#/definitions/DigestEmails" + "$ref": "#/definitions/Datagroup" } }, "400": { @@ -9603,27 +10147,34 @@ }, "patch": { "tags": [ - "Config" + "Datagroup" ], - "operationId": "update_digest_emails_enabled", - "summary": "Update Digest_emails", - "description": "### Update the setting for enabling/disabling digest emails\n", + "operationId": "update_datagroup", + "summary": "Update Datagroup", + "description": "### Update a datagroup using the specified params.\n", "parameters": [ + { + "name": "datagroup_id", + "in": "path", + "description": "ID of datagroup.", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Digest_emails", + "description": "Datagroup", "required": true, "schema": { - "$ref": "#/definitions/DigestEmails" + "$ref": "#/definitions/Datagroup" } } ], "responses": { "200": { - "description": "Digest_emails", + "description": "Datagroup", "schema": { - "$ref": "#/definitions/DigestEmails" + "$ref": "#/definitions/Datagroup" } }, "400": { @@ -9638,6 +10189,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -9656,58 +10213,31 @@ "x-looker-rate-limited": true } }, - "/digest_email_send": { - "post": { + "/connections": { + "get": { "tags": [ - "Config" + "Connection" ], - "operationId": "create_digest_email_send", - "summary": "Deliver digest email contents", - "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", - "responses": { - "200": { - "description": "Status of generating and sending the data", - "schema": { - "$ref": "#/definitions/DigestEmailSend" - } - }, - "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" - } + "operationId": "all_connections", + "summary": "Get All Connections", + "description": "### Get information about all connections.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "none", - "x-looker-rate-limited": true - } - }, - "/public_egress_ip_addresses": { - "get": { - "tags": [ - "Config" ], - "operationId": "public_egress_ip_addresses", - "summary": "Public Egress IP Addresses", - "description": "### Get Egress IP Addresses\n\nReturns the list of public egress IP Addresses for a hosted customer's instance\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Public Egress IP Addresses", + "description": "Connection", "schema": { - "$ref": "#/definitions/EgressIpAddresses" + "type": "array", + "items": { + "$ref": "#/definitions/DBConnection" + } } }, "400": { @@ -9716,12 +10246,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -9738,32 +10262,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/embed_config/secrets": { + }, "post": { "tags": [ - "Auth" + "Connection" ], - "operationId": "create_embed_secret", - "summary": "Create Embed Secret", - "description": "### Create an embed secret using the specified information.\n\nThe value of the `secret` field will be set by Looker and returned.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "create_connection", + "summary": "Create Connection", + "description": "### Create a connection using the specified configuration.\n", "parameters": [ { "name": "body", "in": "body", - "description": "embed secret", - "required": false, + "description": "Connection", + "required": true, "schema": { - "$ref": "#/definitions/EmbedSecret" + "$ref": "#/definitions/DBConnection" } } ], "responses": { "200": { - "description": "embed secret", + "description": "Connection", "schema": { - "$ref": "#/definitions/EmbedSecret" + "$ref": "#/definitions/DBConnection" } }, "400": { @@ -9808,28 +10330,35 @@ "x-looker-rate-limited": true } }, - "/embed_config/secrets/{embed_secret_id}": { - "delete": { + "/connections/{connection_name}": { + "get": { "tags": [ - "Auth" + "Connection" ], - "operationId": "delete_embed_secret", - "summary": "Delete Embed Secret", - "description": "### Delete an embed secret.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "connection", + "summary": "Get Connection", + "description": "### Get information about a connection.\n", "parameters": [ { - "name": "embed_secret_id", + "name": "connection_name", "in": "path", - "description": "Id of Embed Secret", + "description": "Name of connection", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Connection", "schema": { - "type": "string" + "$ref": "#/definitions/DBConnection" } }, "400": { @@ -9838,12 +10367,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -9860,32 +10383,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/embed/sso_url": { - "post": { + }, + "patch": { "tags": [ - "Auth" + "Connection" ], - "operationId": "create_sso_embed_url", - "summary": "Create Signed Embed Url", - "description": "### Create Signed Embed URL\n\nCreates a signed embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to the returned URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed embed URL can only be **used once**. After the URL has been used to request a page from the\nLooker server, it is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this `target_url` is to navigate to the desired Looker page in your web browser and use the \"Get embed URL\" menu option\nto copy it to your clipboard and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (`group_ids` property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the `group_ids` property, or **both** the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the `group_ids`, `models`, and `permissions` properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nembed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nBecause of this, **these parameters are not validated** when the API call is made.\n\nThe [Get Embed Url](https://docs.cloud.google.com/looker/docs/r/get-signed-url) dialog can be used to determine and validate the correct permissions for signing an embed url.\nThis dialog also provides the SDK syntax for the API call to make. Alternatively, you can copy the signed URL into the Embed URI Validator text box\nin `/admin/embed` to diagnose potential problems.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the most recent active signing secret. If there is no active secret for signing embed urls,\na default secret will be created. This default secret is encrypted using HMAC/SHA-256.\n\nThe `embed_domain` parameter is optional. If specified and valid, the domain will be added to the embed domain allowlist if it is missing.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "update_connection", + "summary": "Update Connection", + "description": "### Update a connection using the specified configuration.\n", "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Signed Embed URL parameters", + "description": "Connection", "required": true, "schema": { - "$ref": "#/definitions/EmbedSsoParams" + "$ref": "#/definitions/DBConnection" } } ], "responses": { "200": { - "description": "Signed Embed URL", + "description": "Connection", "schema": { - "$ref": "#/definitions/EmbedUrlResponse" + "$ref": "#/definitions/DBConnection" } }, "400": { @@ -9926,34 +10454,30 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/embed/token_url/me": { - "post": { + }, + "delete": { "tags": [ - "Auth" + "Connection" ], - "operationId": "create_embed_url_as_me", - "summary": "Create Embed URL", - "description": "### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://docs.cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of\nlogging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\n", + "operationId": "delete_connection", + "summary": "Delete Connection", + "description": "### Delete a connection.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Embed parameters", + "name": "connection_name", + "in": "path", + "description": "Name of connection", "required": true, - "schema": { - "$ref": "#/definitions/EmbedParams" - } + "type": "string" } ], "responses": { - "200": { - "description": "Embed URL", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/EmbedUrlResponse" + "type": "string" } }, "400": { @@ -9962,30 +10486,12 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "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": { @@ -9994,32 +10500,39 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/embed/sso/validate": { - "get": { + "/connections/{connection_name}/connection_override/{override_context}": { + "delete": { "tags": [ - "Auth" + "Connection" ], - "operationId": "validate_embed_url", - "summary": "Get Embed URL Validation", - "description": "### Validate a Signed Embed URL\n\n", + "operationId": "delete_connection_override", + "summary": "Delete Connection Override", + "description": "### Delete a connection override.\n", "parameters": [ { - "name": "url", - "in": "query", - "description": "URL to validate", - "required": false, + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "type": "string" + }, + { + "name": "override_context", + "in": "path", + "description": "Context of connection override", + "required": true, "type": "string" } ], "responses": { - "200": { - "description": "Embed URL Validation", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/EmbedUrlResponse" + "type": "string" } }, "400": { @@ -10028,12 +10541,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -10053,35 +10560,47 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/embed/cookieless_session/acquire": { - "post": { + "/connections/{connection_name}/test": { + "put": { "tags": [ - "Auth" + "Connection" ], - "operationId": "acquire_embed_cookieless_session", - "summary": "Create Acquire cookieless embed session", - "description": "### Acquire a cookieless embed session.\n\nThe acquire session endpoint negates the need for signing the embed url and passing it as a parameter\nto the embed login. This endpoint accepts an embed user definition and creates or updates it. This is\nsimilar behavior to the embed SSO login as they both can create and update embed user data.\n\nThe endpoint also accepts an optional `session_reference_token`. If present and the session has not expired\nand the credentials match the credentials for the embed session, a new authentication token will be\ngenerated. This allows the embed session to attach a new embedded IFRAME to the embed session. Note that\nthe session is NOT extended in this scenario. In other words the session_length parameter is ignored.\n\n**IMPORTANT:** If the `session_reference_token` is provided and the session has NOT expired, the embed user\nis NOT updated. This is done for performance reasons and to support the embed SSO usecase where the\nfirst IFRAME created on a page uses a signed url and subsequently created IFRAMEs do not.\n\nIf the `session_reference_token` is provided but the session has expired, the token will be ignored and a\nnew embed session will be created. Note that the embed user definition will be updated in this scenario.\n\nIf the credentials do not match the credentials associated with an existing session_reference_token, a\n404 will be returned.\n\nThe endpoint returns the following:\n- Authentication token - a token that is passed to `/embed/login` endpoint that creates or attaches to the\n embed session. This token can be used once and has a lifetime of 30 seconds.\n- Session reference token - a token that lives for the length of the session. This token is used to\n generate new api and navigation tokens OR create new embed IFRAMEs.\n- Api token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into the\n iframe.\n- Navigation token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into\n the iframe.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "test_connection", + "summary": "Test Connection", + "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Embed user details", + "name": "connection_name", + "in": "path", + "description": "Name of connection", "required": true, - "schema": { - "$ref": "#/definitions/EmbedCookielessSessionAcquire" - } + "type": "string" + }, + { + "name": "tests", + "in": "query", + "description": "Array of names of tests to run", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" } ], "responses": { "200": { - "description": "Embed cookieless acquire session response", + "description": "Test results", "schema": { - "$ref": "#/definitions/EmbedCookielessSessionAcquireResponse" + "type": "array", + "items": { + "$ref": "#/definitions/DBConnectionTestResult" + } } }, "400": { @@ -10090,24 +10609,12 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "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": { @@ -10122,32 +10629,48 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/embed/cookieless_session/{session_reference_token}": { - "delete": { + "/connections/test": { + "put": { "tags": [ - "Auth" + "Connection" ], - "operationId": "delete_embed_cookieless_session", - "summary": "Delete cookieless embed session", - "description": "### Delete cookieless embed session\n\nThis will delete the session associated with the given session reference token. Calling this endpoint will result\nin the session and session reference data being cleared from the system. This endpoint can be used to log an embed\nuser out of the Looker instance.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "test_connection_config", + "summary": "Test Connection Configuration", + "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", "parameters": [ { - "name": "session_reference_token", - "in": "path", - "description": "Embed session reference token", + "name": "body", + "in": "body", + "description": "Connection", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/DBConnection" + } + }, + { + "name": "tests", + "in": "query", + "description": "Array of names of tests to run", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Test results", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/DBConnectionTestResult" + } } }, "400": { @@ -10156,12 +10679,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -10182,48 +10699,50 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/embed/cookieless_session/generate_tokens": { - "put": { + "/projects/{project_id}/manifest/lock_all": { + "post": { "tags": [ - "Auth" + "Project" ], - "operationId": "generate_tokens_for_cookieless_session", - "summary": "Generate tokens for cookieless embed session", - "description": "### Generate api and navigation tokens for a cookieless embed session\n\nThe generate tokens endpoint is used to create new tokens of type:\n- Api token.\n- Navigation token.\nThe generate tokens endpoint should be called every time the Looker client asks for a token (except for the\nfirst time when the tokens returned by the acquire_session endpoint should be used).\n\n#### Embed session expiration handling\n\nThis endpoint does NOT return an error when the embed session expires. This is to simplify processing\nin the caller as errors can happen for non session expiration reasons. Instead the endpoint returns\nthe session time to live in the `session_reference_token_ttl` response property. If this property\ncontains a zero, the embed session has expired.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "lock_all", + "summary": "Lock All", + "description": " ### Generate Lockfile for All LookML Dependencies\n\n Git must have been configured, must be in dev mode and deploy permission required\n\n Install_all is a two step process\n 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref.\n 2. The project will then write out a lockfile including each remote_dependency with its resolved ref.\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Embed session reference token", + "name": "project_id", + "in": "path", + "description": "Id of project", "required": true, - "schema": { - "$ref": "#/definitions/EmbedCookielessSessionGenerateTokens" - } + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Generated api and navigations tokens for the cookieless embed session.", + "description": "Project Dependency Manager", "schema": { - "$ref": "#/definitions/EmbedCookielessSessionGenerateTokensResponse" + "type": "string" } }, + "204": { + "description": "Returns 204 if dependencies successfully installed, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -10244,42 +10763,46 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/external_oauth_applications": { + "/derived_table/graph/model/{model}": { "get": { "tags": [ - "Connection" + "DerivedTable" ], - "operationId": "all_external_oauth_applications", - "summary": "Get All External OAuth Applications", - "description": "### Get all External OAuth Applications.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "operationId": "graph_derived_tables_for_model", + "summary": "Get Derived Table graph for model", + "description": "### Discover information about derived tables\n", "parameters": [ { - "name": "name", + "name": "model", + "in": "path", + "description": "The name of the Lookml model.", + "required": true, + "type": "string" + }, + { + "name": "format", "in": "query", - "description": "Application name", + "description": "The format of the graph. Valid values are [dot]. Default is `dot`", "required": false, "type": "string" }, { - "name": "client_id", + "name": "color", "in": "query", - "description": "Application Client ID", + "description": "Color denoting the build status of the graph. Grey = not built, green = built, yellow = building, red = error.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "External OAuth Application", + "description": "Derived Table", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ExternalOauthApplication" - } + "$ref": "#/definitions/DependencyGraph" } }, "400": { @@ -10301,33 +10824,47 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/derived_table/graph/view/{view}": { + "get": { "tags": [ - "Connection" + "DerivedTable" ], - "operationId": "create_external_oauth_application", - "summary": "Create External OAuth Application", - "description": "### Create an OAuth Application using the specified configuration.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "operationId": "graph_derived_tables_for_view", + "summary": "Get subgraph of derived table and dependencies", + "description": "### Get the subgraph representing this derived table and its dependencies.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "External OAuth Application", + "name": "view", + "in": "path", + "description": "The derived table's view name.", "required": true, - "schema": { - "$ref": "#/definitions/ExternalOauthApplication" - } + "type": "string" + }, + { + "name": "models", + "in": "query", + "description": "The models where this derived table is defined.", + "required": false, + "type": "string" + }, + { + "name": "workspace", + "in": "query", + "description": "The model directory to look in, either `dev` or `production`.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "External OAuth Application", + "description": "Graph of the derived table component, represented in the DOT language.", "schema": { - "$ref": "#/definitions/ExternalOauthApplication" + "$ref": "#/definitions/DependencyGraph" } }, "400": { @@ -10342,18 +10879,6 @@ "$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": { @@ -10361,94 +10886,68 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/external_oauth_applications/{client_id}": { - "patch": { + "/derived_table/{model_name}/{view_name}/start": { + "get": { "tags": [ - "Connection" + "DerivedTable" ], - "operationId": "update_external_oauth_application", - "summary": "Update External OAuth Application", - "description": "### Update an OAuth Application's client secret.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "operationId": "start_pdt_build", + "summary": "Start a PDT materialization", + "description": "Enqueue materialization for a PDT with the given model name and view name", "parameters": [ { - "name": "client_id", + "name": "model_name", "in": "path", - "description": "The client ID of the OAuth App to update", + "description": "The model of the PDT to start building.", "required": true, "type": "string" }, { - "name": "body", - "in": "body", - "description": "External OAuth Application", + "name": "view_name", + "in": "path", + "description": "The view name of the PDT to start building.", "required": true, - "schema": { - "$ref": "#/definitions/ExternalOauthApplication" - } - } - ], - "responses": { - "200": { - "description": "External OAuth Application", - "schema": { - "$ref": "#/definitions/ExternalOauthApplication" - } + "type": "string" }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "force_rebuild", + "in": "query", + "description": "Force rebuild of required dependent PDTs, even if they are already materialized.", + "required": false, + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "force_full_incremental", + "in": "query", + "description": "Force involved incremental PDTs to fully re-materialize.", + "required": false, + "type": "string" }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } + { + "name": "workspace", + "in": "query", + "description": "Workspace in which to materialize selected PDT ('dev' or default 'production').", + "required": false, + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "beta", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "delete": { - "tags": [ - "Connection" - ], - "operationId": "delete_external_oauth_application", - "summary": "Delete External OAuth Application", - "description": "### Delete an OAuth Application.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", - "parameters": [ { - "name": "client_id", - "in": "path", - "description": "The client ID of the OAuth App to delete", - "required": true, + "name": "source", + "in": "query", + "description": "The source of this request.", + "required": false, "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Derived Table", "schema": { - "type": "string" + "$ref": "#/definitions/MaterializePDT" } }, "400": { @@ -10470,35 +10969,33 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/external_oauth_applications/user_state": { - "post": { + "/derived_table/{materialization_id}/status": { + "get": { "tags": [ - "Connection" + "DerivedTable" ], - "operationId": "create_oauth_application_user_state", - "summary": "Create Create OAuth user state.", - "description": "### Create OAuth User state.\n", + "operationId": "check_pdt_build", + "summary": "Check status of a PDT materialization", + "description": "Check status of PDT materialization", "parameters": [ { - "name": "body", - "in": "body", - "description": "Create OAuth user state.", + "name": "materialization_id", + "in": "path", + "description": "The materialization id to check status for.", "required": true, - "schema": { - "$ref": "#/definitions/CreateOAuthApplicationUserStateRequest" - } + "type": "string" } ], "responses": { "200": { - "description": "Created user state", + "description": "Derived Table", "schema": { - "$ref": "#/definitions/CreateOAuthApplicationUserStateResponse" + "$ref": "#/definitions/MaterializePDT" } }, "400": { @@ -10513,18 +11010,6 @@ "$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": { @@ -10532,55 +11017,48 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/conversational_analytics/chat": { - "post": { + "/derived_table/{materialization_id}/stop": { + "get": { "tags": [ - "ConversationalAnalytics" + "DerivedTable" ], - "operationId": "conversational_analytics_chat", - "summary": "Chat", - "description": "## Takes the latest conversation context (ID and a user message) and\n## returns a list of newly generated system messages.\n", + "operationId": "stop_pdt_build", + "summary": "Stop a PDT materialization", + "description": "Stop a PDT materialization", "parameters": [ { - "name": "body", - "in": "body", - "description": "Conversation context necessary for generating new messages.", + "name": "materialization_id", + "in": "path", + "description": "The materialization id to stop.", "required": true, - "schema": { - "$ref": "#/definitions/ConversationalAnalyticsChatRequest" - } + "type": "string" + }, + { + "name": "source", + "in": "query", + "description": "The source of this request.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "A list of message objects generated in response to the user's input.", + "description": "Derived Table", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ChatMessage" - } + "$ref": "#/definitions/MaterializePDT" } }, - "202": { - "description": "Accepted" - }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -10592,43 +11070,37 @@ "schema": { "$ref": "#/definitions/Error" } - }, - "500": { - "description": "Server Error", - "schema": { - "$ref": "#/definitions/Error" - } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_branches": { + "/dialect_info": { "get": { "tags": [ - "Project" + "Connection" ], - "operationId": "all_git_branches", - "summary": "Get All Git Branches", - "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", + "operationId": "all_dialect_infos", + "summary": "Get All Dialect Infos", + "description": "### Get information about all dialects.\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "Git Branch", + "description": "Dialect Info", "schema": { "type": "array", "items": { - "$ref": "#/definitions/GitBranch" + "$ref": "#/definitions/DialectInfo" } } }, @@ -10656,28 +11128,19 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_branch": { + "/digest_emails_enabled": { "get": { "tags": [ - "Project" - ], - "operationId": "git_branch", - "summary": "Get Active Git Branch", - "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - } + "Config" ], + "operationId": "digest_emails_enabled", + "summary": "Get Digest_emails", + "description": "### Retrieve the value for whether or not digest emails is enabled\n", "responses": { "200": { - "description": "Git Branch", + "description": "Digest_emails", "schema": { - "$ref": "#/definitions/GitBranch" + "$ref": "#/definitions/DigestEmails" } }, "400": { @@ -10703,36 +11166,29 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "patch": { "tags": [ - "Project" + "Config" ], - "operationId": "create_git_branch", - "summary": "Checkout New Git Branch", - "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", + "operationId": "update_digest_emails_enabled", + "summary": "Update Digest_emails", + "description": "### Update the setting for enabling/disabling digest emails\n", "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "Git Branch", + "description": "Digest_emails", "required": true, "schema": { - "$ref": "#/definitions/GitBranch" + "$ref": "#/definitions/DigestEmails" } } ], "responses": { "200": { - "description": "Git Branch", + "description": "Digest_emails", "schema": { - "$ref": "#/definitions/GitBranch" + "$ref": "#/definitions/DigestEmails" } }, "400": { @@ -10747,12 +11203,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -10769,37 +11219,21 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/digest_email_send": { + "post": { "tags": [ - "Project" - ], - "operationId": "update_git_branch", - "summary": "Update Project Git Branch", - "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Git Branch", - "required": true, - "schema": { - "$ref": "#/definitions/GitBranch" - } - } + "Config" ], + "operationId": "create_digest_email_send", + "summary": "Deliver digest email contents", + "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", "responses": { "200": { - "description": "Git Branch", + "description": "Status of generating and sending the data", "schema": { - "$ref": "#/definitions/GitBranch" + "$ref": "#/definitions/DigestEmailSend" } }, "400": { @@ -10814,12 +11248,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -10828,39 +11256,79 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "none", "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_branch/{branch_name}": { + "/public_egress_ip_addresses": { "get": { "tags": [ - "Project" + "Config" ], - "operationId": "find_git_branch", - "summary": "Find a Git Branch", - "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "type": "string" + "operationId": "public_egress_ip_addresses", + "summary": "Public Egress IP Addresses", + "description": "### Get Egress IP Addresses\n\nReturns the list of public egress IP Addresses for a hosted customer's instance\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "responses": { + "200": { + "description": "Public Egress IP Addresses", + "schema": { + "$ref": "#/definitions/EgressIpAddresses" + } + }, + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/embed_config/secrets": { + "post": { + "tags": [ + "Auth" + ], + "operationId": "create_embed_secret", + "summary": "Create Embed Secret", + "description": "### Create an embed secret using the specified information.\n\nThe value of the `secret` field will be set by Looker and returned.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "parameters": [ { - "name": "branch_name", - "in": "path", - "description": "Branch Name", - "required": true, - "type": "string" + "name": "body", + "in": "body", + "description": "embed secret", + "required": false, + "schema": { + "$ref": "#/definitions/EmbedSecret" + } } ], "responses": { "200": { - "description": "Git Branch", + "description": "embed secret", "schema": { - "$ref": "#/definitions/GitBranch" + "$ref": "#/definitions/EmbedSecret" } }, "400": { @@ -10869,12 +11337,30 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "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": { @@ -10885,26 +11371,21 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/embed_config/secrets/{embed_secret_id}": { "delete": { "tags": [ - "Project" + "Auth" ], - "operationId": "delete_git_branch", - "summary": "Delete a Git Branch", - "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", + "operationId": "delete_embed_secret", + "summary": "Delete Embed Secret", + "description": "### Delete an embed secret.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - }, - { - "name": "branch_name", + "name": "embed_secret_id", "in": "path", - "description": "Branch Name", + "description": "Id of Embed Secret", "required": true, "type": "string" } @@ -10922,6 +11403,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -10940,30 +11427,30 @@ "x-looker-rate-limited": true } }, - "/golden_queries": { + "/embed/sso_url": { "post": { "tags": [ - "ConversationalAnalytics" + "Auth" ], - "operationId": "create_golden_query", - "summary": "Create Golden Query", - "description": "### Create Golden Query\n\nCreates a golden query.\n", + "operationId": "create_sso_embed_url", + "summary": "Create Signed Embed Url", + "description": "### Create Signed Embed URL\n\nCreates a signed embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to the returned URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed embed URL can only be **used once**. After the URL has been used to request a page from the\nLooker server, it is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this `target_url` is to navigate to the desired Looker page in your web browser and use the \"Get embed URL\" menu option\nto copy it to your clipboard and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (`group_ids` property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the `group_ids` property, or **both** the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the `group_ids`, `models`, and `permissions` properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nembed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nBecause of this, **these parameters are not validated** when the API call is made.\n\nThe [Get Embed Url](https://docs.cloud.google.com/looker/docs/r/get-signed-url) dialog can be used to determine and validate the correct permissions for signing an embed url.\nThis dialog also provides the SDK syntax for the API call to make. Alternatively, you can copy the signed URL into the Embed URI Validator text box\nin `/admin/embed` to diagnose potential problems.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the most recent active signing secret. If there is no active secret for signing embed urls,\na default secret will be created. This default secret is encrypted using HMAC/SHA-256.\n\nThe `embed_domain` parameter is optional. If specified and valid, the domain will be added to the embed domain allowlist if it is missing.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "parameters": [ { "name": "body", "in": "body", - "description": "Golden Query", + "description": "Signed Embed URL parameters", "required": true, "schema": { - "$ref": "#/definitions/GoldenQuery" + "$ref": "#/definitions/EmbedSsoParams" } } ], "responses": { "200": { - "description": "Golden Query", + "description": "Signed Embed URL", "schema": { - "$ref": "#/definitions/GoldenQuery" + "$ref": "#/definitions/EmbedUrlResponse" } }, "400": { @@ -10972,6 +11459,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -10997,43 +11490,35 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "none", "x-looker-rate-limited": true } }, - "/golden_queries/{golden_query_id}": { - "patch": { + "/embed/token_url/me": { + "post": { "tags": [ - "ConversationalAnalytics" + "Auth" ], - "operationId": "update_golden_query", - "summary": "Update Golden Query", - "description": "### Update Golden Query\n\nUpdates a golden query.\n", + "operationId": "create_embed_url_as_me", + "summary": "Create Embed URL", + "description": "### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://docs.cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of\nlogging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\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", + "description": "Embed parameters", "required": true, "schema": { - "$ref": "#/definitions/GoldenQuery" + "$ref": "#/definitions/EmbedParams" } } ], "responses": { "200": { - "description": "Golden Query", + "description": "Embed URL", "schema": { - "$ref": "#/definitions/GoldenQuery" + "$ref": "#/definitions/EmbedUrlResponse" } }, "400": { @@ -11042,12 +11527,24 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "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": { @@ -11061,32 +11558,33 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "none", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/embed/sso/validate": { + "get": { "tags": [ - "ConversationalAnalytics" + "Auth" ], - "operationId": "delete_golden_query", - "summary": "Delete Golden Query", - "description": "### Delete Golden Query\n\nDeletes a golden query by ID.\n", + "operationId": "validate_embed_url", + "summary": "Get Embed URL Validation", + "description": "### Validate a Signed Embed URL\n\n", "parameters": [ { - "name": "golden_query_id", - "in": "path", - "description": "Golden Query ID", - "required": true, - "type": "integer", - "format": "int64" + "name": "url", + "in": "query", + "description": "URL to validate", + "required": false, + "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Embed URL Validation", "schema": { - "type": "string" + "$ref": "#/definitions/EmbedUrlResponse" } }, "400": { @@ -11095,12 +11593,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": { @@ -11108,102 +11618,101 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "db_query", + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/groups": { - "get": { + "/embed/cookieless_session/acquire": { + "post": { "tags": [ - "Group" + "Auth" ], - "operationId": "all_groups", - "summary": "Get All Groups", - "description": "### Get information about all groups.\n", + "operationId": "acquire_embed_cookieless_session", + "summary": "Create Acquire cookieless embed session", + "description": "### Acquire a cookieless embed session.\n\nThe acquire session endpoint negates the need for signing the embed url and passing it as a parameter\nto the embed login. This endpoint accepts an embed user definition and creates or updates it. This is\nsimilar behavior to the embed SSO login as they both can create and update embed user data.\n\nThe endpoint also accepts an optional `session_reference_token`. If present and the session has not expired\nand the credentials match the credentials for the embed session, a new authentication token will be\ngenerated. This allows the embed session to attach a new embedded IFRAME to the embed session. Note that\nthe session is NOT extended in this scenario. In other words the session_length parameter is ignored.\n\n**IMPORTANT:** If the `session_reference_token` is provided and the session has NOT expired, the embed user\nis NOT updated. This is done for performance reasons and to support the embed SSO usecase where the\nfirst IFRAME created on a page uses a signed url and subsequently created IFRAMEs do not.\n\nIf the `session_reference_token` is provided but the session has expired, the token will be ignored and a\nnew embed session will be created. Note that the embed user definition will be updated in this scenario.\n\nIf the credentials do not match the credentials associated with an existing session_reference_token, a\n404 will be returned.\n\nThe endpoint returns the following:\n- Authentication token - a token that is passed to `/embed/login` endpoint that creates or attaches to the\n embed session. This token can be used once and has a lifetime of 30 seconds.\n- Session reference token - a token that lives for the length of the session. This token is used to\n generate new api and navigation tokens OR create new embed IFRAMEs.\n- Api token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into the\n iframe.\n- Navigation token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into\n the iframe.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true + "name": "body", + "in": "body", + "description": "Embed user details", + "required": true, + "schema": { + "$ref": "#/definitions/EmbedCookielessSessionAcquire" + } + } + ], + "responses": { + "200": { + "description": "Embed cookieless acquire session response", + "schema": { + "$ref": "#/definitions/EmbedCookielessSessionAcquireResponse" + } }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "type": "integer", - "format": "int64" + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } }, - { - "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, - "type": "integer", - "format": "int64" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } }, - { - "name": "ids", - "in": "query", - "description": "Optional of ids to get specific groups.", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv" + "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": "none", + "x-looker-rate-limited": true + } + }, + "/embed/cookieless_session/{session_reference_token}": { + "delete": { + "tags": [ + "Auth" + ], + "operationId": "delete_embed_cookieless_session", + "summary": "Delete cookieless embed session", + "description": "### Delete cookieless embed session\n\nThis will delete the session associated with the given session reference token. Calling this endpoint will result\nin the session and session reference data being cleared from the system. This endpoint can be used to log an embed\nuser out of the Looker instance.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "parameters": [ { - "name": "content_metadata_id", - "in": "query", - "description": "Id of content metadata to which groups must have access.", - "required": false, + "name": "session_reference_token", + "in": "path", + "description": "Embed session reference token", + "required": true, "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, - "type": "boolean" } ], "responses": { - "200": { - "description": "Group", + "204": { + "description": "Successfully deleted.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Group" - } + "type": "string" } }, "400": { @@ -11212,12 +11721,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": { @@ -11226,39 +11747,34 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "none", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/embed/cookieless_session/generate_tokens": { + "put": { "tags": [ - "Group" + "Auth" ], - "operationId": "create_group", - "summary": "Create Group", - "description": "### Creates a new group (admin only).\n", + "operationId": "generate_tokens_for_cookieless_session", + "summary": "Generate tokens for cookieless embed session", + "description": "### Generate api and navigation tokens for a cookieless embed session\n\nThe generate tokens endpoint is used to create new tokens of type:\n- Api token.\n- Navigation token.\nThe generate tokens endpoint should be called every time the Looker client asks for a token (except for the\nfirst time when the tokens returned by the acquire_session endpoint should be used).\n\n#### Embed session expiration handling\n\nThis endpoint does NOT return an error when the embed session expires. This is to simplify processing\nin the caller as errors can happen for non session expiration reasons. Instead the endpoint returns\nthe session time to live in the `session_reference_token_ttl` response property. If this property\ncontains a zero, the embed session has expired.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "parameters": [ { "name": "body", "in": "body", - "description": "Group", + "description": "Embed session reference token", "required": true, "schema": { - "$ref": "#/definitions/Group" + "$ref": "#/definitions/EmbedCookielessSessionGenerateTokens" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Group", + "description": "Generated api and navigations tokens for the cookieless embed session.", "schema": { - "$ref": "#/definitions/Group" + "$ref": "#/definitions/EmbedCookielessSessionGenerateTokensResponse" } }, "400": { @@ -11267,14 +11783,14 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } @@ -11293,99 +11809,41 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "none", "x-looker-rate-limited": true } }, - "/groups/search": { + "/external_oauth_applications": { "get": { "tags": [ - "Group" + "Connection" ], - "operationId": "search_groups", - "summary": "Search Groups", - "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "all_external_oauth_applications", + "summary": "Get All External OAuth Applications", + "description": "### Get all External OAuth Applications.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "type": "boolean" - }, - { - "name": "id", - "in": "query", - "description": "Match group id.", - "required": false, - "type": "string" - }, { "name": "name", "in": "query", - "description": "Match group name.", + "description": "Application name", "required": false, "type": "string" }, { - "name": "external_group_id", + "name": "client_id", "in": "query", - "description": "Match group external_group_id.", + "description": "Application Client ID", "required": false, "type": "string" - }, - { - "name": "externally_managed", - "in": "query", - "description": "Match group externally_managed.", - "required": false, - "type": "boolean" - }, - { - "name": "externally_orphaned", - "in": "query", - "description": "Match group externally_orphaned.", - "required": false, - "type": "boolean" } ], "responses": { "200": { - "description": "Group", + "description": "External OAuth Application", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Group" + "$ref": "#/definitions/ExternalOauthApplication" } } }, @@ -11408,101 +11866,33 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/groups/search/with_roles": { - "get": { + }, + "post": { "tags": [ - "Group" + "Connection" ], - "operationId": "search_groups_with_roles", - "summary": "Search Groups with Roles", - "description": "### Search groups include roles\n\nReturns all group records that match the given search criteria, and attaches any associated roles.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "create_external_oauth_application", + "summary": "Create External OAuth Application", + "description": "### Create an OAuth Application using the specified configuration.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "type": "boolean" - }, - { - "name": "id", - "in": "query", - "description": "Match group id.", - "required": false, - "type": "string" - }, - { - "name": "name", - "in": "query", - "description": "Match group name.", - "required": false, - "type": "string" - }, - { - "name": "external_group_id", - "in": "query", - "description": "Match group external_group_id.", - "required": false, - "type": "string" - }, - { - "name": "externally_managed", - "in": "query", - "description": "Match group externally_managed.", - "required": false, - "type": "boolean" - }, - { - "name": "externally_orphaned", - "in": "query", - "description": "Match group externally_orphaned.", - "required": false, - "type": "boolean" + "name": "body", + "in": "body", + "description": "External OAuth Application", + "required": true, + "schema": { + "$ref": "#/definitions/ExternalOauthApplication" + } } ], "responses": { "200": { - "description": "Group", + "description": "External OAuth Application", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/GroupSearch" - } + "$ref": "#/definitions/ExternalOauthApplication" } }, "400": { @@ -11517,6 +11907,18 @@ "$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": { @@ -11524,101 +11926,42 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/groups/search/with_hierarchy": { - "get": { + "/external_oauth_applications/{client_id}": { + "patch": { "tags": [ - "Group" + "Connection" ], - "operationId": "search_groups_with_hierarchy", - "summary": "Search Groups with Hierarchy", - "description": "### Search groups include hierarchy\n\nReturns all group records that match the given search criteria, and attaches\nassociated role_ids and parent group_ids.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "update_external_oauth_application", + "summary": "Update External OAuth Application", + "description": "### Update an OAuth Application's client secret.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "type": "boolean" - }, - { - "name": "id", - "in": "query", - "description": "Match group id.", - "required": false, - "type": "string" - }, - { - "name": "name", - "in": "query", - "description": "Match group name.", - "required": false, - "type": "string" - }, - { - "name": "external_group_id", - "in": "query", - "description": "Match group external_group_id.", - "required": false, + "name": "client_id", + "in": "path", + "description": "The client ID of the OAuth App to update", + "required": true, "type": "string" }, { - "name": "externally_managed", - "in": "query", - "description": "Match group externally_managed.", - "required": false, - "type": "boolean" - }, - { - "name": "externally_orphaned", - "in": "query", - "description": "Match group externally_orphaned.", - "required": false, - "type": "boolean" + "name": "body", + "in": "body", + "description": "External OAuth Application", + "required": true, + "schema": { + "$ref": "#/definitions/ExternalOauthApplication" + } } ], "responses": { "200": { - "description": "Group", + "description": "External OAuth Application", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/GroupHierarchy" - } + "$ref": "#/definitions/ExternalOauthApplication" } }, "400": { @@ -11633,6 +11976,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -11640,40 +11989,31 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/groups/{group_id}": { - "get": { + }, + "delete": { "tags": [ - "Group" + "Connection" ], - "operationId": "group", - "summary": "Get Group", - "description": "### Get information about a group.\n", + "operationId": "delete_external_oauth_application", + "summary": "Delete External OAuth Application", + "description": "### Delete an OAuth Application.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", "parameters": [ { - "name": "group_id", + "name": "client_id", "in": "path", - "description": "Id of group", + "description": "The client ID of the OAuth App to delete", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { - "200": { - "description": "Group", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/Group" + "type": "string" } }, "400": { @@ -11695,47 +12035,35 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/external_oauth_applications/user_state": { + "post": { "tags": [ - "Group" + "Connection" ], - "operationId": "update_group", - "summary": "Update Group", - "description": "### Updates the a group (admin only).", + "operationId": "create_oauth_application_user_state", + "summary": "Create Create OAuth user state.", + "description": "### Create OAuth User state.\n", "parameters": [ - { - "name": "group_id", - "in": "path", - "description": "Id of group", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "Group", + "description": "Create OAuth user state.", "required": true, "schema": { - "$ref": "#/definitions/Group" + "$ref": "#/definitions/CreateOAuthApplicationUserStateRequest" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Group", + "description": "Created user state", "schema": { - "$ref": "#/definitions/Group" + "$ref": "#/definitions/CreateOAuthApplicationUserStateResponse" } }, "400": { @@ -11744,14 +12072,14 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } @@ -11769,33 +12097,43 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/conversational_analytics/chat": { + "post": { "tags": [ - "Group" + "ConversationalAnalytics" ], - "operationId": "delete_group", - "summary": "Delete Group", - "description": "### Deletes a group (admin only).\n", + "operationId": "conversational_analytics_chat", + "summary": "Chat", + "description": "## Takes the latest conversation context (ID and a user message) and\n## returns a list of newly generated system messages.\n", "parameters": [ { - "name": "group_id", - "in": "path", - "description": "Id of group", + "name": "body", + "in": "body", + "description": "Conversation context necessary for generating new messages.", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/ConversationalAnalyticsChatRequest" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "A list of message objects generated in response to the user's input.", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/ChatMessage" + } } }, + "202": { + "description": "Accepted" + }, "400": { "description": "Bad Request", "schema": { @@ -11819,44 +12157,43 @@ "schema": { "$ref": "#/definitions/Error" } + }, + "500": { + "description": "Server Error", + "schema": { + "$ref": "#/definitions/Error" + } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/groups/{group_id}/groups": { + "/projects/{project_id}/git_branches": { "get": { "tags": [ - "Group" + "Project" ], - "operationId": "all_group_groups", - "summary": "Get All Groups in Group", - "description": "### Get information about all the groups in a group\n", + "operationId": "all_git_branches", + "summary": "Get All Git Branches", + "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "All groups in group.", + "description": "Git Branch", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Group" + "$ref": "#/definitions/GitBranch" } } }, @@ -11882,37 +12219,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/projects/{project_id}/git_branch": { + "get": { "tags": [ - "Group" + "Project" ], - "operationId": "add_group_group", - "summary": "Add a Group to Group", - "description": "### Adds a new group to a group.\n", + "operationId": "git_branch", + "summary": "Get Active Git Branch", + "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Group id to add", - "required": true, - "schema": { - "$ref": "#/definitions/GroupIdForGroupInclusion" - } } ], "responses": { "200": { - "description": "Added group.", + "description": "Git Branch", "schema": { - "$ref": "#/definitions/Group" + "$ref": "#/definitions/GitBranch" } }, "400": { @@ -11921,12 +12251,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -11943,81 +12267,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/groups/{group_id}/users": { - "get": { + }, + "post": { "tags": [ - "Group" + "Project" ], - "operationId": "all_group_users", - "summary": "Get All Users in Group", - "description": "### Get information about all the users directly included in a group.\n", + "operationId": "create_git_branch", + "summary": "Checkout New Git Branch", + "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "type": "string" }, { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" + "name": "body", + "in": "body", + "description": "Git Branch", + "required": true, + "schema": { + "$ref": "#/definitions/GitBranch" + } } ], "responses": { "200": { - "description": "All users in group.", + "description": "Git Branch", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/User" - } + "$ref": "#/definitions/GitBranch" } }, "400": { @@ -12032,6 +12312,18 @@ "$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": { @@ -12043,36 +12335,36 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "put": { "tags": [ - "Group" + "Project" ], - "operationId": "add_group_user", - "summary": "Add a User to Group", - "description": "### Adds a new user to a group.\n", + "operationId": "update_git_branch", + "summary": "Update Project Git Branch", + "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "User id to add", + "description": "Git Branch", "required": true, "schema": { - "$ref": "#/definitions/GroupIdForGroupUserInclusion" + "$ref": "#/definitions/GitBranch" } } ], "responses": { "200": { - "description": "Added user.", + "description": "Git Branch", "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/GitBranch" } }, "400": { @@ -12081,16 +12373,16 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/ValidationError" } }, "429": { @@ -12105,42 +12397,39 @@ "x-looker-rate-limited": true } }, - "/groups/{group_id}/users/{user_id}": { - "delete": { + "/projects/{project_id}/git_branch/{branch_name}": { + "get": { "tags": [ - "Group" + "Project" ], - "operationId": "delete_group_user", - "summary": "Remove a User from Group", - "description": "### Removes a user from a group.\n", + "operationId": "find_git_branch", + "summary": "Find a Git Branch", + "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "type": "string" }, { - "name": "user_id", + "name": "branch_name", "in": "path", - "description": "Id of user to remove from group", + "description": "Branch Name", "required": true, "type": "string" } ], "responses": { - "204": { - "description": "User successfully removed from group" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "Git Branch", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/GitBranch" } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -12161,44 +12450,39 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/groups/{group_id}/groups/{deleting_group_id}": { + }, "delete": { "tags": [ - "Group" + "Project" ], - "operationId": "delete_group_from_group", - "summary": "Deletes a Group from Group", - "description": "### Removes a group from a group.\n", + "operationId": "delete_git_branch", + "summary": "Delete a Git Branch", + "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "type": "string" }, { - "name": "deleting_group_id", + "name": "branch_name", "in": "path", - "description": "Id of group to delete", + "description": "Branch Name", "required": true, "type": "string" } ], "responses": { "204": { - "description": "Group successfully deleted" - }, - "400": { - "description": "Bad Request", + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/Error" + "type": "string" } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -12221,44 +12505,100 @@ "x-looker-rate-limited": true } }, - "/groups/{group_id}/attribute_values/{user_attribute_id}": { - "patch": { + "/golden_queries": { + "post": { "tags": [ - "Group" + "ConversationalAnalytics" ], - "operationId": "update_user_attribute_group_value", - "summary": "Set User Attribute Group Value", - "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", + "operationId": "create_golden_query", + "summary": "Create Golden Query", + "description": "### Create Golden Query\n\nCreates a golden query.\n", "parameters": [ { - "name": "group_id", - "in": "path", - "description": "Id of group", + "name": "body", + "in": "body", + "description": "Golden Query", "required": true, - "type": "string" + "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": "user_attribute_id", + "name": "golden_query_id", "in": "path", - "description": "Id of user attribute", + "description": "Golden Query ID", "required": true, - "type": "string" + "type": "integer", + "format": "int64" }, { "name": "body", "in": "body", - "description": "New value for group.", + "description": "Golden Query", "required": true, "schema": { - "$ref": "#/definitions/UserAttributeGroupValue" + "$ref": "#/definitions/GoldenQuery" } } ], "responses": { "200": { - "description": "Group value object.", + "description": "Golden Query", "schema": { - "$ref": "#/definitions/UserAttributeGroupValue" + "$ref": "#/definitions/GoldenQuery" } }, "400": { @@ -12267,12 +12607,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -12292,45 +12626,36 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true }, "delete": { "tags": [ - "Group" + "ConversationalAnalytics" ], - "operationId": "delete_user_attribute_group_value", - "summary": "Delete User Attribute Group Value", - "description": "### Remove a user attribute value from a group.\n", + "operationId": "delete_golden_query", + "summary": "Delete Golden Query", + "description": "### Delete Golden Query\n\nDeletes a golden query by ID.\n", "parameters": [ { - "name": "group_id", - "in": "path", - "description": "Id of group", - "required": true, - "type": "string" - }, - { - "name": "user_attribute_id", + "name": "golden_query_id", "in": "path", - "description": "Id of user attribute", + "description": "Golden Query ID", "required": true, - "type": "string" + "type": "integer", + "format": "int64" } ], "responses": { "204": { - "description": "Value successfully unset" - }, - "400": { - "description": "Bad Request", + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/Error" + "type": "string" } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -12348,19 +12673,19 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/boards": { + "/groups": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "all_boards", - "summary": "Get All Boards", - "description": "### Get information about all boards.\n", + "operationId": "all_groups", + "summary": "Get All Groups", + "description": "### Get information about all groups.\n", "parameters": [ { "name": "fields", @@ -12368,15 +12693,81 @@ "description": "Requested fields.", "required": false, "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "ids", + "in": "query", + "description": "Optional of ids to get specific groups.", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Id of content metadata to which groups must have access.", + "required": false, + "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, + "type": "boolean" } ], "responses": { "200": { - "description": "Board", + "description": "Group", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Board" + "$ref": "#/definitions/Group" } } }, @@ -12405,19 +12796,19 @@ }, "post": { "tags": [ - "Board" + "Group" ], - "operationId": "create_board", - "summary": "Create Board", - "description": "### Create a new board.\n", + "operationId": "create_group", + "summary": "Create Group", + "description": "### Creates a new group (admin only).\n", "parameters": [ { "name": "body", "in": "body", - "description": "Board", + "description": "Group", "required": true, "schema": { - "$ref": "#/definitions/Board" + "$ref": "#/definitions/Group" } }, { @@ -12430,9 +12821,9 @@ ], "responses": { "200": { - "description": "Board", + "description": "Group", "schema": { - "$ref": "#/definitions/Board" + "$ref": "#/definitions/Group" } }, "400": { @@ -12471,43 +12862,15 @@ "x-looker-rate-limited": true } }, - "/boards/search": { + "/groups/search": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "search_boards", - "summary": "Search Boards", - "description": "### Search Boards\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "search_groups", + "summary": "Search Groups", + "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ - { - "name": "title", - "in": "query", - "description": "Matches board title.", - "required": false, - "type": "string" - }, - { - "name": "created_at", - "in": "query", - "description": "Matches the timestamp for when the board was created.", - "required": false, - "type": "string" - }, - { - "name": "first_name", - "in": "query", - "description": "The first name of the user who created this board.", - "required": false, - "type": "string" - }, - { - "name": "last_name", - "in": "query", - "description": "The last name of the user who created this board.", - "required": false, - "type": "string" - }, { "name": "fields", "in": "query", @@ -12516,82 +12879,78 @@ "type": "string" }, { - "name": "favorited", + "name": "limit", "in": "query", - "description": "Return favorited boards when true.", + "description": "Number of results to return (used with `offset`).", "required": false, - "type": "boolean" + "type": "integer", + "format": "int64" }, { - "name": "creator_id", + "name": "offset", "in": "query", - "description": "Filter on boards created by a particular user.", + "description": "Number of results to skip before returning any (used with `limit`).", "required": false, - "type": "string" + "type": "integer", + "format": "int64" }, { "name": "sorts", "in": "query", - "description": "The fields to sort the results by", + "description": "Fields to sort by.", "required": false, "type": "string" }, { - "name": "page", + "name": "filter_or", "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "description": "Combine given search criteria in a boolean OR expression", "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true + "type": "boolean" }, { - "name": "per_page", + "name": "id", "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "description": "Match group id.", "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true + "type": "string" }, { - "name": "offset", + "name": "name", "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "description": "Match group name.", "required": false, - "type": "integer", - "format": "int64" + "type": "string" }, { - "name": "limit", + "name": "external_group_id", "in": "query", - "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "description": "Match group external_group_id.", "required": false, - "type": "integer", - "format": "int64" + "type": "string" }, { - "name": "filter_or", + "name": "externally_managed", "in": "query", - "description": "Combine given search criteria in a boolean OR expression", + "description": "Match group externally_managed.", "required": false, "type": "boolean" }, { - "name": "permission", + "name": "externally_orphaned", "in": "query", - "description": "Filter results based on permission, either show (default) or update", + "description": "Match group externally_orphaned.", "required": false, - "type": "string" + "type": "boolean" } ], "responses": { "200": { - "description": "boards", + "description": "Group", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Board" + "$ref": "#/definitions/Group" } } }, @@ -12619,35 +12978,96 @@ "x-looker-rate-limited": true } }, - "/boards/{board_id}": { + "/groups/search/with_roles": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "board", - "summary": "Get Board", - "description": "### Get information about a board.\n", + "operationId": "search_groups_with_roles", + "summary": "Search Groups with Roles", + "description": "### Search groups include roles\n\nReturns all group records that match the given search criteria, and attaches any associated roles.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "board_id", - "in": "path", - "description": "Id of board", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" }, { - "name": "fields", + "name": "limit", "in": "query", - "description": "Requested fields.", + "description": "Number of results to return (used with `offset`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "type": "boolean" + }, + { + "name": "id", + "in": "query", + "description": "Match group id.", + "required": false, + "type": "string" + }, + { + "name": "name", + "in": "query", + "description": "Match group name.", + "required": false, + "type": "string" + }, + { + "name": "external_group_id", + "in": "query", + "description": "Match group external_group_id.", "required": false, "type": "string" + }, + { + "name": "externally_managed", + "in": "query", + "description": "Match group externally_managed.", + "required": false, + "type": "boolean" + }, + { + "name": "externally_orphaned", + "in": "query", + "description": "Match group externally_orphaned.", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Board", + "description": "Group", "schema": { - "$ref": "#/definitions/Board" + "type": "array", + "items": { + "$ref": "#/definitions/GroupSearch" + } } }, "400": { @@ -12672,96 +13092,98 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/groups/search/with_hierarchy": { + "get": { "tags": [ - "Board" + "Group" ], - "operationId": "update_board", - "summary": "Update Board", - "description": "### Update a board definition.\n", + "operationId": "search_groups_with_hierarchy", + "summary": "Search Groups with Hierarchy", + "description": "### Search groups include hierarchy\n\nReturns all group records that match the given search criteria, and attaches\nassociated role_ids and parent group_ids.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "board_id", - "in": "path", - "description": "Id of board", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" }, { - "name": "body", - "in": "body", - "description": "Board", - "required": true, - "schema": { - "$ref": "#/definitions/Board" - } + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "type": "integer", + "format": "int64" }, { - "name": "fields", + "name": "offset", "in": "query", - "description": "Requested fields.", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", "required": false, "type": "string" - } - ], - "responses": { - "200": { - "description": "Board", - "schema": { - "$ref": "#/definitions/Board" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "type": "boolean" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "id", + "in": "query", + "description": "Match group id.", + "required": false, + "type": "string" }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } + { + "name": "name", + "in": "query", + "description": "Match group name.", + "required": false, + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "delete": { - "tags": [ - "Board" - ], - "operationId": "delete_board", - "summary": "Delete Board", - "description": "### Delete a board.\n", - "parameters": [ { - "name": "board_id", - "in": "path", - "description": "Id of board", - "required": true, + "name": "external_group_id", + "in": "query", + "description": "Match group external_group_id.", + "required": false, "type": "string" + }, + { + "name": "externally_managed", + "in": "query", + "description": "Match group externally_managed.", + "required": false, + "type": "boolean" + }, + { + "name": "externally_orphaned", + "in": "query", + "description": "Match group externally_orphaned.", + "required": false, + "type": "boolean" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Group", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/GroupHierarchy" + } } }, "400": { @@ -12788,45 +13210,35 @@ "x-looker-rate-limited": true } }, - "/board_items": { + "/groups/{group_id}": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "all_board_items", - "summary": "Get All Board Items", - "description": "### Get information about all board items.\n", + "operationId": "group", + "summary": "Get Group", + "description": "### Get information about a group.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, "type": "string" }, { - "name": "board_section_id", + "name": "fields", "in": "query", - "description": "Filter to a specific board section", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Board Item", + "description": "Group", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/BoardItem" - } + "$ref": "#/definitions/Group" } }, "400": { @@ -12852,21 +13264,28 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "patch": { "tags": [ - "Board" + "Group" ], - "operationId": "create_board_item", - "summary": "Create Board Item", - "description": "### Create a new board item.\n", + "operationId": "update_group", + "summary": "Update Group", + "description": "### Updates the a group (admin only).", "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Board Item", + "description": "Group", "required": true, "schema": { - "$ref": "#/definitions/BoardItem" + "$ref": "#/definitions/Group" } }, { @@ -12879,9 +13298,9 @@ ], "responses": { "200": { - "description": "Board Item", + "description": "Group", "schema": { - "$ref": "#/definitions/BoardItem" + "$ref": "#/definitions/Group" } }, "400": { @@ -12890,14 +13309,14 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } @@ -12918,37 +13337,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/board_items/{board_item_id}": { - "get": { + }, + "delete": { "tags": [ - "Board" + "Group" ], - "operationId": "board_item", - "summary": "Get Board Item", - "description": "### Get information about a board item.\n", + "operationId": "delete_group", + "summary": "Delete Group", + "description": "### Deletes a group (admin only).\n", "parameters": [ { - "name": "board_item_id", + "name": "group_id", "in": "path", - "description": "Id of board item", + "description": "Id of group", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { - "200": { - "description": "Board Item", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/BoardItem" + "type": "string" } }, "400": { @@ -12957,6 +13367,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -12973,31 +13389,24 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/groups/{group_id}/groups": { + "get": { "tags": [ - "Board" + "Group" ], - "operationId": "update_board_item", - "summary": "Update Board Item", - "description": "### Update a board item definition.\n", + "operationId": "all_group_groups", + "summary": "Get All Groups in Group", + "description": "### Get information about all the groups in a group\n", "parameters": [ { - "name": "board_item_id", + "name": "group_id", "in": "path", - "description": "Id of board item", + "description": "Id of group", "required": true, "type": "string" }, - { - "name": "body", - "in": "body", - "description": "Board Item", - "required": true, - "schema": { - "$ref": "#/definitions/BoardItem" - } - }, { "name": "fields", "in": "query", @@ -13008,9 +13417,12 @@ ], "responses": { "200": { - "description": "Board Item", + "description": "All groups in group.", "schema": { - "$ref": "#/definitions/BoardItem" + "type": "array", + "items": { + "$ref": "#/definitions/Group" + } } }, "400": { @@ -13025,12 +13437,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -13042,27 +13448,36 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "delete": { + "post": { "tags": [ - "Board" + "Group" ], - "operationId": "delete_board_item", - "summary": "Delete Board Item", - "description": "### Delete a board item.\n", + "operationId": "add_group_group", + "summary": "Add a Group to Group", + "description": "### Adds a new group to a group.\n", "parameters": [ { - "name": "board_item_id", + "name": "group_id", "in": "path", - "description": "Id of board item", + "description": "Id of group", "required": true, "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Group id to add", + "required": true, + "schema": { + "$ref": "#/definitions/GroupIdForGroupInclusion" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Added group.", "schema": { - "type": "string" + "$ref": "#/definitions/Group" } }, "400": { @@ -13071,6 +13486,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -13089,30 +13510,78 @@ "x-looker-rate-limited": true } }, - "/primary_homepage_sections": { + "/groups/{group_id}/users": { "get": { "tags": [ - "Homepage" + "Group" ], - "operationId": "all_primary_homepage_sections", - "summary": "Get All Primary homepage sections", - "description": "### Get information about the primary homepage's sections.\n", + "operationId": "all_group_users", + "summary": "Get All Users in Group", + "description": "### Get information about all the users directly included in a group.\n", "parameters": [ + { + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", "description": "Requested fields.", "required": false, "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Primary homepage section", + "description": "All users in group.", "schema": { "type": "array", "items": { - "$ref": "#/definitions/HomepageSection" + "$ref": "#/definitions/User" } } }, @@ -13138,40 +13607,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/board_sections": { - "get": { + }, + "post": { "tags": [ - "Board" + "Group" ], - "operationId": "all_board_sections", - "summary": "Get All Board sections", - "description": "### Get information about all board sections.\n", + "operationId": "add_group_user", + "summary": "Add a User to Group", + "description": "### Adds a new user to a group.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, "type": "string" }, { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" + "name": "body", + "in": "body", + "description": "User id to add", + "required": true, + "schema": { + "$ref": "#/definitions/GroupIdForGroupUserInclusion" + } } ], "responses": { "200": { - "description": "Board section", + "description": "Added user.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/BoardSection" - } + "$ref": "#/definitions/User" } }, "400": { @@ -13180,6 +13646,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -13196,38 +13668,35 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/groups/{group_id}/users/{user_id}": { + "delete": { "tags": [ - "Board" + "Group" ], - "operationId": "create_board_section", - "summary": "Create Board section", - "description": "### Create a new board section.\n", + "operationId": "delete_group_user", + "summary": "Remove a User from Group", + "description": "### Removes a user from a group.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Board section", + "name": "group_id", + "in": "path", + "description": "Id of group", "required": true, - "schema": { - "$ref": "#/definitions/BoardSection" - } + "type": "string" }, { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "user_id", + "in": "path", + "description": "Id of user to remove from group", + "required": true, "type": "string" } ], "responses": { - "200": { - "description": "Board section", - "schema": { - "$ref": "#/definitions/BoardSection" - } + "204": { + "description": "User successfully removed from group" }, "400": { "description": "Bad Request", @@ -13235,24 +13704,18 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -13265,36 +13728,33 @@ "x-looker-rate-limited": true } }, - "/board_sections/{board_section_id}": { - "get": { + "/groups/{group_id}/groups/{deleting_group_id}": { + "delete": { "tags": [ - "Board" + "Group" ], - "operationId": "board_section", - "summary": "Get Board section", - "description": "### Get information about a board section.\n", + "operationId": "delete_group_from_group", + "summary": "Deletes a Group from Group", + "description": "### Removes a group from a group.\n", "parameters": [ { - "name": "board_section_id", + "name": "group_id", "in": "path", - "description": "Id of board section", + "description": "Id of group", "required": true, "type": "string" }, { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "deleting_group_id", + "in": "path", + "description": "Id of group to delete", + "required": true, "type": "string" } ], "responses": { - "200": { - "description": "Board section", - "schema": { - "$ref": "#/definitions/BoardSection" - } + "204": { + "description": "Group successfully deleted" }, "400": { "description": "Bad Request", @@ -13302,6 +13762,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -13318,44 +13784,46 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/groups/{group_id}/attribute_values/{user_attribute_id}": { "patch": { "tags": [ - "Board" + "Group" ], - "operationId": "update_board_section", - "summary": "Update Board section", - "description": "### Update a board section definition.\n", - "parameters": [ - { - "name": "board_section_id", + "operationId": "update_user_attribute_group_value", + "summary": "Set User Attribute Group Value", + "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", + "parameters": [ + { + "name": "group_id", "in": "path", - "description": "Id of board section", + "description": "Id of group", + "required": true, + "type": "string" + }, + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Board section", + "description": "New value for group.", "required": true, "schema": { - "$ref": "#/definitions/BoardSection" + "$ref": "#/definitions/UserAttributeGroupValue" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Board section", + "description": "Group value object.", "schema": { - "$ref": "#/definitions/BoardSection" + "$ref": "#/definitions/UserAttributeGroupValue" } }, "400": { @@ -13364,6 +13832,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -13389,26 +13863,30 @@ }, "delete": { "tags": [ - "Board" + "Group" ], - "operationId": "delete_board_section", - "summary": "Delete Board section", - "description": "### Delete a board section.\n", + "operationId": "delete_user_attribute_group_value", + "summary": "Delete User Attribute Group Value", + "description": "### Remove a user attribute value from a group.\n", "parameters": [ { - "name": "board_section_id", + "name": "group_id", "in": "path", - "description": "Id of board section", + "description": "Id of group", + "required": true, + "type": "string" + }, + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", "required": true, "type": "string" } ], "responses": { "204": { - "description": "Successfully deleted.", - "schema": { - "type": "string" - } + "description": "Value successfully unset" }, "400": { "description": "Bad Request", @@ -13416,6 +13894,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -13434,30 +13918,31 @@ "x-looker-rate-limited": true } }, - "/internal/kda/analyze": { - "post": { + "/boards": { + "get": { "tags": [ - "KeyDriverAnalysis" + "Board" ], - "operationId": "run_key_driver_analysis", - "summary": "Analyze Key Drivers", - "description": "### Analyze Key Drivers\n\nIdentifies the dimensional segments that most significantly drove a metric's change between two time periods.\n\nGiven a data source (a saved query or a model/explore pair), a contribution metric, and a list of\ndimensions to analyse, this endpoint compares a test (breach) period against a control (baseline)\nperiod and returns a ranked list of segment-level insights.\nEach insight reports the metric value in both periods, the absolute and relative difference, \nthe unexpected deviation (how much a segment over or under-performed relative to the overall trend), \nits proportional contribution to the total change, and its a-priori support (what share of total volume that segment represents).\n", + "operationId": "all_boards", + "summary": "Get All Boards", + "description": "### Get information about all boards.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Analysis parameters", - "required": true, - "schema": { - "$ref": "#/definitions/KdaRequestPayload" - } + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Analysis result as JSON", + "description": "Board", "schema": { - "$ref": "#/definitions/KdaResponsePayload" + "type": "array", + "items": { + "$ref": "#/definitions/Board" + } } }, "400": { @@ -13472,12 +13957,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -13485,20 +13964,27 @@ } } }, - "x-looker-status": "alpha", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/integration_hubs": { - "get": { + }, + "post": { "tags": [ - "Integration" + "Board" ], - "operationId": "all_integration_hubs", - "summary": "Get All Integration Hubs", - "description": "### Get information about all Integration Hubs.\n", + "operationId": "create_board", + "summary": "Create Board", + "description": "### Create a new board.\n", "parameters": [ + { + "name": "body", + "in": "body", + "description": "Board", + "required": true, + "schema": { + "$ref": "#/definitions/Board" + } + }, { "name": "fields", "in": "query", @@ -13509,12 +13995,9 @@ ], "responses": { "200": { - "description": "Integration Hub", + "description": "Board", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/IntegrationHub" - } + "$ref": "#/definitions/Board" } }, "400": { @@ -13529,6 +14012,18 @@ "$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": { @@ -13539,23 +14034,44 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/boards/search": { + "get": { "tags": [ - "Integration" + "Board" ], - "operationId": "create_integration_hub", - "summary": "Create Integration Hub", - "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", + "operationId": "search_boards", + "summary": "Search Boards", + "description": "### Search Boards\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Integration Hub", - "required": true, - "schema": { - "$ref": "#/definitions/IntegrationHub" - } + "name": "title", + "in": "query", + "description": "Matches board title.", + "required": false, + "type": "string" + }, + { + "name": "created_at", + "in": "query", + "description": "Matches the timestamp for when the board was created.", + "required": false, + "type": "string" + }, + { + "name": "first_name", + "in": "query", + "description": "The first name of the user who created this board.", + "required": false, + "type": "string" + }, + { + "name": "last_name", + "in": "query", + "description": "The last name of the user who created this board.", + "required": false, + "type": "string" }, { "name": "fields", @@ -13563,13 +14079,85 @@ "description": "Requested fields.", "required": false, "type": "string" + }, + { + "name": "favorited", + "in": "query", + "description": "Return favorited boards when true.", + "required": false, + "type": "boolean" + }, + { + "name": "creator_id", + "in": "query", + "description": "Filter on boards created by a particular user.", + "required": false, + "type": "string" + }, + { + "name": "sorts", + "in": "query", + "description": "The fields to sort the results by", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "type": "boolean" + }, + { + "name": "permission", + "in": "query", + "description": "Filter results based on permission, either show (default) or update", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Integration Hub", + "description": "boards", "schema": { - "$ref": "#/definitions/IntegrationHub" + "type": "array", + "items": { + "$ref": "#/definitions/Board" + } } }, "400": { @@ -13584,18 +14172,6 @@ "$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": { @@ -13608,19 +14184,19 @@ "x-looker-rate-limited": true } }, - "/integration_hubs/{integration_hub_id}": { + "/boards/{board_id}": { "get": { "tags": [ - "Integration" + "Board" ], - "operationId": "integration_hub", - "summary": "Get Integration Hub", - "description": "### Get information about a Integration Hub.\n", + "operationId": "board", + "summary": "Get Board", + "description": "### Get information about a board.\n", "parameters": [ { - "name": "integration_hub_id", + "name": "board_id", "in": "path", - "description": "Id of integration_hub", + "description": "Id of board", "required": true, "type": "string" }, @@ -13634,9 +14210,9 @@ ], "responses": { "200": { - "description": "Integration Hub", + "description": "Board", "schema": { - "$ref": "#/definitions/IntegrationHub" + "$ref": "#/definitions/Board" } }, "400": { @@ -13664,26 +14240,26 @@ }, "patch": { "tags": [ - "Integration" + "Board" ], - "operationId": "update_integration_hub", - "summary": "Update Integration Hub", - "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", + "operationId": "update_board", + "summary": "Update Board", + "description": "### Update a board definition.\n", "parameters": [ { - "name": "integration_hub_id", + "name": "board_id", "in": "path", - "description": "Id of integration_hub", + "description": "Id of board", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Integration Hub", + "description": "Board", "required": true, "schema": { - "$ref": "#/definitions/IntegrationHub" + "$ref": "#/definitions/Board" } }, { @@ -13696,9 +14272,9 @@ ], "responses": { "200": { - "description": "Integration Hub", + "description": "Board", "schema": { - "$ref": "#/definitions/IntegrationHub" + "$ref": "#/definitions/Board" } }, "400": { @@ -13732,16 +14308,16 @@ }, "delete": { "tags": [ - "Integration" + "Board" ], - "operationId": "delete_integration_hub", - "summary": "Delete Integration Hub", - "description": "### Delete a Integration Hub.\n", + "operationId": "delete_board", + "summary": "Delete Board", + "description": "### Delete a board.\n", "parameters": [ { - "name": "integration_hub_id", + "name": "board_id", "in": "path", - "description": "Id of integration_hub", + "description": "Id of board", "required": true, "type": "string" } @@ -13777,35 +14353,45 @@ "x-looker-rate-limited": true } }, - "/integration_hubs/{integration_hub_id}/health": { + "/board_items": { "get": { "tags": [ - "Integration" + "Board" ], - "operationId": "get_integration_hub_health", - "summary": "Check the health of Integration Hub", - "description": "Checks to see if the user is able to connect to their integration hub", + "operationId": "all_board_items", + "summary": "Get All Board Items", + "description": "### Get information about all board items.\n", "parameters": [ { - "name": "integration_hub_id", - "in": "path", - "description": "Id of integration_hub", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" }, { - "name": "fields", + "name": "sorts", "in": "query", - "description": "Requested fields.", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "board_section_id", + "in": "query", + "description": "Filter to a specific board section", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Health Result", + "description": "Board Item", "schema": { - "$ref": "#/definitions/IntegrationHubHealthResult" + "type": "array", + "items": { + "$ref": "#/definitions/BoardItem" + } } }, "400": { @@ -13820,12 +14406,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -13836,94 +14416,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { + }, "post": { "tags": [ - "Integration" + "Board" ], - "operationId": "accept_integration_hub_legal_agreement", - "summary": "Accept Integration Hub Legal Agreement", - "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", + "operationId": "create_board_item", + "summary": "Create Board Item", + "description": "### Create a new board item.\n", "parameters": [ { - "name": "integration_hub_id", - "in": "path", - "description": "Id of integration_hub", + "name": "body", + "in": "body", + "description": "Board Item", "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "Integration hub", - "schema": { - "$ref": "#/definitions/IntegrationHub" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "422": { - "description": "Validation Error", "schema": { - "$ref": "#/definitions/ValidationError" + "$ref": "#/definitions/BoardItem" } }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/integrations": { - "get": { - "tags": [ - "Integration" - ], - "operationId": "all_integrations", - "summary": "Get All Integrations", - "description": "### Get information about all Integrations.\n", - "parameters": [ { "name": "fields", "in": "query", "description": "Requested fields.", "required": false, "type": "string" - }, - { - "name": "integration_hub_id", - "in": "query", - "description": "Filter to a specific provider", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Integration", + "description": "Board Item", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Integration" - } + "$ref": "#/definitions/BoardItem" } }, "400": { @@ -13938,6 +14461,18 @@ "$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": { @@ -13950,19 +14485,19 @@ "x-looker-rate-limited": true } }, - "/integrations/{integration_id}": { + "/board_items/{board_item_id}": { "get": { "tags": [ - "Integration" + "Board" ], - "operationId": "integration", - "summary": "Get Integration", - "description": "### Get information about a Integration.\n", + "operationId": "board_item", + "summary": "Get Board Item", + "description": "### Get information about a board item.\n", "parameters": [ { - "name": "integration_id", + "name": "board_item_id", "in": "path", - "description": "Id of integration", + "description": "Id of board item", "required": true, "type": "string" }, @@ -13976,9 +14511,9 @@ ], "responses": { "200": { - "description": "Integration", + "description": "Board Item", "schema": { - "$ref": "#/definitions/Integration" + "$ref": "#/definitions/BoardItem" } }, "400": { @@ -14006,26 +14541,26 @@ }, "patch": { "tags": [ - "Integration" + "Board" ], - "operationId": "update_integration", - "summary": "Update Integration", - "description": "### Update parameters on a Integration.\n", + "operationId": "update_board_item", + "summary": "Update Board Item", + "description": "### Update a board item definition.\n", "parameters": [ { - "name": "integration_id", + "name": "board_item_id", "in": "path", - "description": "Id of integration", + "description": "Id of board item", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Integration", + "description": "Board Item", "required": true, "schema": { - "$ref": "#/definitions/Integration" + "$ref": "#/definitions/BoardItem" } }, { @@ -14038,9 +14573,9 @@ ], "responses": { "200": { - "description": "Integration", + "description": "Board Item", "schema": { - "$ref": "#/definitions/Integration" + "$ref": "#/definitions/BoardItem" } }, "400": { @@ -14071,42 +14606,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/integrations/{integration_id}/form": { - "post": { + }, + "delete": { "tags": [ - "Integration" + "Board" ], - "operationId": "fetch_integration_form", - "summary": "Fetch Remote Integration Form", - "description": "Returns the Integration form for presentation to the user.", + "operationId": "delete_board_item", + "summary": "Delete Board Item", + "description": "### Delete a board item.\n", "parameters": [ { - "name": "integration_id", + "name": "board_item_id", "in": "path", - "description": "Id of integration", + "description": "Id of board item", "required": true, "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Integration Form Request", - "required": false, - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } } ], "responses": { - "200": { - "description": "Data Action Form", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/DataActionForm" + "type": "string" } }, "400": { @@ -14121,12 +14642,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -14139,28 +14654,31 @@ "x-looker-rate-limited": true } }, - "/integrations/{integration_id}/test": { - "post": { + "/primary_homepage_sections": { + "get": { "tags": [ - "Integration" + "Homepage" ], - "operationId": "test_integration", - "summary": "Test integration", - "description": "Tests the integration to make sure all the settings are working.", + "operationId": "all_primary_homepage_sections", + "summary": "Get All Primary homepage sections", + "description": "### Get information about the primary homepage's sections.\n", "parameters": [ { - "name": "integration_id", - "in": "path", - "description": "Id of integration", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "Test Result", + "description": "Primary homepage section", "schema": { - "$ref": "#/definitions/IntegrationTestResult" + "type": "array", + "items": { + "$ref": "#/definitions/HomepageSection" + } } }, "400": { @@ -14175,12 +14693,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -14193,19 +14705,38 @@ "x-looker-rate-limited": true } }, - "/internal_help_resources_content": { + "/board_sections": { "get": { "tags": [ - "Config" + "Board" + ], + "operationId": "all_board_sections", + "summary": "Get All Board sections", + "description": "### Get information about all board sections.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + } ], - "operationId": "internal_help_resources_content", - "summary": "Get Internal Help Resources Content", - "description": "### Set the menu item name and content for internal help resources\n", "responses": { "200": { - "description": "Internal Help Resources Content", + "description": "Board section", "schema": { - "$ref": "#/definitions/InternalHelpResourcesContent" + "type": "array", + "items": { + "$ref": "#/definitions/BoardSection" + } } }, "400": { @@ -14231,29 +14762,36 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "Config" + "Board" ], - "operationId": "update_internal_help_resources_content", - "summary": "Update internal help resources content", - "description": "Update internal help resources content\n", + "operationId": "create_board_section", + "summary": "Create Board section", + "description": "### Create a new board section.\n", "parameters": [ { "name": "body", "in": "body", - "description": "Internal Help Resources Content", + "description": "Board section", "required": true, "schema": { - "$ref": "#/definitions/InternalHelpResourcesContent" + "$ref": "#/definitions/BoardSection" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Internal Help Resources Content", + "description": "Board section", "schema": { - "$ref": "#/definitions/InternalHelpResourcesContent" + "$ref": "#/definitions/BoardSection" } }, "400": { @@ -14268,6 +14806,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -14286,19 +14830,35 @@ "x-looker-rate-limited": true } }, - "/internal_help_resources_enabled": { + "/board_sections/{board_section_id}": { "get": { "tags": [ - "Config" + "Board" + ], + "operationId": "board_section", + "summary": "Get Board section", + "description": "### Get information about a board section.\n", + "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } ], - "operationId": "internal_help_resources", - "summary": "Get Internal Help Resources", - "description": "### Get and set the options for internal help resources\n", "responses": { "200": { - "description": "Internal Help Resources", + "description": "Board section", "schema": { - "$ref": "#/definitions/InternalHelpResources" + "$ref": "#/definitions/BoardSection" } }, "400": { @@ -14323,32 +14883,44 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/internal_help_resources": { + }, "patch": { "tags": [ - "Config" + "Board" ], - "operationId": "update_internal_help_resources", - "summary": "Update internal help resources configuration", - "description": "Update internal help resources settings\n", + "operationId": "update_board_section", + "summary": "Update Board section", + "description": "### Update a board section definition.\n", "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Custom Welcome Email", + "description": "Board section", "required": true, "schema": { - "$ref": "#/definitions/InternalHelpResources" + "$ref": "#/definitions/BoardSection" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Custom Welcome Email", + "description": "Board section", "schema": { - "$ref": "#/definitions/InternalHelpResources" + "$ref": "#/definitions/BoardSection" } }, "400": { @@ -14379,25 +14951,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/ldap_config": { - "get": { + }, + "delete": { "tags": [ - "Auth" + "Board" + ], + "operationId": "delete_board_section", + "summary": "Delete Board section", + "description": "### Delete a board section.\n", + "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "type": "string" + } ], - "operationId": "ldap_config", - "summary": "Get LDAP Configuration", - "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://docs.cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "200": { - "description": "LDAP Configuration.", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/LDAPConfig" + "type": "string" } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -14418,30 +14997,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/internal/kda/analyze": { + "post": { "tags": [ - "Auth" + "KeyDriverAnalysis" ], - "operationId": "update_ldap_config", - "summary": "Update LDAP Configuration", - "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://docs.cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "run_key_driver_analysis", + "summary": "Analyze Key Drivers", + "description": "### Analyze Key Drivers\n\nIdentifies the dimensional segments that most significantly drove a metric's change between two time periods.\n\nGiven a data source (a saved query or a model/explore pair), a contribution metric, and a list of\ndimensions to analyse, this endpoint compares a test (breach) period against a control (baseline)\nperiod and returns a ranked list of segment-level insights.\nEach insight reports the metric value in both periods, the absolute and relative difference, \nthe unexpected deviation (how much a segment over or under-performed relative to the overall trend), \nits proportional contribution to the total change, and its a-priori support (what share of total volume that segment represents).\n", "parameters": [ { "name": "body", "in": "body", - "description": "LDAP Config", + "description": "Analysis parameters", "required": true, "schema": { - "$ref": "#/definitions/LDAPConfig" + "$ref": "#/definitions/KdaRequestPayload" } } ], "responses": { "200": { - "description": "New state for LDAP Configuration.", + "description": "Analysis result as JSON", "schema": { - "$ref": "#/definitions/LDAPConfig" + "$ref": "#/definitions/KdaResponsePayload" } }, "400": { @@ -14450,12 +15031,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -14475,35 +15050,36 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "alpha", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/ldap_config/test_connection": { - "put": { + "/integration_hubs": { + "get": { "tags": [ - "Auth" + "Integration" ], - "operationId": "test_ldap_config_connection", - "summary": "Test LDAP Connection", - "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "all_integration_hubs", + "summary": "Get All Integration Hubs", + "description": "### Get information about all Integration Hubs.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "LDAP Config", - "required": true, - "schema": { - "$ref": "#/definitions/LDAPConfig" - } + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Result info.", + "description": "Integration Hub", "schema": { - "$ref": "#/definitions/LDAPConfigTestResult" + "type": "array", + "items": { + "$ref": "#/definitions/IntegrationHub" + } } }, "400": { @@ -14512,24 +15088,12 @@ "$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": { @@ -14540,32 +15104,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/ldap_config/test_auth": { - "put": { + }, + "post": { "tags": [ - "Auth" + "Integration" ], - "operationId": "test_ldap_config_auth", - "summary": "Test LDAP Auth", - "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "create_integration_hub", + "summary": "Create Integration Hub", + "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", "parameters": [ { "name": "body", "in": "body", - "description": "LDAP Config", + "description": "Integration Hub", "required": true, "schema": { - "$ref": "#/definitions/LDAPConfig" + "$ref": "#/definitions/IntegrationHub" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Result info.", + "description": "Integration Hub", "schema": { - "$ref": "#/definitions/LDAPConfigTestResult" + "$ref": "#/definitions/IntegrationHub" } }, "400": { @@ -14574,14 +15143,14 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } @@ -14604,30 +15173,35 @@ "x-looker-rate-limited": true } }, - "/ldap_config/test_user_info": { - "put": { + "/integration_hubs/{integration_hub_id}": { + "get": { "tags": [ - "Auth" + "Integration" ], - "operationId": "test_ldap_config_user_info", - "summary": "Test LDAP User Info", - "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user withoutneeding to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full infofor the user from the LDAP server without actually authenticating the user. So, user password is notrequired.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "integration_hub", + "summary": "Get Integration Hub", + "description": "### Get information about a Integration Hub.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "LDAP Config", + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", "required": true, - "schema": { - "$ref": "#/definitions/LDAPConfig" - } + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Result info.", + "description": "Integration Hub", "schema": { - "$ref": "#/definitions/LDAPConfigTestResult" + "$ref": "#/definitions/IntegrationHub" } }, "400": { @@ -14636,24 +15210,12 @@ "$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": { @@ -14664,32 +15226,44 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/ldap_config/test_user_auth": { - "put": { + }, + "patch": { "tags": [ - "Auth" + "Integration" ], - "operationId": "test_ldap_config_user_auth", - "summary": "Test LDAP User Auth", - "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "update_integration_hub", + "summary": "Update Integration Hub", + "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", "parameters": [ + { + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "LDAP Config", + "description": "Integration Hub", "required": true, "schema": { - "$ref": "#/definitions/LDAPConfig" + "$ref": "#/definitions/IntegrationHub" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Result info.", + "description": "Integration Hub", "schema": { - "$ref": "#/definitions/LDAPConfigTestResult" + "$ref": "#/definitions/IntegrationHub" } }, "400": { @@ -14698,12 +15272,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -14726,24 +15294,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/legacy_features": { - "get": { + }, + "delete": { "tags": [ - "Config" + "Integration" + ], + "operationId": "delete_integration_hub", + "summary": "Delete Integration Hub", + "description": "### Delete a Integration Hub.\n", + "parameters": [ + { + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, + "type": "string" + } ], - "operationId": "all_legacy_features", - "summary": "Get All Legacy Features", - "description": "### Get all legacy features.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "200": { - "description": "Legacy Feature", + "204": { + "description": "Successfully deleted.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/LegacyFeature" - } + "type": "string" } }, "400": { @@ -14752,12 +15324,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -14776,28 +15342,35 @@ "x-looker-rate-limited": true } }, - "/legacy_features/{legacy_feature_id}": { + "/integration_hubs/{integration_hub_id}/health": { "get": { "tags": [ - "Config" + "Integration" ], - "operationId": "legacy_feature", - "summary": "Get Legacy Feature", - "description": "### Get information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "get_integration_hub_health", + "summary": "Check the health of Integration Hub", + "description": "Checks to see if the user is able to connect to their integration hub", "parameters": [ { - "name": "legacy_feature_id", + "name": "integration_hub_id", "in": "path", - "description": "id of legacy feature", + "description": "Id of integration_hub", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Legacy Feature", + "description": "Health Result", "schema": { - "$ref": "#/definitions/LegacyFeature" + "$ref": "#/definitions/IntegrationHubHealthResult" } }, "400": { @@ -14806,16 +15379,16 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/ValidationError" } }, "429": { @@ -14828,37 +15401,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { + "post": { "tags": [ - "Config" + "Integration" ], - "operationId": "update_legacy_feature", - "summary": "Update Legacy Feature", - "description": "### Update information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "accept_integration_hub_legal_agreement", + "summary": "Accept Integration Hub Legal Agreement", + "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", "parameters": [ { - "name": "legacy_feature_id", + "name": "integration_hub_id", "in": "path", - "description": "id of legacy feature", + "description": "Id of integration_hub", "required": true, "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Legacy Feature", - "required": true, - "schema": { - "$ref": "#/definitions/LegacyFeature" - } } ], "responses": { "200": { - "description": "Legacy Feature", + "description": "Integration hub", "schema": { - "$ref": "#/definitions/LegacyFeature" + "$ref": "#/definitions/IntegrationHub" } }, "400": { @@ -14867,12 +15433,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -14897,21 +15457,37 @@ "x-looker-rate-limited": true } }, - "/locales": { + "/integrations": { "get": { "tags": [ - "Config" + "Integration" + ], + "operationId": "all_integrations", + "summary": "Get All Integrations", + "description": "### Get information about all Integrations.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "integration_hub_id", + "in": "query", + "description": "Filter to a specific provider", + "required": false, + "type": "string" + } ], - "operationId": "all_locales", - "summary": "Get All Locales", - "description": "### Get a list of locales that Looker supports.\n", "responses": { "200": { - "description": "Locale", + "description": "Integration", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Locale" + "$ref": "#/definitions/Integration" } } }, @@ -14939,15 +15515,22 @@ "x-looker-rate-limited": true } }, - "/looks": { + "/integrations/{integration_id}": { "get": { "tags": [ - "Look" + "Integration" ], - "operationId": "all_looks", - "summary": "Get All Looks", - "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", + "operationId": "integration", + "summary": "Get Integration", + "description": "### Get information about a Integration.\n", "parameters": [ + { + "name": "integration_id", + "in": "path", + "description": "Id of integration", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", @@ -14958,12 +15541,9 @@ ], "responses": { "200": { - "description": "Look", + "description": "Integration", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Look" - } + "$ref": "#/definitions/Integration" } }, "400": { @@ -14989,21 +15569,28 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "patch": { "tags": [ - "Look" + "Integration" ], - "operationId": "create_look", - "summary": "Create Look", - "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", + "operationId": "update_integration", + "summary": "Update Integration", + "description": "### Update parameters on a Integration.\n", "parameters": [ + { + "name": "integration_id", + "in": "path", + "description": "Id of integration", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Look", + "description": "Integration", "required": true, "schema": { - "$ref": "#/definitions/LookWithQuery" + "$ref": "#/definitions/Integration" } }, { @@ -15016,9 +15603,9 @@ ], "responses": { "200": { - "description": "Look", + "description": "Integration", "schema": { - "$ref": "#/definitions/LookWithQuery" + "$ref": "#/definitions/Integration" } }, "400": { @@ -15033,12 +15620,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -15057,156 +15638,40 @@ "x-looker-rate-limited": true } }, - "/looks/search": { - "get": { + "/integrations/{integration_id}/form": { + "post": { "tags": [ - "Look" + "Integration" ], - "operationId": "search_looks", - "summary": "Search Looks", - "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", + "operationId": "fetch_integration_form", + "summary": "Fetch Remote Integration Form", + "description": "Returns the Integration form for presentation to the user.", "parameters": [ { - "name": "id", - "in": "query", - "description": "Match look id.", - "required": false, - "type": "string" - }, - { - "name": "title", - "in": "query", - "description": "Match Look title.", - "required": false, - "type": "string" - }, - { - "name": "description", - "in": "query", - "description": "Match Look description.", - "required": false, - "type": "string" - }, - { - "name": "content_favorite_id", - "in": "query", - "description": "Select looks with a particular content favorite id", - "required": false, - "type": "string" - }, - { - "name": "folder_id", - "in": "query", - "description": "Select looks in a particular folder.", - "required": false, - "type": "string" - }, - { - "name": "user_id", - "in": "query", - "description": "Select looks created by a particular user.", - "required": false, - "type": "string" - }, - { - "name": "view_count", - "in": "query", - "description": "Select looks with particular view_count value", - "required": false, - "type": "string" - }, - { - "name": "deleted", - "in": "query", - "description": "Select soft-deleted looks", - "required": false, - "type": "boolean" - }, - { - "name": "query_id", - "in": "query", - "description": "Select looks that reference a particular query by query_id", - "required": false, - "type": "string" - }, - { - "name": "curate", - "in": "query", - "description": "Exclude items that exist only in personal spaces other than the users", - "required": false, - "type": "boolean" - }, - { - "name": "last_viewed_at", - "in": "query", - "description": "Select looks based on when they were last viewed", - "required": false, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "One or more fields to sort results by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :updated_at, :last_updater_id, :view_count, :favorite_count, :content_favorite_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :query_id, :certification_status]", - "required": false, + "name": "integration_id", + "in": "path", + "description": "Id of integration", + "required": true, "type": "string" }, { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", + "name": "body", + "in": "body", + "description": "Integration Form Request", "required": false, - "type": "boolean" + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "looks", + "description": "Data Action Form", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Look" - } + "$ref": "#/definitions/DataActionForm" } }, "400": { @@ -15221,6 +15686,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -15233,35 +15704,73 @@ "x-looker-rate-limited": true } }, - "/looks/{look_id}": { - "get": { + "/integrations/{integration_id}/test": { + "post": { "tags": [ - "Look" + "Integration" ], - "operationId": "look", - "summary": "Get Look", - "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", + "operationId": "test_integration", + "summary": "Test integration", + "description": "Tests the integration to make sure all the settings are working.", "parameters": [ { - "name": "look_id", + "name": "integration_id", "in": "path", - "description": "Id of look", + "description": "Id of integration", "required": true, "type": "string" + } + ], + "responses": { + "200": { + "description": "Test Result", + "schema": { + "$ref": "#/definitions/IntegrationTestResult" + } }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/internal_help_resources_content": { + "get": { + "tags": [ + "Config" ], + "operationId": "internal_help_resources_content", + "summary": "Get Internal Help Resources Content", + "description": "### Set the menu item name and content for internal help resources\n", "responses": { "200": { - "description": "Look", + "description": "Internal Help Resources Content", "schema": { - "$ref": "#/definitions/LookWithQuery" + "$ref": "#/definitions/InternalHelpResourcesContent" } }, "400": { @@ -15289,41 +15798,27 @@ }, "patch": { "tags": [ - "Look" + "Config" ], - "operationId": "update_look", - "summary": "Update Look", - "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nYou can pass `deleted: true` as a parameter to [search_looks()](#!/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", + "operationId": "update_internal_help_resources_content", + "summary": "Update internal help resources content", + "description": "Update internal help resources content\n", "parameters": [ - { - "name": "look_id", - "in": "path", - "description": "Id of look", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "Look", + "description": "Internal Help Resources Content", "required": true, "schema": { - "$ref": "#/definitions/LookWithQuery" + "$ref": "#/definitions/InternalHelpResourcesContent" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Look", + "description": "Internal Help Resources Content", "schema": { - "$ref": "#/definitions/LookWithQuery" + "$ref": "#/definitions/InternalHelpResourcesContent" } }, "400": { @@ -15354,28 +15849,71 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/internal_help_resources_enabled": { + "get": { "tags": [ - "Look" + "Config" ], - "operationId": "delete_look", - "summary": "Delete Look", - "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", + "operationId": "internal_help_resources", + "summary": "Get Internal Help Resources", + "description": "### Get and set the options for internal help resources\n", + "responses": { + "200": { + "description": "Internal Help Resources", + "schema": { + "$ref": "#/definitions/InternalHelpResources" + } + }, + "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 + } + }, + "/internal_help_resources": { + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_internal_help_resources", + "summary": "Update internal help resources configuration", + "description": "Update internal help resources settings\n", "parameters": [ { - "name": "look_id", - "in": "path", - "description": "Id of look", + "name": "body", + "in": "body", + "description": "Custom Welcome Email", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/InternalHelpResources" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Custom Welcome Email", "schema": { - "type": "string" + "$ref": "#/definitions/InternalHelpResources" } }, "400": { @@ -15390,6 +15928,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -15402,128 +15946,67 @@ "x-looker-rate-limited": true } }, - "/looks/{look_id}/run/{result_format}": { + "/ldap_config": { "get": { "tags": [ - "Look" + "Auth" ], - "operationId": "run_look", - "summary": "Run Look", - "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", - "produces": [ - "text", - "application/json", - "image/png", - "image/jpeg" + "operationId": "ldap_config", + "summary": "Get LDAP Configuration", + "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://docs.cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "responses": { + "200": { + "description": "LDAP Configuration.", + "schema": { + "$ref": "#/definitions/LDAPConfig" + } + }, + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "patch": { + "tags": [ + "Auth" ], + "operationId": "update_ldap_config", + "summary": "Update LDAP Configuration", + "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://docs.cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "look_id", - "in": "path", - "description": "Id of look", + "name": "body", + "in": "body", + "description": "LDAP Config", "required": true, - "type": "string" - }, - { - "name": "result_format", - "in": "path", - "description": "Format of result", - "required": true, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Row limit (may override the limit in the saved query).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "apply_formatting", - "in": "query", - "description": "Apply model-specified formatting to each result.", - "required": false, - "type": "boolean" - }, - { - "name": "apply_vis", - "in": "query", - "description": "Apply visualization options to results.", - "required": false, - "type": "boolean" - }, - { - "name": "cache", - "in": "query", - "description": "Get results from cache if available.", - "required": false, - "type": "boolean" - }, - { - "name": "image_width", - "in": "query", - "description": "Render width for image formats.", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "image_height", - "in": "query", - "description": "Render height for image formats.", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "generate_drill_links", - "in": "query", - "description": "Generate drill links (only applicable to 'json_detail' format.", - "required": false, - "type": "boolean" - }, - { - "name": "force_production", - "in": "query", - "description": "Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used.", - "required": false, - "type": "boolean" - }, - { - "name": "cache_only", - "in": "query", - "description": "Retrieve any results from cache even if the results have expired.", - "required": false, - "type": "boolean" - }, - { - "name": "path_prefix", - "in": "query", - "description": "Prefix to use for drill links (url encoded).", - "required": false, - "type": "string" - }, - { - "name": "rebuild_pdts", - "in": "query", - "description": "Rebuild PDTS used in query.", - "required": false, - "type": "boolean" - }, - { - "name": "server_table_calcs", - "in": "query", - "description": "Perform table calculations on query results", - "required": false, - "type": "boolean" + "schema": { + "$ref": "#/definitions/LDAPConfig" + } } ], "responses": { "200": { - "description": "Look", + "description": "New state for LDAP Configuration.", "schema": { - "type": "string" + "$ref": "#/definitions/LDAPConfig" } }, "400": { @@ -15532,6 +16015,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -15552,45 +16041,34 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/looks/{look_id}/copy": { - "post": { + "/ldap_config/test_connection": { + "put": { "tags": [ - "Look" + "Auth" ], - "operationId": "copy_look", - "summary": "Copy Look", - "description": "### Copy an existing look\n\nCreates a copy of an existing look, in a specified folder, and returns the copied look.\n\n`look_id` and `folder_id` are required.\n\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", + "operationId": "test_ldap_config_connection", + "summary": "Test LDAP Connection", + "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "look_id", - "in": "path", - "description": "Look id to copy.", + "name": "body", + "in": "body", + "description": "LDAP Config", "required": true, - "type": "string" - }, - { - "name": "folder_id", - "in": "query", - "description": "Folder id to copy to.", - "required": false, - "type": "string" + "schema": { + "$ref": "#/definitions/LDAPConfig" + } } ], "responses": { "200": { - "description": "Look", - "schema": { - "$ref": "#/definitions/LookWithQuery" - } - }, - "201": { - "description": "look", + "description": "Result info.", "schema": { - "$ref": "#/definitions/Look" + "$ref": "#/definitions/LDAPConfigTestResult" } }, "400": { @@ -15599,14 +16077,14 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } @@ -15629,45 +16107,40 @@ "x-looker-rate-limited": true } }, - "/looks/{look_id}/move": { - "patch": { + "/ldap_config/test_auth": { + "put": { "tags": [ - "Look" + "Auth" ], - "operationId": "move_look", - "summary": "Move Look", - "description": "### Move an existing look\n\nMoves a look to a specified folder, and returns the moved look.\n\n`look_id` and `folder_id` are required.\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", + "operationId": "test_ldap_config_auth", + "summary": "Test LDAP Auth", + "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "look_id", - "in": "path", - "description": "Look id to move.", - "required": true, - "type": "string" - }, - { - "name": "folder_id", - "in": "query", - "description": "Folder id to move to.", + "name": "body", + "in": "body", + "description": "LDAP Config", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/LDAPConfig" + } } ], "responses": { "200": { - "description": "Look", + "description": "Result info.", "schema": { - "$ref": "#/definitions/LookWithQuery" + "$ref": "#/definitions/LDAPConfigTestResult" } }, - "201": { - "description": "look", + "400": { + "description": "Bad Request", "schema": { - "$ref": "#/definitions/Look" + "$ref": "#/definitions/Error" } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } @@ -15696,37 +16169,30 @@ "x-looker-rate-limited": true } }, - "/looks/{look_id}/certification": { - "patch": { + "/ldap_config/test_user_info": { + "put": { "tags": [ - "Look" + "Auth" ], - "operationId": "update_look_certification", - "summary": "Update Look Certification", - "description": "### Update look certification\n", + "operationId": "test_ldap_config_user_info", + "summary": "Test LDAP User Info", + "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user withoutneeding to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full infofor the user from the LDAP server without actually authenticating the user. So, user password is notrequired.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ - { - "name": "look_id", - "in": "path", - "description": "Look id to update certification.", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "Certification Data", + "description": "LDAP Config", "required": true, "schema": { - "$ref": "#/definitions/Certification" + "$ref": "#/definitions/LDAPConfig" } } ], "responses": { "200": { - "description": "looks", + "description": "Result info.", "schema": { - "$ref": "#/definitions/Look" + "$ref": "#/definitions/LDAPConfigTestResult" } }, "400": { @@ -15735,6 +16201,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -15754,80 +16226,35 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/lookml_models": { - "get": { + "/ldap_config/test_user_auth": { + "put": { "tags": [ - "LookmlModel" + "Auth" ], - "operationId": "all_lookml_models", - "summary": "Get All LookML Models", - "description": "### Get information about all lookml models.\n", + "operationId": "test_ldap_config_user_auth", + "summary": "Test LDAP User Auth", + "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (can be used with offset)", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any. (Defaults to 0 if not set when limit is used)", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "exclude_empty", - "in": "query", - "description": "Whether or not to exclude models with no explores from the response (Defaults to false)", - "required": false, - "type": "boolean" - }, - { - "name": "exclude_hidden", - "in": "query", - "description": "Whether or not to exclude hidden explores from the response (Defaults to false)", - "required": false, - "type": "boolean" - }, - { - "name": "include_internal", - "in": "query", - "description": "Whether or not to include built-in models such as System Activity (Defaults to false)", - "required": false, - "type": "boolean" - }, - { - "name": "include_self_service", - "in": "query", - "description": "Whether or not to include self service models (Defaults to false)", - "required": false, - "type": "boolean" + "name": "body", + "in": "body", + "description": "LDAP Config", + "required": true, + "schema": { + "$ref": "#/definitions/LDAPConfig" + } } ], "responses": { "200": { - "description": "LookML Model", + "description": "Result info.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/LookmlModel" - } + "$ref": "#/definitions/LDAPConfigTestResult" } }, "400": { @@ -15836,12 +16263,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": { @@ -15852,30 +16291,24 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/legacy_features": { + "get": { "tags": [ - "LookmlModel" - ], - "operationId": "create_lookml_model", - "summary": "Create LookML Model", - "description": "### Create a lookml model using the specified configuration.\n", - "parameters": [ - { - "name": "body", - "in": "body", - "description": "LookML Model", - "required": true, - "schema": { - "$ref": "#/definitions/LookmlModel" - } - } + "Config" ], + "operationId": "all_legacy_features", + "summary": "Get All Legacy Features", + "description": "### Get all legacy features.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "LookML Model", + "description": "Legacy Feature", "schema": { - "$ref": "#/definitions/LookmlModel" + "type": "array", + "items": { + "$ref": "#/definitions/LegacyFeature" + } } }, "400": { @@ -15884,24 +16317,18 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -15914,35 +16341,28 @@ "x-looker-rate-limited": true } }, - "/lookml_models/{lookml_model_name}": { + "/legacy_features/{legacy_feature_id}": { "get": { "tags": [ - "LookmlModel" + "Config" ], - "operationId": "lookml_model", - "summary": "Get LookML Model", - "description": "### Get information about a lookml model.\n", + "operationId": "legacy_feature", + "summary": "Get Legacy Feature", + "description": "### Get information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "lookml_model_name", + "name": "legacy_feature_id", "in": "path", - "description": "Name of lookml model.", + "description": "id of legacy feature", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "LookML Model", + "description": "Legacy Feature", "schema": { - "$ref": "#/definitions/LookmlModel" + "$ref": "#/definitions/LegacyFeature" } }, "400": { @@ -15951,6 +16371,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -15970,34 +16396,34 @@ }, "patch": { "tags": [ - "LookmlModel" + "Config" ], - "operationId": "update_lookml_model", - "summary": "Update LookML Model", - "description": "### Update a lookml model using the specified configuration.\n", + "operationId": "update_legacy_feature", + "summary": "Update Legacy Feature", + "description": "### Update information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "lookml_model_name", + "name": "legacy_feature_id", "in": "path", - "description": "Name of lookml model.", + "description": "id of legacy feature", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "LookML Model", + "description": "Legacy Feature", "required": true, "schema": { - "$ref": "#/definitions/LookmlModel" + "$ref": "#/definitions/LegacyFeature" } } ], "responses": { "200": { - "description": "LookML Model", + "description": "Legacy Feature", "schema": { - "$ref": "#/definitions/LookmlModel" + "$ref": "#/definitions/LegacyFeature" } }, "400": { @@ -16006,6 +16432,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -16028,28 +16460,24 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/locales": { + "get": { "tags": [ - "LookmlModel" - ], - "operationId": "delete_lookml_model", - "summary": "Delete LookML Model", - "description": "### Delete a lookml model.\n", - "parameters": [ - { - "name": "lookml_model_name", - "in": "path", - "description": "Name of lookml model.", - "required": true, - "type": "string" - } + "Config" ], + "operationId": "all_locales", + "summary": "Get All Locales", + "description": "### Get a list of locales that Looker supports.\n", "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Locale", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/Locale" + } } }, "400": { @@ -16076,49 +16504,31 @@ "x-looker-rate-limited": true } }, - "/lookml_models/{lookml_model_name}/explores/{explore_name}": { + "/looks": { "get": { "tags": [ - "LookmlModel" + "Look" ], - "operationId": "lookml_model_explore", - "summary": "Get LookML Model Explore", - "description": "### Get information about a lookml model explore.\n", + "operationId": "all_looks", + "summary": "Get All Looks", + "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", "parameters": [ - { - "name": "lookml_model_name", - "in": "path", - "description": "Name of lookml model.", - "required": true, - "type": "string" - }, - { - "name": "explore_name", - "in": "path", - "description": "Name of explore.", - "required": true, - "type": "string" - }, { "name": "fields", "in": "query", "description": "Requested fields.", "required": false, "type": "string" - }, - { - "name": "add_drills_metadata", - "in": "query", - "description": "Whether response should include drill field metadata.", - "required": false, - "type": "boolean" } ], "responses": { "200": { - "description": "LookML Model Explore", + "description": "Look", "schema": { - "$ref": "#/definitions/LookmlModelExplore" + "type": "array", + "items": { + "$ref": "#/definitions/Look" + } } }, "400": { @@ -16143,94 +16553,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/merge_queries/{merge_query_id}": { - "get": { + }, + "post": { "tags": [ - "Query" + "Look" ], - "operationId": "merge_query", - "summary": "Get Merge Query", - "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", + "operationId": "create_look", + "summary": "Create Look", + "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", "parameters": [ { - "name": "merge_query_id", - "in": "path", - "description": "Merge Query Id", + "name": "body", + "in": "body", + "description": "Look", "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "type": "string" - } - ], - "responses": { - "200": { - "description": "Merge Query", - "schema": { - "$ref": "#/definitions/MergeQuery" - } - }, - "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": "db_query", - "x-looker-rate-limited": true - } - }, - "/merge_queries": { - "post": { - "tags": [ - "Query" - ], - "operationId": "create_merge_query", - "summary": "Create Merge Query", - "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n\n", - "parameters": [ - { - "name": "body", - "in": "body", - "description": "Merge Query", - "required": false, "schema": { - "$ref": "#/definitions/MergeQuery" + "$ref": "#/definitions/LookWithQuery" } }, { "name": "fields", "in": "query", - "description": "Requested fields", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Merge Query", + "description": "Look", "schema": { - "$ref": "#/definitions/MergeQuery" + "$ref": "#/definitions/LookWithQuery" } }, "400": { @@ -16265,63 +16618,160 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/models/{model_name}/views/{view_name}/fields/{field_name}/suggestions": { + "/looks/search": { "get": { "tags": [ - "Metadata" + "Look" ], - "operationId": "model_fieldname_suggestions", - "summary": "Model field name suggestions", - "description": "### Field name suggestions for a model and view\n\n`filters` is a string hash of values, with the key as the field name and the string value as the filter expression:\n\n```ruby\n{'users.age': '>=60'}\n```\n\nor\n\n```ruby\n{'users.age': '<30'}\n```\n\nor\n\n```ruby\n{'users.age': '=50'}\n```\n", + "operationId": "search_looks", + "summary": "Search Looks", + "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", "parameters": [ { - "name": "model_name", - "in": "path", - "description": "Name of model", - "required": true, + "name": "id", + "in": "query", + "description": "Match look id.", + "required": false, "type": "string" }, { - "name": "view_name", - "in": "path", - "description": "Name of view", - "required": true, + "name": "title", + "in": "query", + "description": "Match Look title.", + "required": false, "type": "string" }, { - "name": "field_name", - "in": "path", - "description": "Name of field to use for suggestions", - "required": true, + "name": "description", + "in": "query", + "description": "Match Look description.", + "required": false, "type": "string" }, { - "name": "term", + "name": "content_favorite_id", "in": "query", - "description": "Search term pattern (evaluated as as `%term%`)", + "description": "Select looks with a particular content favorite id", "required": false, "type": "string" }, { - "name": "filters", + "name": "folder_id", "in": "query", - "description": "Suggestion filters with field name keys and comparison expressions", + "description": "Select looks in a particular folder.", "required": false, - "type": "object", - "additionalProperties": { - "type": "string" - } + "type": "string" + }, + { + "name": "user_id", + "in": "query", + "description": "Select looks created by a particular user.", + "required": false, + "type": "string" + }, + { + "name": "view_count", + "in": "query", + "description": "Select looks with particular view_count value", + "required": false, + "type": "string" + }, + { + "name": "deleted", + "in": "query", + "description": "Select soft-deleted looks", + "required": false, + "type": "boolean" + }, + { + "name": "query_id", + "in": "query", + "description": "Select looks that reference a particular query by query_id", + "required": false, + "type": "string" + }, + { + "name": "curate", + "in": "query", + "description": "Exclude items that exist only in personal spaces other than the users", + "required": false, + "type": "boolean" + }, + { + "name": "last_viewed_at", + "in": "query", + "description": "Select looks based on when they were last viewed", + "required": false, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "One or more fields to sort results by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :updated_at, :last_updater_id, :view_count, :favorite_count, :content_favorite_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :query_id, :certification_status]", + "required": false, + "type": "string" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Model view field suggestions", + "description": "looks", "schema": { - "$ref": "#/definitions/ModelFieldSuggestions" + "type": "array", + "items": { + "$ref": "#/definitions/Look" + } } }, "400": { @@ -16348,28 +16798,35 @@ "x-looker-rate-limited": true } }, - "/models/{model_name}": { + "/looks/{look_id}": { "get": { "tags": [ - "Metadata" + "Look" ], - "operationId": "get_model", - "summary": "Get a single model", - "description": "### Get a single model\n\n", + "operationId": "look", + "summary": "Get Look", + "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", "parameters": [ { - "name": "model_name", + "name": "look_id", "in": "path", - "description": "Name of model", + "description": "Id of look", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "A Model", + "description": "Look", "schema": { - "$ref": "#/definitions/Model" + "$ref": "#/definitions/LookWithQuery" } }, "400": { @@ -16394,33 +16851,44 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/connections/{connection_name}/databases": { - "get": { + }, + "patch": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_databases", - "summary": "List accessible databases to this connection", - "description": "### List databases available to this connection\n\nCertain dialects can support multiple databases per single connection.\nIf this connection supports multiple databases, the database names will be returned in an array.\n\nConnections using dialects that do not support multiple databases will return an empty array.\n\n**Note**: [Connection Features](#!/Metadata/connection_features) can be used to determine if a connection supports\nmultiple databases.\n", + "operationId": "update_look", + "summary": "Update Look", + "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nYou can pass `deleted: true` as a parameter to [search_looks()](#!/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", "parameters": [ { - "name": "connection_name", + "name": "look_id", "in": "path", - "description": "Name of connection", + "description": "Id of look", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Look", "required": true, + "schema": { + "$ref": "#/definitions/LookWithQuery" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "Database names", + "description": "Look", "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/definitions/LookWithQuery" } }, "400": { @@ -16449,39 +16917,30 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/connections/{connection_name}/features": { - "get": { + }, + "delete": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_features", - "summary": "Metadata features supported by this connection", - "description": "### Retrieve metadata features for this connection\n\nReturns a list of feature names with `true` (available) or `false` (not available)\n\n", + "operationId": "delete_look", + "summary": "Delete Look", + "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", "parameters": [ { - "name": "connection_name", + "name": "look_id", "in": "path", - "description": "Name of connection", + "description": "Id of look", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { - "200": { - "description": "Connection features", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/ConnectionFeatures" + "type": "string" } }, "400": { @@ -16496,12 +16955,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -16514,52 +16967,128 @@ "x-looker-rate-limited": true } }, - "/connections/{connection_name}/schemas": { + "/looks/{look_id}/run/{result_format}": { "get": { "tags": [ - "Metadata" + "Look" + ], + "operationId": "run_look", + "summary": "Run Look", + "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n\n\n", + "produces": [ + "text", + "application/json", + "image/png", + "image/jpeg" ], - "operationId": "connection_schemas", - "summary": "Get schemas for a connection", - "description": "### Get the list of schemas and tables for a connection\n\n", "parameters": [ { - "name": "connection_name", + "name": "look_id", "in": "path", - "description": "Name of connection", + "description": "Id of look", "required": true, "type": "string" }, { - "name": "database", + "name": "result_format", + "in": "path", + "description": "Format of result", + "required": true, + "type": "string" + }, + { + "name": "limit", "in": "query", - "description": "For dialects that support multiple databases, optionally identify which to use", + "description": "Row limit (may override the limit in the saved query).", "required": false, - "type": "string" + "type": "integer", + "format": "int64" + }, + { + "name": "apply_formatting", + "in": "query", + "description": "Apply model-specified formatting to each result.", + "required": false, + "type": "boolean" + }, + { + "name": "apply_vis", + "in": "query", + "description": "Apply visualization options to results.", + "required": false, + "type": "boolean" }, { "name": "cache", "in": "query", - "description": "True to use fetch from cache, false to load fresh", + "description": "Get results from cache if available.", "required": false, "type": "boolean" }, { - "name": "fields", + "name": "image_width", "in": "query", - "description": "Requested fields.", + "description": "Render width for image formats.", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "image_height", + "in": "query", + "description": "Render height for image formats.", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "generate_drill_links", + "in": "query", + "description": "Generate drill links (only applicable to 'json_detail' format.", + "required": false, + "type": "boolean" + }, + { + "name": "force_production", + "in": "query", + "description": "Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used.", + "required": false, + "type": "boolean" + }, + { + "name": "cache_only", + "in": "query", + "description": "Retrieve any results from cache even if the results have expired.", + "required": false, + "type": "boolean" + }, + { + "name": "path_prefix", + "in": "query", + "description": "Prefix to use for drill links (url encoded).", "required": false, "type": "string" + }, + { + "name": "rebuild_pdts", + "in": "query", + "description": "Rebuild PDTS used in query.", + "required": false, + "type": "boolean" + }, + { + "name": "server_table_calcs", + "in": "query", + "description": "Perform table calculations on query results", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Schemas for connection", + "description": "Look", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Schema" - } + "type": "string" } }, "400": { @@ -16588,78 +17117,45 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/connections/{connection_name}/tables": { - "get": { + "/looks/{look_id}/copy": { + "post": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_tables", - "summary": "Get tables for a connection", - "description": "### Get the list of tables for a schema\n\nFor dialects that support multiple databases, optionally identify which to use. If not provided, the default\ndatabase for the connection will be used.\n\nFor dialects that do **not** support multiple databases, **do not use** the database parameter\n", + "operationId": "copy_look", + "summary": "Copy Look", + "description": "### Copy an existing look\n\nCreates a copy of an existing look, in a specified folder, and returns the copied look.\n\n`look_id` and `folder_id` are required.\n\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", "parameters": [ { - "name": "connection_name", + "name": "look_id", "in": "path", - "description": "Name of connection", + "description": "Look id to copy.", "required": true, "type": "string" }, { - "name": "database", - "in": "query", - "description": "Optional. Name of database to use for the query, only if applicable", - "required": false, - "type": "string" - }, - { - "name": "schema_name", - "in": "query", - "description": "Optional. Return only tables for this schema", - "required": false, - "type": "string" - }, - { - "name": "cache", - "in": "query", - "description": "True to fetch from cache, false to load fresh", - "required": false, - "type": "boolean" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "table_filter", + "name": "folder_id", "in": "query", - "description": "Optional. Return tables with names that contain this value", + "description": "Folder id to copy to.", "required": false, "type": "string" - }, - { - "name": "table_limit", - "in": "query", - "description": "Optional. Return tables up to the table_limit", - "required": false, - "type": "integer", - "format": "int64" } ], "responses": { "200": { - "description": "Schemas and tables for connection", + "description": "Look", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/SchemaTables" - } + "$ref": "#/definitions/LookWithQuery" + } + }, + "201": { + "description": "look", + "schema": { + "$ref": "#/definitions/Look" } }, "400": { @@ -16674,6 +17170,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -16692,74 +17194,41 @@ "x-looker-rate-limited": true } }, - "/connections/{connection_name}/columns": { - "get": { + "/looks/{look_id}/move": { + "patch": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_columns", - "summary": "Get columns for a connection", - "description": "### Get the columns (and therefore also the tables) in a specific schema\n", + "operationId": "move_look", + "summary": "Move Look", + "description": "### Move an existing look\n\nMoves a look to a specified folder, and returns the moved look.\n\n`look_id` and `folder_id` are required.\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", "parameters": [ { - "name": "connection_name", + "name": "look_id", "in": "path", - "description": "Name of connection", + "description": "Look id to move.", "required": true, "type": "string" }, { - "name": "database", - "in": "query", - "description": "For dialects that support multiple databases, optionally identify which to use", - "required": false, - "type": "string" - }, - { - "name": "schema_name", - "in": "query", - "description": "Name of schema to use.", - "required": false, - "type": "string" - }, - { - "name": "cache", - "in": "query", - "description": "True to fetch from cache, false to load fresh", - "required": false, - "type": "boolean" - }, - { - "name": "table_limit", - "in": "query", - "description": "limits the tables per schema returned", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "table_names", - "in": "query", - "description": "only fetch columns for a given (comma-separated) list of tables", - "required": false, - "type": "string" - }, - { - "name": "fields", + "name": "folder_id", "in": "query", - "description": "Requested fields.", - "required": false, + "description": "Folder id to move to.", + "required": true, "type": "string" } ], "responses": { "200": { - "description": "Columns schema for connection", + "description": "Look", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/SchemaColumns" - } + "$ref": "#/definitions/LookWithQuery" + } + }, + "201": { + "description": "look", + "schema": { + "$ref": "#/definitions/Look" } }, "400": { @@ -16792,45 +17261,37 @@ "x-looker-rate-limited": true } }, - "/connections/{connection_name}/search_columns": { - "get": { + "/looks/{look_id}/certification": { + "patch": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_search_columns", - "summary": "Search a connection for columns", - "description": "### Search a connection for columns matching the specified name\n\n**Note**: `column_name` must be a valid column name. It is not a search pattern.\n", + "operationId": "update_look_certification", + "summary": "Update Look Certification", + "description": "### Update look certification\n", "parameters": [ { - "name": "connection_name", + "name": "look_id", "in": "path", - "description": "Name of connection", + "description": "Look id to update certification.", "required": true, "type": "string" }, { - "name": "column_name", - "in": "query", - "description": "Column name to find", - "required": false, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" + "name": "body", + "in": "body", + "description": "Certification Data", + "required": true, + "schema": { + "$ref": "#/definitions/Certification" + } } ], "responses": { "200": { - "description": "Column names matching search pattern", + "description": "looks", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ColumnSearch" - } + "$ref": "#/definitions/Look" } }, "400": { @@ -16858,49 +17319,80 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/connections/{connection_name}/cost_estimate": { - "post": { + "/lookml_models": { + "get": { "tags": [ - "Metadata" + "LookmlModel" ], - "operationId": "connection_cost_estimate", - "summary": "Estimate costs for a connection", - "description": "### Connection cost estimating\n\nAssign a `sql` statement to the body of the request. e.g., for Ruby, `{sql: 'select * from users'}`\n\n**Note**: If the connection's dialect has no support for cost estimates, an error will be returned\n", + "operationId": "all_lookml_models", + "summary": "Get All LookML Models", + "description": "### Get information about all lookml models.\n", "parameters": [ { - "name": "connection_name", - "in": "path", - "description": "Name of connection", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" }, { - "name": "body", - "in": "body", - "description": "SQL statement to estimate", - "required": true, - "schema": { - "$ref": "#/definitions/CreateCostEstimate" - } + "name": "limit", + "in": "query", + "description": "Number of results to return. (can be used with offset)", + "required": false, + "type": "integer", + "format": "int64" }, { - "name": "fields", + "name": "offset", "in": "query", - "description": "Requested fields.", + "description": "Number of results to skip before returning any. (Defaults to 0 if not set when limit is used)", "required": false, - "type": "string" + "type": "integer", + "format": "int64" + }, + { + "name": "exclude_empty", + "in": "query", + "description": "Whether or not to exclude models with no explores from the response (Defaults to false)", + "required": false, + "type": "boolean" + }, + { + "name": "exclude_hidden", + "in": "query", + "description": "Whether or not to exclude hidden explores from the response (Defaults to false)", + "required": false, + "type": "boolean" + }, + { + "name": "include_internal", + "in": "query", + "description": "Whether or not to include built-in models such as System Activity (Defaults to false)", + "required": false, + "type": "boolean" + }, + { + "name": "include_self_service", + "in": "query", + "description": "Whether or not to include self service models (Defaults to false)", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Connection cost estimates", + "description": "LookML Model", "schema": { - "$ref": "#/definitions/CostEstimate" + "type": "array", + "items": { + "$ref": "#/definitions/LookmlModel" + } } }, "400": { @@ -16915,12 +17407,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -16929,23 +17415,32 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/mobile/settings": { - "get": { + }, + "post": { "tags": [ - "Config" + "LookmlModel" + ], + "operationId": "create_lookml_model", + "summary": "Create LookML Model", + "description": "### Create a lookml model using the specified configuration.\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "LookML Model", + "required": true, + "schema": { + "$ref": "#/definitions/LookmlModel" + } + } ], - "operationId": "mobile_settings", - "summary": "Get Mobile_Settings", - "description": "### Get all mobile settings.\n", "responses": { "200": { - "description": "Mobile_Settings", + "description": "LookML Model", "schema": { - "$ref": "#/definitions/MobileSettings" + "$ref": "#/definitions/LookmlModel" } }, "400": { @@ -16960,6 +17455,18 @@ "$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": { @@ -16967,35 +17474,40 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/mobile/device": { - "post": { + "/lookml_models/{lookml_model_name}": { + "get": { "tags": [ - "Auth" + "LookmlModel" ], - "operationId": "register_mobile_device", - "summary": "Register Mobile Device", - "description": "### Registers a mobile device.\n# Required fields: [:device_token, :device_type]\n", + "operationId": "lookml_model", + "summary": "Get LookML Model", + "description": "### Get information about a lookml model.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Writable device parameters.", + "name": "lookml_model_name", + "in": "path", + "description": "Name of lookml model.", "required": true, - "schema": { - "$ref": "#/definitions/MobileToken" - } + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Device registered successfully.", + "description": "LookML Model", "schema": { - "$ref": "#/definitions/MobileToken" + "$ref": "#/definitions/LookmlModel" } }, "400": { @@ -17010,18 +17522,6 @@ "$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": { @@ -17029,33 +17529,40 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/mobile/device/{device_id}": { + }, "patch": { "tags": [ - "Auth" + "LookmlModel" ], - "operationId": "update_mobile_device_registration", - "summary": "Update Mobile Device Registration", - "description": "### Updates the mobile device registration\n", + "operationId": "update_lookml_model", + "summary": "Update LookML Model", + "description": "### Update a lookml model using the specified configuration.\n", "parameters": [ { - "name": "device_id", + "name": "lookml_model_name", "in": "path", - "description": "Unique id of the device.", + "description": "Name of lookml model.", "required": true, "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "LookML Model", + "required": true, + "schema": { + "$ref": "#/definitions/LookmlModel" + } } ], "responses": { "200": { - "description": "Device registration updated successfully.", + "description": "LookML Model", "schema": { - "$ref": "#/definitions/MobileToken" + "$ref": "#/definitions/LookmlModel" } }, "400": { @@ -17083,29 +17590,32 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, "delete": { "tags": [ - "Auth" + "LookmlModel" ], - "operationId": "deregister_mobile_device", - "summary": "Deregister Mobile Device", - "description": "### Deregister a mobile device.\n", + "operationId": "delete_lookml_model", + "summary": "Delete LookML Model", + "description": "### Delete a lookml model.\n", "parameters": [ { - "name": "device_id", + "name": "lookml_model_name", "in": "path", - "description": "Unique id of the device.", + "description": "Name of lookml model.", "required": true, "type": "string" } ], "responses": { "204": { - "description": "Device de-registered successfully." + "description": "Successfully deleted.", + "schema": { + "type": "string" + } }, "400": { "description": "Bad Request", @@ -17126,101 +17636,54 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/model_sets/search": { + "/lookml_models/{lookml_model_name}/explores/{explore_name}": { "get": { "tags": [ - "Role" + "LookmlModel" ], - "operationId": "search_model_sets", - "summary": "Search Model Sets", - "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "lookml_model_explore", + "summary": "Get LookML Model Explore", + "description": "### Get information about a lookml model explore.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, + "name": "lookml_model_name", + "in": "path", + "description": "Name of lookml model.", + "required": true, "type": "string" }, { - "name": "id", - "in": "query", - "description": "Match model set id.", - "required": false, + "name": "explore_name", + "in": "path", + "description": "Name of explore.", + "required": true, "type": "string" }, { - "name": "name", + "name": "fields", "in": "query", - "description": "Match model set name.", + "description": "Requested fields.", "required": false, "type": "string" }, { - "name": "all_access", - "in": "query", - "description": "Match model sets by all_access status.", - "required": false, - "type": "boolean" - }, - { - "name": "built_in", - "in": "query", - "description": "Match model sets by built_in status.", - "required": false, - "type": "boolean" - }, - { - "name": "filter_or", + "name": "add_drills_metadata", "in": "query", - "description": "Combine given search criteria in a boolean OR expression.", + "description": "Whether response should include drill field metadata.", "required": false, "type": "boolean" - }, - { - "name": "models", - "in": "query", - "description": "Matches model sets that contain all of the specified models (comma separated). This is an experimental feature and may not yet be available on your instance.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Model Set", + "description": "LookML Model Explore", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ModelSet" - } + "$ref": "#/definitions/LookmlModelExplore" } }, "400": { @@ -17247,35 +17710,35 @@ "x-looker-rate-limited": true } }, - "/model_sets/{model_set_id}": { + "/merge_queries/{merge_query_id}": { "get": { "tags": [ - "Role" + "Query" ], - "operationId": "model_set", - "summary": "Get Model Set", - "description": "### Get information about the model set with a specific id.\n", + "operationId": "merge_query", + "summary": "Get Merge Query", + "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", "parameters": [ { - "name": "model_set_id", + "name": "merge_query_id", "in": "path", - "description": "Id of model set", + "description": "Merge Query Id", "required": true, "type": "string" }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Specified model set.", + "description": "Merge Query", "schema": { - "$ref": "#/definitions/ModelSet" + "$ref": "#/definitions/MergeQuery" } }, "400": { @@ -17298,30 +17761,41 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/merge_queries": { + "post": { "tags": [ - "Role" + "Query" ], - "operationId": "delete_model_set", - "summary": "Delete Model Set", - "description": "### Delete the model set with a specific id.\n", + "operationId": "create_merge_query", + "summary": "Create Merge Query", + "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n\n", "parameters": [ { - "name": "model_set_id", - "in": "path", - "description": "id of model set", - "required": true, + "name": "body", + "in": "body", + "description": "Merge Query", + "required": false, + "schema": { + "$ref": "#/definitions/MergeQuery" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "type": "string" } ], "responses": { - "204": { - "description": "Model set successfully deleted.", + "200": { + "description": "Merge Query", "schema": { - "type": "string" + "$ref": "#/definitions/MergeQuery" } }, "400": { @@ -17336,12 +17810,18 @@ "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -17350,39 +17830,63 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/models/{model_name}/views/{view_name}/fields/{field_name}/suggestions": { + "get": { "tags": [ - "Role" + "Metadata" ], - "operationId": "update_model_set", - "summary": "Update Model Set", - "description": "### Update information about the model set with a specific id.\n", + "operationId": "model_fieldname_suggestions", + "summary": "Model field name suggestions", + "description": "### Field name suggestions for a model and view\n\n`filters` is a string hash of values, with the key as the field name and the string value as the filter expression:\n\n```ruby\n{'users.age': '>=60'}\n```\n\nor\n\n```ruby\n{'users.age': '<30'}\n```\n\nor\n\n```ruby\n{'users.age': '=50'}\n```\n", "parameters": [ { - "name": "model_set_id", + "name": "model_name", "in": "path", - "description": "id of model set", + "description": "Name of model", "required": true, "type": "string" }, { - "name": "body", - "in": "body", - "description": "ModelSet", - "required": true, - "schema": { - "$ref": "#/definitions/ModelSet" + "name": "view_name", + "in": "path", + "description": "Name of view", + "required": true, + "type": "string" + }, + { + "name": "field_name", + "in": "path", + "description": "Name of field to use for suggestions", + "required": true, + "type": "string" + }, + { + "name": "term", + "in": "query", + "description": "Search term pattern (evaluated as as `%term%`)", + "required": false, + "type": "string" + }, + { + "name": "filters", + "in": "query", + "description": "Suggestion filters with field name keys and comparison expressions", + "required": false, + "type": "object", + "additionalProperties": { + "type": "string" } } ], "responses": { "200": { - "description": "New state for specified model set.", + "description": "Model view field suggestions", "schema": { - "$ref": "#/definitions/ModelSet" + "$ref": "#/definitions/ModelFieldSuggestions" } }, "400": { @@ -17391,28 +17895,58 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "schema": { "$ref": "#/definitions/Error" } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/models/{model_name}": { + "get": { + "tags": [ + "Metadata" + ], + "operationId": "get_model", + "summary": "Get a single model", + "description": "### Get a single model\n\n", + "parameters": [ + { + "name": "model_name", + "in": "path", + "description": "Name of model", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "A Model", + "schema": { + "$ref": "#/definitions/Model" + } }, - "405": { - "description": "Resource Can't Be Modified", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "schema": { - "$ref": "#/definitions/ValidationError" + "$ref": "#/definitions/Error" } }, "429": { @@ -17427,39 +17961,51 @@ "x-looker-rate-limited": true } }, - "/model_sets": { + "/connections/{connection_name}/databases": { "get": { "tags": [ - "Role" + "Metadata" ], - "operationId": "all_model_sets", - "summary": "Get All Model Sets", - "description": "### Get information about all model sets.\n", + "operationId": "connection_databases", + "summary": "List accessible databases to this connection", + "description": "### List databases available to this connection\n\nCertain dialects can support multiple databases per single connection.\nIf this connection supports multiple databases, the database names will be returned in an array.\n\nConnections using dialects that do not support multiple databases will return an empty array.\n\n**Note**: [Connection Features](#!/Metadata/connection_features) can be used to determine if a connection supports\nmultiple databases.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, "type": "string" } ], "responses": { "200": { - "description": "All model sets.", + "description": "Database names", "schema": { "type": "array", "items": { - "$ref": "#/definitions/ModelSet" + "type": "string" } } }, + "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": { @@ -17468,32 +18014,39 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/connections/{connection_name}/features": { + "get": { "tags": [ - "Role" + "Metadata" ], - "operationId": "create_model_set", - "summary": "Create Model Set", - "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", + "operationId": "connection_features", + "summary": "Metadata features supported by this connection", + "description": "### Retrieve metadata features for this connection\n\nReturns a list of feature names with `true` (available) or `false` (not available)\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "ModelSet", + "name": "connection_name", + "in": "path", + "description": "Name of connection", "required": true, - "schema": { - "$ref": "#/definitions/ModelSet" - } + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Newly created ModelSet", + "description": "Connection features", "schema": { - "$ref": "#/definitions/ModelSet" + "$ref": "#/definitions/ConnectionFeatures" } }, "400": { @@ -17508,12 +18061,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -17532,15 +18079,36 @@ "x-looker-rate-limited": true } }, - "/oauth_client_apps": { + "/connections/{connection_name}/schemas": { "get": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "all_oauth_client_apps", - "summary": "Get All OAuth Client Apps", - "description": "### List All OAuth Client Apps\n\nLists all applications registered to use OAuth2 login with this Looker instance, including\nenabled and disabled apps.\n\nResults are filtered to include only the apps that the caller (current user)\nhas permission to see.\n", + "operationId": "connection_schemas", + "summary": "Get schemas for a connection", + "description": "### Get the list of schemas and tables for a connection\n\n", "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "type": "string" + }, + { + "name": "database", + "in": "query", + "description": "For dialects that support multiple databases, optionally identify which to use", + "required": false, + "type": "string" + }, + { + "name": "cache", + "in": "query", + "description": "True to use fetch from cache, false to load fresh", + "required": false, + "type": "boolean" + }, { "name": "fields", "in": "query", @@ -17551,11 +18119,11 @@ ], "responses": { "200": { - "description": "OAuth Client App", + "description": "Schemas for connection", "schema": { "type": "array", "items": { - "$ref": "#/definitions/OauthClientApp" + "$ref": "#/definitions/Schema" } } }, @@ -17571,6 +18139,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -17583,35 +18157,74 @@ "x-looker-rate-limited": true } }, - "/oauth_client_apps/{client_guid}": { + "/connections/{connection_name}/tables": { "get": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "oauth_client_app", - "summary": "Get OAuth Client App", - "description": "### Get Oauth Client App\n\nReturns the registered app client with matching client_guid.\n", + "operationId": "connection_tables", + "summary": "Get tables for a connection", + "description": "### Get the list of tables for a schema\n\nFor dialects that support multiple databases, optionally identify which to use. If not provided, the default\ndatabase for the connection will be used.\n\nFor dialects that do **not** support multiple databases, **do not use** the database parameter\n", "parameters": [ { - "name": "client_guid", + "name": "connection_name", "in": "path", - "description": "The unique id of this application", + "description": "Name of connection", "required": true, "type": "string" }, + { + "name": "database", + "in": "query", + "description": "Optional. Name of database to use for the query, only if applicable", + "required": false, + "type": "string" + }, + { + "name": "schema_name", + "in": "query", + "description": "Optional. Return only tables for this schema", + "required": false, + "type": "string" + }, + { + "name": "cache", + "in": "query", + "description": "True to fetch from cache, false to load fresh", + "required": false, + "type": "boolean" + }, { "name": "fields", "in": "query", "description": "Requested fields.", "required": false, "type": "string" + }, + { + "name": "table_filter", + "in": "query", + "description": "Optional. Return tables with names that contain this value", + "required": false, + "type": "string" + }, + { + "name": "table_limit", + "in": "query", + "description": "Optional. Return tables up to the table_limit", + "required": false, + "type": "integer", + "format": "int64" } ], "responses": { "200": { - "description": "OAuth Client App", + "description": "Schemas and tables for connection", "schema": { - "$ref": "#/definitions/OauthClientApp" + "type": "array", + "items": { + "$ref": "#/definitions/SchemaTables" + } } }, "400": { @@ -17626,6 +18239,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -17636,28 +18255,76 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/connections/{connection_name}/columns": { + "get": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "delete_oauth_client_app", - "summary": "Delete OAuth Client App", - "description": "### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the\nindicated resource does not exist.\n\n### Note: this deletion cannot be undone.\n", + "operationId": "connection_columns", + "summary": "Get columns for a connection", + "description": "### Get the columns (and therefore also the tables) in a specific schema\n", "parameters": [ { - "name": "client_guid", + "name": "connection_name", "in": "path", - "description": "The unique id of this application", + "description": "Name of connection", "required": true, "type": "string" + }, + { + "name": "database", + "in": "query", + "description": "For dialects that support multiple databases, optionally identify which to use", + "required": false, + "type": "string" + }, + { + "name": "schema_name", + "in": "query", + "description": "Name of schema to use.", + "required": false, + "type": "string" + }, + { + "name": "cache", + "in": "query", + "description": "True to fetch from cache, false to load fresh", + "required": false, + "type": "boolean" + }, + { + "name": "table_limit", + "in": "query", + "description": "limits the tables per schema returned", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "table_names", + "in": "query", + "description": "only fetch columns for a given (comma-separated) list of tables", + "required": false, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Columns schema for connection", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/SchemaColumns" + } } }, "400": { @@ -17672,6 +18339,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -17682,30 +18355,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/connections/{connection_name}/search_columns": { + "get": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "register_oauth_client_app", - "summary": "Register OAuth App", - "description": "### Register an OAuth2 Client App\n\nRegisters details identifying an external web app or native app as an OAuth2 login client of the Looker instance.\nThe app registration must provide a unique client_guid and redirect_uri that the app will present\nin OAuth login requests. If the client_guid and redirect_uri parameters in the login request do not match\nthe app details registered with the Looker instance, the request is assumed to be a forgery and is rejected.\n", + "operationId": "connection_search_columns", + "summary": "Search a connection for columns", + "description": "### Search a connection for columns matching the specified name\n\n**Note**: `column_name` must be a valid column name. It is not a search pattern.\n", "parameters": [ { - "name": "client_guid", + "name": "connection_name", "in": "path", - "description": "The unique id of this application", + "description": "Name of connection", "required": true, "type": "string" }, { - "name": "body", - "in": "body", - "description": "OAuth Client App", - "required": true, - "schema": { - "$ref": "#/definitions/OauthClientApp" - } + "name": "column_name", + "in": "query", + "description": "Column name to find", + "required": false, + "type": "string" }, { "name": "fields", @@ -17717,9 +18390,12 @@ ], "responses": { "200": { - "description": "OAuth Client App", + "description": "Column names matching search pattern", "schema": { - "$ref": "#/definitions/OauthClientApp" + "type": "array", + "items": { + "$ref": "#/definitions/ColumnSearch" + } } }, "400": { @@ -17734,12 +18410,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -17756,29 +18426,31 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/connections/{connection_name}/cost_estimate": { + "post": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "update_oauth_client_app", - "summary": "Update OAuth App", - "description": "### Update OAuth2 Client App Details\n\nModifies the details a previously registered OAuth2 login client app.\n", + "operationId": "connection_cost_estimate", + "summary": "Estimate costs for a connection", + "description": "### Connection cost estimating\n\nAssign a `sql` statement to the body of the request. e.g., for Ruby, `{sql: 'select * from users'}`\n\n**Note**: If the connection's dialect has no support for cost estimates, an error will be returned\n", "parameters": [ { - "name": "client_guid", + "name": "connection_name", "in": "path", - "description": "The unique id of this application", + "description": "Name of connection", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "OAuth Client App", + "description": "SQL statement to estimate", "required": true, "schema": { - "$ref": "#/definitions/OauthClientApp" + "$ref": "#/definitions/CreateCostEstimate" } }, { @@ -17791,9 +18463,9 @@ ], "responses": { "200": { - "description": "OAuth Client App", + "description": "Connection cost estimates", "schema": { - "$ref": "#/definitions/OauthClientApp" + "$ref": "#/definitions/CostEstimate" } }, "400": { @@ -17822,32 +18494,23 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/oauth_client_apps/{client_guid}/tokens": { - "delete": { + "/mobile/settings": { + "get": { "tags": [ - "Auth" - ], - "operationId": "invalidate_tokens", - "summary": "Invalidate Tokens", - "description": "### Invalidate All Issued Tokens\n\nImmediately invalidates all auth codes, sessions, access tokens and refresh tokens issued for\nthis app for ALL USERS of this app.\n", - "parameters": [ - { - "name": "client_guid", - "in": "path", - "description": "The unique id of the application", - "required": true, - "type": "string" - } + "Config" ], + "operationId": "mobile_settings", + "summary": "Get Mobile_Settings", + "description": "### Get all mobile settings.\n", "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Mobile_Settings", "schema": { - "type": "string" + "$ref": "#/definitions/MobileSettings" } }, "400": { @@ -17874,47 +18537,32 @@ "x-looker-rate-limited": true } }, - "/oauth_client_apps/{client_guid}/users/{user_id}": { + "/mobile/device": { "post": { "tags": [ "Auth" ], - "operationId": "activate_app_user", - "summary": "Activate OAuth App User", - "description": "### Activate an app for a user\n\nActivates a user for a given oauth client app. This indicates the user has been informed that\nthe app will have access to the user's looker data, and that the user has accepted and allowed\nthe app to use their Looker account.\n\nActivating a user for an app that the user is already activated with returns a success response.\n", + "operationId": "register_mobile_device", + "summary": "Register Mobile Device", + "description": "### Registers a mobile device.\n# Required fields: [:device_token, :device_type]\n", "parameters": [ { - "name": "client_guid", - "in": "path", - "description": "The unique id of this application", - "required": true, - "type": "string" - }, - { - "name": "user_id", - "in": "path", - "description": "The id of the user to enable use of this app", + "name": "body", + "in": "body", + "description": "Writable device parameters.", "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" + "schema": { + "$ref": "#/definitions/MobileToken" + } } ], "responses": { "200": { - "description": "OAuth Client App", + "description": "Device registered successfully.", "schema": { - "type": "string" + "$ref": "#/definitions/MobileToken" } }, - "204": { - "description": "Deleted" - }, "400": { "description": "Bad Request", "schema": { @@ -17927,6 +18575,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -17943,42 +18597,30 @@ "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/mobile/device/{device_id}": { + "patch": { "tags": [ "Auth" ], - "operationId": "deactivate_app_user", - "summary": "Deactivate OAuth App User", - "description": "### Deactivate an app for a user\n\nDeactivate a user for a given oauth client app. All tokens issued to the app for\nthis user will be invalid immediately. Before the user can use the app with their\nLooker account, the user will have to read and accept an account use disclosure statement for the app.\n\nAdmin users can deactivate other users, but non-admin users can only deactivate themselves.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the indicated\nresource (app or user) does not exist or has already been deactivated.\n", + "operationId": "update_mobile_device_registration", + "summary": "Update Mobile Device Registration", + "description": "### Updates the mobile device registration\n", "parameters": [ { - "name": "client_guid", - "in": "path", - "description": "The unique id of this application", - "required": true, - "type": "string" - }, - { - "name": "user_id", + "name": "device_id", "in": "path", - "description": "The id of the user to enable use of this app", + "description": "Unique id of the device.", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Device registration updated successfully.", "schema": { - "type": "string" + "$ref": "#/definitions/MobileToken" } }, "400": { @@ -17993,6 +18635,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -18003,25 +18651,29 @@ "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/oidc_config": { - "get": { + }, + "delete": { "tags": [ "Auth" ], - "operationId": "oidc_config", - "summary": "Get OIDC Configuration", - "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "deregister_mobile_device", + "summary": "Deregister Mobile Device", + "description": "### Deregister a mobile device.\n", + "parameters": [ + { + "name": "device_id", + "in": "path", + "description": "Unique id of the device.", + "required": true, + "type": "string" + } + ], "responses": { - "200": { - "description": "OIDC Configuration.", - "schema": { - "$ref": "#/definitions/OIDCConfig" - } + "204": { + "description": "Device de-registered successfully." }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -18039,33 +18691,101 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/model_sets/search": { + "get": { "tags": [ - "Auth" + "Role" ], - "operationId": "update_oidc_config", - "summary": "Update OIDC Configuration", - "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "search_model_sets", + "summary": "Search Model Sets", + "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "OIDC Config", - "required": true, - "schema": { - "$ref": "#/definitions/OIDCConfig" - } + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "id", + "in": "query", + "description": "Match model set id.", + "required": false, + "type": "string" + }, + { + "name": "name", + "in": "query", + "description": "Match model set name.", + "required": false, + "type": "string" + }, + { + "name": "all_access", + "in": "query", + "description": "Match model sets by all_access status.", + "required": false, + "type": "boolean" + }, + { + "name": "built_in", + "in": "query", + "description": "Match model sets by built_in status.", + "required": false, + "type": "boolean" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "type": "boolean" + }, + { + "name": "models", + "in": "query", + "description": "Matches model sets that contain all of the specified models (comma separated). This is an experimental feature and may not yet be available on your instance.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "New state for OIDC Configuration.", + "description": "Model Set", "schema": { - "$ref": "#/definitions/OIDCConfig" + "type": "array", + "items": { + "$ref": "#/definitions/ModelSet" + } } }, "400": { @@ -18074,24 +18794,12 @@ "$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": { @@ -18104,32 +18812,39 @@ "x-looker-rate-limited": true } }, - "/oidc_test_configs/{test_slug}": { + "/model_sets/{model_set_id}": { "get": { "tags": [ - "Auth" + "Role" ], - "operationId": "oidc_test_config", - "summary": "Get OIDC Test Configuration", - "description": "### Get a OIDC test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "model_set", + "summary": "Get Model Set", + "description": "### Get information about the model set with a specific id.\n", "parameters": [ { - "name": "test_slug", + "name": "model_set_id", "in": "path", - "description": "Slug of test config", + "description": "Id of model set", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "OIDC test config.", + "description": "Specified model set.", "schema": { - "$ref": "#/definitions/OIDCConfig" + "$ref": "#/definitions/ModelSet" } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -18153,23 +18868,23 @@ }, "delete": { "tags": [ - "Auth" + "Role" ], - "operationId": "delete_oidc_test_config", - "summary": "Delete OIDC Test Configuration", - "description": "### Delete a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "delete_model_set", + "summary": "Delete Model Set", + "description": "### Delete the model set with a specific id.\n", "parameters": [ { - "name": "test_slug", + "name": "model_set_id", "in": "path", - "description": "Slug of test config", + "description": "id of model set", "required": true, "type": "string" } ], "responses": { "204": { - "description": "Test config succssfully deleted.", + "description": "Model set successfully deleted.", "schema": { "type": "string" } @@ -18180,18 +18895,24 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "405": { + "description": "Resource Can't Be Modified", "schema": { "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -18202,32 +18923,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/oidc_test_configs": { - "post": { + }, + "patch": { "tags": [ - "Auth" + "Role" ], - "operationId": "create_oidc_test_config", - "summary": "Create OIDC Test Configuration", - "description": "### Create a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "update_model_set", + "summary": "Update Model Set", + "description": "### Update information about the model set with a specific id.\n", "parameters": [ + { + "name": "model_set_id", + "in": "path", + "description": "id of model set", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "OIDC test config", + "description": "ModelSet", "required": true, "schema": { - "$ref": "#/definitions/OIDCConfig" + "$ref": "#/definitions/ModelSet" } } ], "responses": { "200": { - "description": "OIDC test config", + "description": "New state for specified model set.", "schema": { - "$ref": "#/definitions/OIDCConfig" + "$ref": "#/definitions/ModelSet" } }, "400": { @@ -18248,6 +18974,12 @@ "$ref": "#/definitions/Error" } }, + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -18266,31 +18998,31 @@ "x-looker-rate-limited": true } }, - "/password_config": { + "/model_sets": { "get": { "tags": [ - "Auth" + "Role" + ], + "operationId": "all_model_sets", + "summary": "Get All Model Sets", + "description": "### Get information about all model sets.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } ], - "operationId": "password_config", - "summary": "Get Password Config", - "description": "### Get password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Password Config", - "schema": { - "$ref": "#/definitions/PasswordConfig" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "403": { - "description": "Permission Denied", + "description": "All model sets.", "schema": { - "$ref": "#/definitions/Error" + "type": "array", + "items": { + "$ref": "#/definitions/ModelSet" + } } }, "404": { @@ -18310,29 +19042,29 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "Auth" + "Role" ], - "operationId": "update_password_config", - "summary": "Update Password Config", - "description": "### Update password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "create_model_set", + "summary": "Create Model Set", + "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", "parameters": [ { "name": "body", "in": "body", - "description": "Password Config", + "description": "ModelSet", "required": true, "schema": { - "$ref": "#/definitions/PasswordConfig" + "$ref": "#/definitions/ModelSet" } } ], "responses": { "200": { - "description": "Password Config", + "description": "Newly created ModelSet", "schema": { - "$ref": "#/definitions/PasswordConfig" + "$ref": "#/definitions/ModelSet" } }, "400": { @@ -18341,14 +19073,14 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } @@ -18371,19 +19103,31 @@ "x-looker-rate-limited": true } }, - "/password_config/force_password_reset_at_next_login_for_all_users": { - "put": { + "/oauth_client_apps": { + "get": { "tags": [ "Auth" ], - "operationId": "force_password_reset_at_next_login_for_all_users", - "summary": "Force password reset", - "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "all_oauth_client_apps", + "summary": "Get All OAuth Client Apps", + "description": "### List All OAuth Client Apps\n\nLists all applications registered to use OAuth2 login with this Looker instance, including\nenabled and disabled apps.\n\nResults are filtered to include only the apps that the caller (current user)\nhas permission to see.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } + ], "responses": { "200": { - "description": "Password Config", + "description": "OAuth Client App", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/OauthClientApp" + } } }, "400": { @@ -18392,24 +19136,12 @@ "$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": { @@ -18422,22 +19154,35 @@ "x-looker-rate-limited": true } }, - "/permissions": { + "/oauth_client_apps/{client_guid}": { "get": { "tags": [ - "Role" + "Auth" + ], + "operationId": "oauth_client_app", + "summary": "Get OAuth Client App", + "description": "### Get Oauth Client App\n\nReturns the registered app client with matching client_guid.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } ], - "operationId": "all_permissions", - "summary": "Get All Permissions", - "description": "### Get all supported permissions.\n", "responses": { "200": { - "description": "Permission", + "description": "OAuth Client App", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Permission" - } + "$ref": "#/definitions/OauthClientApp" } }, "400": { @@ -18462,98 +19207,28 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/permission_sets/search": { - "get": { + }, + "delete": { "tags": [ - "Role" + "Auth" ], - "operationId": "search_permission_sets", - "summary": "Search Permission Sets", - "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "delete_oauth_client_app", + "summary": "Delete OAuth Client App", + "description": "### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the\nindicated resource does not exist.\n\n### Note: this deletion cannot be undone.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "query", - "description": "Match permission set id.", - "required": false, - "type": "string" - }, - { - "name": "name", - "in": "query", - "description": "Match permission set name.", - "required": false, - "type": "string" - }, - { - "name": "all_access", - "in": "query", - "description": "Match permission sets by all_access status.", - "required": false, - "type": "boolean" - }, - { - "name": "built_in", - "in": "query", - "description": "Match permission sets by built_in status.", - "required": false, - "type": "boolean" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression.", - "required": false, - "type": "boolean" - }, - { - "name": "permissions", - "in": "query", - "description": "Matches permission sets that contain all of the specified permissions (comma separated). This is an experimental feature and may not yet be available on your instance.", - "required": false, + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, "type": "string" } ], "responses": { - "200": { - "description": "Permission Set", + "204": { + "description": "Successfully deleted.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/PermissionSet" - } + "type": "string" } }, "400": { @@ -18578,24 +19253,31 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/permission_sets/{permission_set_id}": { - "get": { + }, + "post": { "tags": [ - "Role" + "Auth" ], - "operationId": "permission_set", - "summary": "Get Permission Set", - "description": "### Get information about the permission set with a specific id.\n", + "operationId": "register_oauth_client_app", + "summary": "Register OAuth App", + "description": "### Register an OAuth2 Client App\n\nRegisters details identifying an external web app or native app as an OAuth2 login client of the Looker instance.\nThe app registration must provide a unique client_guid and redirect_uri that the app will present\nin OAuth login requests. If the client_guid and redirect_uri parameters in the login request do not match\nthe app details registered with the Looker instance, the request is assumed to be a forgery and is rejected.\n", "parameters": [ { - "name": "permission_set_id", + "name": "client_guid", "in": "path", - "description": "Id of permission set", + "description": "The unique id of this application", "required": true, "type": "string" }, + { + "name": "body", + "in": "body", + "description": "OAuth Client App", + "required": true, + "schema": { + "$ref": "#/definitions/OauthClientApp" + } + }, { "name": "fields", "in": "query", @@ -18606,9 +19288,9 @@ ], "responses": { "200": { - "description": "Permission Set", + "description": "OAuth Client App", "schema": { - "$ref": "#/definitions/PermissionSet" + "$ref": "#/definitions/OauthClientApp" } }, "400": { @@ -18623,56 +19305,16 @@ "$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 - }, - "delete": { - "tags": [ - "Role" - ], - "operationId": "delete_permission_set", - "summary": "Delete Permission Set", - "description": "### Delete the permission set with a specific id.\n", - "parameters": [ - { - "name": "permission_set_id", - "in": "path", - "description": "Id of permission set", - "required": true, - "type": "string" - } - ], - "responses": { - "204": { - "description": "Successfully deleted.", - "schema": { - "type": "string" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", + "422": { + "description": "Validation Error", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/ValidationError" } }, "429": { @@ -18688,34 +19330,41 @@ }, "patch": { "tags": [ - "Role" + "Auth" ], - "operationId": "update_permission_set", - "summary": "Update Permission Set", - "description": "### Update information about the permission set with a specific id.\nProviding save_content permission alone will also provide you the abilities of save_looks and save_dashboards.\n", + "operationId": "update_oauth_client_app", + "summary": "Update OAuth App", + "description": "### Update OAuth2 Client App Details\n\nModifies the details a previously registered OAuth2 login client app.\n", "parameters": [ { - "name": "permission_set_id", + "name": "client_guid", "in": "path", - "description": "Id of permission set", + "description": "The unique id of this application", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Permission Set", + "description": "OAuth Client App", "required": true, "schema": { - "$ref": "#/definitions/PermissionSet" + "$ref": "#/definitions/OauthClientApp" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Permission Set", + "description": "OAuth Client App", "schema": { - "$ref": "#/definitions/PermissionSet" + "$ref": "#/definitions/OauthClientApp" } }, "400": { @@ -18730,12 +19379,6 @@ "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -18754,31 +19397,28 @@ "x-looker-rate-limited": true } }, - "/permission_sets": { - "get": { + "/oauth_client_apps/{client_guid}/tokens": { + "delete": { "tags": [ - "Role" + "Auth" ], - "operationId": "all_permission_sets", - "summary": "Get All Permission Sets", - "description": "### Get information about all permission sets.\n", + "operationId": "invalidate_tokens", + "summary": "Invalidate Tokens", + "description": "### Invalidate All Issued Tokens\n\nImmediately invalidates all auth codes, sessions, access tokens and refresh tokens issued for\nthis app for ALL USERS of this app.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "client_guid", + "in": "path", + "description": "The unique id of the application", + "required": true, "type": "string" } ], "responses": { - "200": { - "description": "Permission Set", + "204": { + "description": "Successfully deleted.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/PermissionSet" - } + "type": "string" } }, "400": { @@ -18800,35 +19440,52 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/oauth_client_apps/{client_guid}/users/{user_id}": { "post": { "tags": [ - "Role" + "Auth" ], - "operationId": "create_permission_set", - "summary": "Create Permission Set", - "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\nProviding save_content permission alone will also provide you the abilities of save_looks and save_dashboards.\n", + "operationId": "activate_app_user", + "summary": "Activate OAuth App User", + "description": "### Activate an app for a user\n\nActivates a user for a given oauth client app. This indicates the user has been informed that\nthe app will have access to the user's looker data, and that the user has accepted and allowed\nthe app to use their Looker account.\n\nActivating a user for an app that the user is already activated with returns a success response.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Permission Set", + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", "required": true, - "schema": { - "$ref": "#/definitions/PermissionSet" - } + "type": "string" + }, + { + "name": "user_id", + "in": "path", + "description": "The id of the user to enable use of this app", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Permission Set", + "description": "OAuth Client App", "schema": { - "$ref": "#/definitions/PermissionSet" + "type": "string" } }, + "204": { + "description": "Deleted" + }, "400": { "description": "Bad Request", "schema": { @@ -18841,18 +19498,6 @@ "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -18866,52 +19511,47 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/deploy_ref_to_production": { - "post": { + }, + "delete": { "tags": [ - "Project" + "Auth" ], - "operationId": "deploy_ref_to_production", - "summary": "Deploy Remote Branch or Ref to Production", - "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", + "operationId": "deactivate_app_user", + "summary": "Deactivate OAuth App User", + "description": "### Deactivate an app for a user\n\nDeactivate a user for a given oauth client app. All tokens issued to the app for\nthis user will be invalid immediately. Before the user can use the app with their\nLooker account, the user will have to read and accept an account use disclosure statement for the app.\n\nAdmin users can deactivate other users, but non-admin users can only deactivate themselves.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the indicated\nresource (app or user) does not exist or has already been deactivated.\n", "parameters": [ { - "name": "project_id", + "name": "client_guid", "in": "path", - "description": "Id of project", + "description": "The unique id of this application", "required": true, "type": "string" }, { - "name": "branch", - "in": "query", - "description": "Branch to deploy to production", - "required": false, + "name": "user_id", + "in": "path", + "description": "The id of the user to enable use of this app", + "required": true, "type": "string" }, { - "name": "ref", + "name": "fields", "in": "query", - "description": "Ref to deploy to production", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { - "200": { - "description": "Project", + "204": { + "description": "Successfully deleted.", "schema": { "type": "string" } }, - "204": { - "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "schema": { @@ -18924,12 +19564,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -18937,51 +19571,28 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects/{project_id}/async_deploy_ref_to_production": { - "post": { + "/oidc_config": { + "get": { "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" - } + "Auth" ], + "operationId": "oidc_config", + "summary": "Get OIDC Configuration", + "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Returns 200 if project deploy was successfully queued", + "description": "OIDC Configuration.", "schema": { - "$ref": "#/definitions/AsyncDeployResponse" + "$ref": "#/definitions/OIDCConfig" } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } @@ -18992,12 +19603,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -19005,41 +19610,33 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/deploy_status/{deployment_id}": { - "get": { + }, + "patch": { "tags": [ - "Project" + "Auth" ], - "operationId": "async_deploy_status", - "summary": "Check Async Deploy Status", - "description": "### Check Status of Asynchronous Deploy\nGet the status of an asynchronous deploy operation.\n", + "operationId": "update_oidc_config", + "summary": "Update OIDC Configuration", + "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Id of project", - "required": true, - "type": "string" - }, - { - "name": "deployment_id", - "in": "path", - "description": "Id of deployment", + "name": "body", + "in": "body", + "description": "OIDC Config", "required": true, - "type": "integer", - "format": "int64" + "schema": { + "$ref": "#/definitions/OIDCConfig" + } } ], "responses": { "200": { - "description": "Returns 200 if status was successfully retrieved", + "description": "New state for OIDC Configuration.", "schema": { - "$ref": "#/definitions/DeployStatusResponse" + "$ref": "#/definitions/OIDCConfig" } }, "400": { @@ -19048,12 +19645,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": { @@ -19061,40 +19670,37 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects/{project_id}/deploy_to_production": { - "post": { + "/oidc_test_configs/{test_slug}": { + "get": { "tags": [ - "Project" + "Auth" ], - "operationId": "deploy_to_production", - "summary": "Deploy To Production", - "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", + "operationId": "oidc_test_config", + "summary": "Get OIDC Test Configuration", + "description": "### Get a OIDC test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "project_id", + "name": "test_slug", "in": "path", - "description": "Id of project", + "description": "Slug of test config", "required": true, "type": "string" } ], "responses": { "200": { - "description": "Project", + "description": "OIDC test config.", "schema": { - "type": "string" + "$ref": "#/definitions/OIDCConfig" } }, - "204": { - "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" - }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } @@ -19105,12 +19711,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -19121,51 +19721,46 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/reset_to_production": { - "post": { + }, + "delete": { "tags": [ - "Project" + "Auth" ], - "operationId": "reset_project_to_production", - "summary": "Reset To Production", - "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", + "operationId": "delete_oidc_test_config", + "summary": "Delete OIDC Test Configuration", + "description": "### Delete a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "project_id", + "name": "test_slug", "in": "path", - "description": "Id of project", + "description": "Slug of test config", "required": true, "type": "string" } ], "responses": { - "200": { - "description": "Project", + "204": { + "description": "Test config succssfully deleted.", "schema": { "type": "string" } }, - "204": { - "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "schema": { - "$ref": "#/definitions/ValidationError" + "$ref": "#/definitions/Error" } }, "429": { @@ -19180,39 +19775,44 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/reset_to_remote": { + "/oidc_test_configs": { "post": { "tags": [ - "Project" + "Auth" ], - "operationId": "reset_project_to_remote", - "summary": "Reset To Remote", - "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", + "operationId": "create_oidc_test_config", + "summary": "Create OIDC Test Configuration", + "description": "### Create a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Id of project", + "name": "body", + "in": "body", + "description": "OIDC test config", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/OIDCConfig" + } } ], "responses": { "200": { - "description": "Project", + "description": "OIDC test config", "schema": { - "type": "string" + "$ref": "#/definitions/OIDCConfig" } }, - "204": { - "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -19237,31 +19837,19 @@ "x-looker-rate-limited": true } }, - "/projects": { + "/password_config": { "get": { "tags": [ - "Project" - ], - "operationId": "all_projects", - "summary": "Get All Projects", - "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "type": "string" - } + "Auth" ], + "operationId": "password_config", + "summary": "Get Password Config", + "description": "### Get password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Project", + "description": "Password Config", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Project" - } + "$ref": "#/definitions/PasswordConfig" } }, "400": { @@ -19293,29 +19881,29 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "patch": { "tags": [ - "Project" + "Auth" ], - "operationId": "create_project", - "summary": "Create Project", - "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", + "operationId": "update_password_config", + "summary": "Update Password Config", + "description": "### Update password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", "in": "body", - "description": "Project", + "description": "Password Config", "required": true, "schema": { - "$ref": "#/definitions/Project" + "$ref": "#/definitions/PasswordConfig" } } ], "responses": { "200": { - "description": "Project", + "description": "Password Config", "schema": { - "$ref": "#/definitions/Project" + "$ref": "#/definitions/PasswordConfig" } }, "400": { @@ -19324,14 +19912,14 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } @@ -19354,35 +19942,19 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}": { - "get": { + "/password_config/force_password_reset_at_next_login_for_all_users": { + "put": { "tags": [ - "Project" - ], - "operationId": "project", - "summary": "Get Project", - "description": "### Get A Project\n\nReturns the project with the given project id\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "type": "string" - } + "Auth" ], + "operationId": "force_password_reset_at_next_login_for_all_users", + "summary": "Force password reset", + "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Project", + "description": "Password Config", "schema": { - "$ref": "#/definitions/Project" + "type": "string" } }, "400": { @@ -19403,6 +19975,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -19413,44 +19991,24 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/permissions": { + "get": { "tags": [ - "Project" - ], - "operationId": "update_project", - "summary": "Update Project", - "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nNote that Looker will validate the git connection when the `git_remote_url` is modified.\nIf Looker cannot connect to the remote repository (e.g. because the deploy key has not\nbeen added), the update will fail with a 400 Bad Request error.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Project", - "required": true, - "schema": { - "$ref": "#/definitions/Project" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "type": "string" - } + "Role" ], + "operationId": "all_permissions", + "summary": "Get All Permissions", + "description": "### Get all supported permissions.\n", "responses": { "200": { - "description": "Project", + "description": "Permission", "schema": { - "$ref": "#/definitions/Project" + "type": "array", + "items": { + "$ref": "#/definitions/Permission" + } } }, "400": { @@ -19465,29 +20023,11 @@ "$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" } - }, - "500": { - "description": "Server Error", - "schema": { - "$ref": "#/definitions/Error" - } } }, "x-looker-status": "stable", @@ -19495,28 +20035,96 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/manifest": { + "/permission_sets/search": { "get": { "tags": [ - "Project" + "Role" ], - "operationId": "manifest", - "summary": "Get Manifest", - "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", + "operationId": "search_permission_sets", + "summary": "Search Permission Sets", + "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "id", + "in": "query", + "description": "Match permission set id.", + "required": false, + "type": "string" + }, + { + "name": "name", + "in": "query", + "description": "Match permission set name.", + "required": false, + "type": "string" + }, + { + "name": "all_access", + "in": "query", + "description": "Match permission sets by all_access status.", + "required": false, + "type": "boolean" + }, + { + "name": "built_in", + "in": "query", + "description": "Match permission sets by built_in status.", + "required": false, + "type": "boolean" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "type": "boolean" + }, + { + "name": "permissions", + "in": "query", + "description": "Matches permission sets that contain all of the specified permissions (comma separated). This is an experimental feature and may not yet be available on your instance.", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "Manifest", + "description": "Permission Set", "schema": { - "$ref": "#/definitions/Manifest" + "type": "array", + "items": { + "$ref": "#/definitions/PermissionSet" + } } }, "400": { @@ -19543,31 +20151,35 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/git/deploy_key": { - "post": { + "/permission_sets/{permission_set_id}": { + "get": { "tags": [ - "Project" - ], - "operationId": "create_git_deploy_key", - "summary": "Create Deploy Key", - "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", - "produces": [ - "text/plain" + "Role" ], + "operationId": "permission_set", + "summary": "Get Permission Set", + "description": "### Get information about the permission set with a specific id.\n", "parameters": [ { - "name": "project_id", + "name": "permission_set_id", "in": "path", - "description": "Project Id", + "description": "Id of permission set", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Project", + "description": "Permission Set", "schema": { - "type": "string" + "$ref": "#/definitions/PermissionSet" } }, "400": { @@ -19582,18 +20194,6 @@ "$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": { @@ -19605,28 +20205,25 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "get": { + "delete": { "tags": [ - "Project" - ], - "operationId": "git_deploy_key", - "summary": "Git Deploy Key", - "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", - "produces": [ - "text/plain" + "Role" ], + "operationId": "delete_permission_set", + "summary": "Delete Permission Set", + "description": "### Delete the permission set with a specific id.\n", "parameters": [ { - "name": "project_id", + "name": "permission_set_id", "in": "path", - "description": "Project Id", + "description": "Id of permission set", "required": true, "type": "string" } ], "responses": { - "200": { - "description": "The text of the public key portion of the deploy_key", + "204": { + "description": "Successfully deleted.", "schema": { "type": "string" } @@ -19643,6 +20240,18 @@ "$ref": "#/definitions/Error" } }, + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -19653,37 +20262,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/validate": { - "post": { + }, + "patch": { "tags": [ - "Project" + "Role" ], - "operationId": "validate_project", - "summary": "Validate Project", - "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", + "operationId": "update_permission_set", + "summary": "Update Permission Set", + "description": "### Update information about the permission set with a specific id.\nProviding save_content permission alone will also provide you the abilities of save_looks and save_dashboards.\n", "parameters": [ { - "name": "project_id", + "name": "permission_set_id", "in": "path", - "description": "Project Id", + "description": "Id of permission set", "required": true, "type": "string" }, { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "type": "string" + "name": "body", + "in": "body", + "description": "Permission Set", + "required": true, + "schema": { + "$ref": "#/definitions/PermissionSet" + } } ], "responses": { "200": { - "description": "Project validation results", + "description": "Permission Set", "schema": { - "$ref": "#/definitions/ProjectValidation" + "$ref": "#/definitions/PermissionSet" } }, "400": { @@ -19698,6 +20307,12 @@ "$ref": "#/definitions/Error" } }, + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -19714,40 +20329,35 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/permission_sets": { "get": { "tags": [ - "Project" + "Role" ], - "operationId": "project_validation_results", - "summary": "Cached Project Validation Results", - "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", + "operationId": "all_permission_sets", + "summary": "Get All Permission Sets", + "description": "### Get information about all permission sets.\n", "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - }, { "name": "fields", "in": "query", - "description": "Requested fields", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Project validation results", + "description": "Permission Set", "schema": { - "$ref": "#/definitions/ProjectValidationCache" + "type": "array", + "items": { + "$ref": "#/definitions/PermissionSet" + } } }, - "204": { - "description": "Deleted" - }, "400": { "description": "Bad Request", "schema": { @@ -19770,37 +20380,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/current_workspace": { - "get": { + }, + "post": { "tags": [ - "Project" + "Role" ], - "operationId": "project_workspace", - "summary": "Get Project Workspace", - "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", + "operationId": "create_permission_set", + "summary": "Create Permission Set", + "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\nProviding save_content permission alone will also provide you the abilities of save_looks and save_dashboards.\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", + "name": "body", + "in": "body", + "description": "Permission Set", "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "type": "string" + "schema": { + "$ref": "#/definitions/PermissionSet" + } } ], "responses": { "200": { - "description": "Project Workspace", + "description": "Permission Set", "schema": { - "$ref": "#/definitions/ProjectWorkspace" + "$ref": "#/definitions/PermissionSet" } }, "400": { @@ -19815,6 +20418,24 @@ "$ref": "#/definitions/Error" } }, + "405": { + "description": "Resource Can't Be Modified", + "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": { @@ -19827,56 +20448,63 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/files": { - "get": { + "/projects/{project_id}/deploy_ref_to_production": { + "post": { "tags": [ "Project" ], - "operationId": "all_project_files", - "summary": "Get All Project Files", - "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", + "operationId": "deploy_ref_to_production", + "summary": "Deploy Remote Branch or Ref to Production", + "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", "parameters": [ { "name": "project_id", "in": "path", - "description": "Project Id", + "description": "Id of project", "required": true, "type": "string" }, { - "name": "fields", + "name": "branch", "in": "query", - "description": "Requested fields", + "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": "Project File", + "description": "Project", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ProjectFile" - } + "type": "string" } }, + "204": { + "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/ValidationError" } }, "429": { @@ -19891,42 +20519,42 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/files/file": { - "get": { + "/projects/{project_id}/async_deploy_ref_to_production": { + "post": { "tags": [ "Project" ], - "operationId": "project_file", - "summary": "Get Project File", - "description": "### Get Project File Info\n\nReturns information about a file in the project\n", + "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": "Project Id", + "description": "Id of project", "required": true, "type": "string" }, { - "name": "file_id", + "name": "branch", "in": "query", - "description": "File Id", - "required": true, + "description": "Branch to deploy to production", + "required": false, "type": "string" }, { - "name": "fields", + "name": "ref", "in": "query", - "description": "Requested fields", + "description": "Ref to deploy to production", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Project File", + "description": "Returns 200 if project deploy was successfully queued", "schema": { - "$ref": "#/definitions/ProjectFile" + "$ref": "#/definitions/AsyncDeployResponse" } }, "400": { @@ -19941,6 +20569,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -19948,43 +20582,41 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_connection_tests": { + "/projects/{project_id}/deploy_status/{deployment_id}": { "get": { "tags": [ "Project" ], - "operationId": "all_git_connection_tests", - "summary": "Get All Git Connection Tests", - "description": "### Get All Git Connection Tests\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", + "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": "Project Id", + "description": "Id of project", "required": true, "type": "string" }, { - "name": "remote_url", - "in": "query", - "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", - "required": false, - "type": "string" + "name": "deployment_id", + "in": "path", + "description": "Id of deployment", + "required": true, + "type": "integer", + "format": "int64" } ], "responses": { "200": { - "description": "Git Connection Test", + "description": "Returns 200 if status was successfully retrieved", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/GitConnectionTest" - } + "$ref": "#/definitions/DeployStatusResponse" } }, "400": { @@ -20006,56 +20638,38 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_connection_tests/{test_id}": { - "get": { + "/projects/{project_id}/deploy_to_production": { + "post": { "tags": [ "Project" ], - "operationId": "run_git_connection_test", - "summary": "Run Git Connection Test", - "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", + "operationId": "deploy_to_production", + "summary": "Deploy To Production", + "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", "parameters": [ { "name": "project_id", "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - }, - { - "name": "test_id", - "in": "path", - "description": "Test Id", + "description": "Id of project", "required": true, "type": "string" - }, - { - "name": "remote_url", - "in": "query", - "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", - "required": false, - "type": "string" - }, - { - "name": "use_production", - "in": "query", - "description": "(Optional: leave blank for dev credentials) Whether to use git production credentials.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Git Connection Test Result", + "description": "Project", "schema": { - "$ref": "#/definitions/GitConnectionTestResult" + "type": "string" } }, + "204": { + "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "schema": { @@ -20086,40 +20700,33 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/lookml_tests": { - "get": { + "/projects/{project_id}/reset_to_production": { + "post": { "tags": [ "Project" ], - "operationId": "all_lookml_tests", - "summary": "Get All LookML Tests", - "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", + "operationId": "reset_project_to_production", + "summary": "Reset To Production", + "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", "parameters": [ { "name": "project_id", "in": "path", - "description": "Project Id", + "description": "Id of project", "required": true, "type": "string" - }, - { - "name": "file_id", - "in": "query", - "description": "File Id", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "LookML Test", + "description": "Project", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/LookmlTest" - } + "type": "string" } }, + "204": { + "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "schema": { @@ -20132,6 +20739,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -20144,54 +20757,33 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/lookml_tests/run": { - "get": { + "/projects/{project_id}/reset_to_remote": { + "post": { "tags": [ "Project" ], - "operationId": "run_lookml_test", - "summary": "Run LookML Test", - "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", + "operationId": "reset_project_to_remote", + "summary": "Reset To Remote", + "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", "parameters": [ { "name": "project_id", "in": "path", - "description": "Project Id", + "description": "Id of project", "required": true, "type": "string" - }, - { - "name": "file_id", - "in": "query", - "description": "File Name", - "required": false, - "type": "string" - }, - { - "name": "test", - "in": "query", - "description": "Test Name", - "required": false, - "type": "string" - }, - { - "name": "model", - "in": "query", - "description": "Model Name", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "LookML Test Results", + "description": "Project", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/LookmlTestResult" - } + "type": "string" } }, + "204": { + "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "schema": { @@ -20222,63 +20814,30 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/tag": { + "/projects/{project_id}/pull_from_production": { "post": { "tags": [ "Project" ], - "operationId": "tag_ref", - "summary": "Tag Ref", - "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n", + "operationId": "pull_project_from_production", + "summary": "Pull from Production", + "description": "### Pull from Production\nPulls changes from the remote production branch into the current development workspace.\n", "parameters": [ { "name": "project_id", "in": "path", - "description": "Project Id", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Project", + "description": "Id of project", "required": true, - "schema": { - "$ref": "#/definitions/Project" - } - }, - { - "name": "commit_sha", - "in": "query", - "description": "(Optional): Commit Sha to Tag", - "required": false, - "type": "string" - }, - { - "name": "tag_name", - "in": "query", - "description": "Tag Name", - "required": false, - "type": "string" - }, - { - "name": "tag_message", - "in": "query", - "description": "(Optional): Tag Message", - "required": false, "type": "string" } ], "responses": { "200": { - "description": "Project", + "description": "Returns git output message if pull was successful, otherwise 400 with an error message", "schema": { - "$ref": "#/definitions/Project" + "type": "string" } }, - "204": { - "description": "Returns 204 if tagging a ref was successful, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "schema": { @@ -20291,12 +20850,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -20310,42 +20863,33 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_diagnostic_report": { + "/projects/{project_id}/pull_from_remote": { "post": { "tags": [ "Project" ], - "operationId": "create_git_diagnostic_report", - "summary": "Initiate Git Diagnosis", - "description": "### Initiate Git Diagnosis Suite\n", + "operationId": "pull_project_from_remote", + "summary": "Pull from Remote", + "description": "### Pull from Remote\nPulls changes from the remote tracking branch of the currently active branch into the local development workspace.\n", "parameters": [ { "name": "project_id", "in": "path", - "description": "Looker Project ID", + "description": "Id of project", "required": true, "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "GitDiagnosticReport", - "required": true, - "schema": { - "$ref": "#/definitions/GitDiagnosticReport" - } } ], "responses": { "200": { - "description": "GitDiagnosticReport", + "description": "Returns git output message if pull was successful, otherwise 400 with an error message", "schema": { - "$ref": "#/definitions/GitDiagnosticReport" + "type": "string" } }, "400": { @@ -20360,12 +20904,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -20384,35 +20922,31 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_diagnostic_report/{report_id}": { + "/projects": { "get": { "tags": [ "Project" ], - "operationId": "get_git_diagnostic_report", - "summary": "Get Live Git Diagnosis", - "description": "### Retrieve Live Git Diagnostic Suite Execution Status\n", + "operationId": "all_projects", + "summary": "Get All Projects", + "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Looker Project ID", - "required": true, - "type": "string" - }, - { - "name": "report_id", - "in": "path", - "description": "Report ID", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "GitDiagnosticReport", + "description": "Project", "schema": { - "$ref": "#/definitions/GitDiagnosticReport" + "type": "array", + "items": { + "$ref": "#/definitions/Project" + } } }, "400": { @@ -20421,6 +20955,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -20434,49 +20974,33 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/git_diagnostic_report/{report_id}/repair": { + }, "post": { "tags": [ "Project" ], - "operationId": "repair_git_diagnostic_report", - "summary": "Repair Git Configuration", - "description": "### Repair Git Configuration Issues\n", + "operationId": "create_project", + "summary": "Create Project", + "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Looker Project ID", - "required": true, - "type": "string" - }, - { - "name": "report_id", - "in": "path", - "description": "Report ID", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "GitDiagnosticReport", + "description": "Project", "required": true, "schema": { - "$ref": "#/definitions/GitDiagnosticReport" + "$ref": "#/definitions/Project" } } ], "responses": { "200": { - "description": "GitDiagnosticReport", + "description": "Project", "schema": { - "$ref": "#/definitions/GitDiagnosticReport" + "$ref": "#/definitions/Project" } }, "400": { @@ -20510,63 +21034,40 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/render_tasks/looks/{look_id}/{result_format}": { - "post": { + "/projects/{project_id}": { + "get": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "create_look_render_task", - "summary": "Create Look Render Task", - "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "project", + "summary": "Get Project", + "description": "### Get A Project\n\nReturns the project with the given project id\n", "parameters": [ { - "name": "look_id", - "in": "path", - "description": "Id of look to render", - "required": true, - "type": "string" - }, - { - "name": "result_format", + "name": "project_id", "in": "path", - "description": "Output type: png, or jpg", + "description": "Project Id", "required": true, "type": "string" }, - { - "name": "width", - "in": "query", - "description": "Output width in pixels", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "height", - "in": "query", - "description": "Output height in pixels", - "required": true, - "type": "integer", - "format": "int64" - }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Render Task", + "description": "Project", "schema": { - "$ref": "#/definitions/RenderTask" + "$ref": "#/definitions/Project" } }, "400": { @@ -20575,24 +21076,18 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -20601,62 +21096,46 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/render_tasks/queries/{query_id}/{result_format}": { - "post": { + }, + "patch": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "create_query_render_task", - "summary": "Create Query Render Task", - "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "update_project", + "summary": "Update Project", + "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nNote that Looker will validate the git connection when the `git_remote_url` is modified.\nIf Looker cannot connect to the remote repository (e.g. because the deploy key has not\nbeen added), the update will fail with a 400 Bad Request error.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", "parameters": [ { - "name": "query_id", - "in": "path", - "description": "Id of the query to render", - "required": true, - "type": "string" - }, - { - "name": "result_format", + "name": "project_id", "in": "path", - "description": "Output type: png or jpg", + "description": "Project Id", "required": true, "type": "string" }, { - "name": "width", - "in": "query", - "description": "Output width in pixels", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "height", - "in": "query", - "description": "Output height in pixels", + "name": "body", + "in": "body", + "description": "Project", "required": true, - "type": "integer", - "format": "int64" + "schema": { + "$ref": "#/definitions/Project" + } }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Render Task", + "description": "Project", "schema": { - "$ref": "#/definitions/RenderTask" + "$ref": "#/definitions/Project" } }, "400": { @@ -20688,102 +21167,41 @@ "schema": { "$ref": "#/definitions/Error" } + }, + "500": { + "description": "Server Error", + "schema": { + "$ref": "#/definitions/Error" + } } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/render_tasks/dashboards/{dashboard_id}/{result_format}": { - "post": { + "/projects/{project_id}/manifest": { + "get": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "create_dashboard_render_task", - "summary": "Create Dashboard Render Task", - "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "manifest", + "summary": "Get Manifest", + "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", "parameters": [ { - "name": "dashboard_id", - "in": "path", - "description": "Id of dashboard to render. The ID can be a LookML dashboard also.", - "required": true, - "type": "string" - }, - { - "name": "result_format", + "name": "project_id", "in": "path", - "description": "Output type: pdf, png, or jpg", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Dashboard render task parameters", - "required": true, - "schema": { - "$ref": "#/definitions/CreateDashboardRenderTask" - } - }, - { - "name": "width", - "in": "query", - "description": "Output width in pixels", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "height", - "in": "query", - "description": "Output height in pixels", + "description": "Project Id", "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "pdf_paper_size", - "in": "query", - "description": "Paper size for pdf. Value can be one of: [\"letter\",\"legal\",\"tabloid\",\"a0\",\"a1\",\"a2\",\"a3\",\"a4\",\"a5\"]", - "required": false, - "type": "string" - }, - { - "name": "pdf_landscape", - "in": "query", - "description": "Whether to render pdf in landscape paper orientation", - "required": false, - "type": "boolean" - }, - { - "name": "long_tables", - "in": "query", - "description": "Whether or not to expand table vis to full length", - "required": false, - "type": "boolean" - }, - { - "name": "theme", - "in": "query", - "description": "Theme to apply. Will render embedded version of dashboard if valid", - "required": false, "type": "string" } ], "responses": { "200": { - "description": "Render Task", + "description": "Manifest", "schema": { - "$ref": "#/definitions/RenderTask" + "$ref": "#/definitions/Manifest" } }, "400": { @@ -20798,18 +21216,6 @@ "$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": { @@ -20818,39 +21224,35 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/render_tasks/{render_task_id}": { - "get": { + "/projects/{project_id}/git/deploy_key": { + "post": { "tags": [ - "RenderTask" + "Project" + ], + "operationId": "create_git_deploy_key", + "summary": "Create Deploy Key", + "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", + "produces": [ + "text/plain" ], - "operationId": "render_task", - "summary": "Get Render Task", - "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", "parameters": [ { - "name": "render_task_id", + "name": "project_id", "in": "path", - "description": "Id of render task", + "description": "Project Id", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Render Task", + "description": "Project", "schema": { - "$ref": "#/definitions/RenderTask" + "type": "string" } }, "400": { @@ -20865,6 +21267,18 @@ "$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": { @@ -20873,42 +21287,35 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/render_tasks/{render_task_id}/results": { + }, "get": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "render_task_results", - "summary": "Render Task Results", - "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", + "operationId": "git_deploy_key", + "summary": "Git Deploy Key", + "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", "produces": [ - "image/jpeg", - "image/png", - "application/pdf" + "text/plain" ], "parameters": [ { - "name": "render_task_id", + "name": "project_id", "in": "path", - "description": "Id of render task", + "description": "Project Id", "required": true, "type": "string" } ], "responses": { "200": { - "description": "Document or image", + "description": "The text of the public key portion of the deploy_key", "schema": { "type": "string" } }, - "202": { - "description": "Accepted" - }, "400": { "description": "Bad Request", "schema": { @@ -20929,62 +21336,39 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/render_tasks/dashboard_elements/{dashboard_element_id}/{result_format}": { + "/projects/{project_id}/validate": { "post": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "create_dashboard_element_render_task", - "summary": "Create Dashboard Element Render Task", - "description": "### Create a new task to render a dashboard element to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "validate_project", + "summary": "Validate Project", + "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", "parameters": [ { - "name": "dashboard_element_id", - "in": "path", - "description": "Id of dashboard element to render: UDD dashboard element would be numeric and LookML dashboard element would be model_name::dashboard_title::lookml_link_id", - "required": true, - "type": "string" - }, - { - "name": "result_format", + "name": "project_id", "in": "path", - "description": "Output type: png or jpg", + "description": "Project Id", "required": true, "type": "string" }, - { - "name": "width", - "in": "query", - "description": "Output width in pixels", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "height", - "in": "query", - "description": "Output height in pixels", - "required": true, - "type": "integer", - "format": "int64" - }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Render Task", + "description": "Project validation results", "schema": { - "$ref": "#/definitions/RenderTask" + "$ref": "#/definitions/ProjectValidation" } }, "400": { @@ -20999,12 +21383,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -21019,50 +21397,42 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{root_project_id}/credential/{credential_id}": { - "put": { + }, + "get": { "tags": [ "Project" ], - "operationId": "update_repository_credential", - "summary": "Create Repository Credential", - "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", + "operationId": "project_validation_results", + "summary": "Cached Project Validation Results", + "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", "parameters": [ { - "name": "root_project_id", + "name": "project_id", "in": "path", - "description": "Root Project Id", + "description": "Project Id", "required": true, "type": "string" }, { - "name": "credential_id", - "in": "path", - "description": "Credential Id", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Remote Project Information", - "required": true, - "schema": { - "$ref": "#/definitions/RepositoryCredential" - } } ], "responses": { "200": { - "description": "Repository Credential", + "description": "Project validation results", "schema": { - "$ref": "#/definitions/RepositoryCredential" + "$ref": "#/definitions/ProjectValidationCache" } }, + "204": { + "description": "Deleted" + }, "400": { "description": "Bad Request", "schema": { @@ -21075,18 +21445,6 @@ "$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": { @@ -21097,35 +21455,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/projects/{project_id}/current_workspace": { + "get": { "tags": [ "Project" ], - "operationId": "delete_repository_credential", - "summary": "Delete Repository Credential", - "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", + "operationId": "project_workspace", + "summary": "Get Project Workspace", + "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", "parameters": [ { - "name": "root_project_id", + "name": "project_id", "in": "path", - "description": "Root Project Id", + "description": "Project Id", "required": true, "type": "string" }, { - "name": "credential_id", - "in": "path", - "description": "Credential Id", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Project Workspace", "schema": { - "type": "string" + "$ref": "#/definitions/ProjectWorkspace" } }, "400": { @@ -21152,30 +21512,37 @@ "x-looker-rate-limited": true } }, - "/projects/{root_project_id}/credentials": { + "/projects/{project_id}/files": { "get": { "tags": [ "Project" ], - "operationId": "get_all_repository_credentials", - "summary": "Get All Repository Credentials", - "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", + "operationId": "all_project_files", + "summary": "Get All Project Files", + "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", "parameters": [ { - "name": "root_project_id", + "name": "project_id", "in": "path", - "description": "Root Project Id", + "description": "Project Id", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Repository Credential", + "description": "Project File", "schema": { "type": "array", "items": { - "$ref": "#/definitions/RepositoryCredential" + "$ref": "#/definitions/ProjectFile" } } }, @@ -21185,6 +21552,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -21203,49 +21576,42 @@ "x-looker-rate-limited": true } }, - "/roles": { + "/projects/{project_id}/files/file": { "get": { "tags": [ - "Role" + "Project" ], - "operationId": "all_roles", - "summary": "Get All Roles", - "description": "### Get information about all roles.\n", + "operationId": "project_file", + "summary": "Get Project File", + "description": "### Get Project File Info\n\nReturns information about a file in the project\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, "type": "string" }, { - "name": "ids", + "name": "file_id", "in": "query", - "description": "Optional list of ids to get specific roles.", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv" + "description": "File Id", + "required": true, + "type": "string" }, { - "name": "get_all_support_roles", + "name": "fields", "in": "query", - "description": "Get all Looker support roles.", + "description": "Requested fields", "required": false, - "type": "boolean" + "type": "string" } ], "responses": { "200": { - "description": "Role", + "description": "Project File", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Role" - } + "$ref": "#/definitions/ProjectFile" } }, "400": { @@ -21270,30 +21636,40 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/projects/{project_id}/git_connection_tests": { + "get": { "tags": [ - "Role" + "Project" ], - "operationId": "create_role", - "summary": "Create Role", - "description": "### Create a role with the specified information.\n", + "operationId": "all_git_connection_tests", + "summary": "Get All Git Connection Tests", + "description": "### Get All Git Connection Tests\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Role", + "name": "project_id", + "in": "path", + "description": "Project Id", "required": true, - "schema": { - "$ref": "#/definitions/Role" - } + "type": "string" + }, + { + "name": "remote_url", + "in": "query", + "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Role", + "description": "Git Connection Test", "schema": { - "$ref": "#/definitions/Role" + "type": "array", + "items": { + "$ref": "#/definitions/GitConnectionTest" + } } }, "400": { @@ -21308,24 +21684,6 @@ "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", - "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": { @@ -21338,96 +21696,49 @@ "x-looker-rate-limited": true } }, - "/roles/search": { + "/projects/{project_id}/git_connection_tests/{test_id}": { "get": { "tags": [ - "Role" + "Project" ], - "operationId": "search_roles", - "summary": "Search Roles", - "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "run_git_connection_test", + "summary": "Run Git Connection Test", + "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "query", - "description": "Match role id.", - "required": false, + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, "type": "string" }, { - "name": "model_set_ids", - "in": "query", - "description": "Match roles with these model set ids (comma separated). This is an experimental feature and may not yet be available on your instance.", - "required": false, + "name": "test_id", + "in": "path", + "description": "Test Id", + "required": true, "type": "string" }, { - "name": "permission_set_ids", + "name": "remote_url", "in": "query", - "description": "Match roles with these permission set ids (comma separated). This is an experimental feature and may not yet be available on your instance.", + "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", "required": false, "type": "string" }, { - "name": "name", + "name": "use_production", "in": "query", - "description": "Match role name.", + "description": "(Optional: leave blank for dev credentials) Whether to use git production credentials.", "required": false, "type": "string" - }, - { - "name": "built_in", - "in": "query", - "description": "Match roles by built_in status.", - "required": false, - "type": "boolean" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression.", - "required": false, - "type": "boolean" } ], "responses": { "200": { - "description": "Role", + "description": "Git Connection Test Result", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Role" - } + "$ref": "#/definitions/GitConnectionTestResult" } }, "400": { @@ -21442,6 +21753,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -21454,81 +21771,37 @@ "x-looker-rate-limited": true } }, - "/roles/search/with_user_count": { + "/projects/{project_id}/lookml_tests": { "get": { "tags": [ - "Role" + "Project" ], - "operationId": "search_roles_with_user_count", - "summary": "Search Roles with User Count", - "description": "### Search roles include user count\n\nReturns all role records that match the given search criteria, and attaches\nassociated user counts.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "all_lookml_tests", + "summary": "Get All LookML Tests", + "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "query", - "description": "Match role id.", - "required": false, + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, "type": "string" }, { - "name": "name", + "name": "file_id", "in": "query", - "description": "Match role name.", + "description": "File Id", "required": false, "type": "string" - }, - { - "name": "built_in", - "in": "query", - "description": "Match roles by built_in status.", - "required": false, - "type": "boolean" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression.", - "required": false, - "type": "boolean" } ], "responses": { "200": { - "description": "Role", + "description": "LookML Test", "schema": { "type": "array", "items": { - "$ref": "#/definitions/RoleSearch" + "$ref": "#/definitions/LookmlTest" } } }, @@ -21556,28 +21829,52 @@ "x-looker-rate-limited": true } }, - "/roles/{role_id}": { + "/projects/{project_id}/lookml_tests/run": { "get": { "tags": [ - "Role" + "Project" ], - "operationId": "role", - "summary": "Get Role", - "description": "### Get information about the role with a specific id.\n", + "operationId": "run_lookml_test", + "summary": "Run LookML Test", + "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", "required": true, "type": "string" + }, + { + "name": "file_id", + "in": "query", + "description": "File Name", + "required": false, + "type": "string" + }, + { + "name": "test", + "in": "query", + "description": "Test Name", + "required": false, + "type": "string" + }, + { + "name": "model", + "in": "query", + "description": "Model Name", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Role", + "description": "LookML Test Results", "schema": { - "$ref": "#/definitions/Role" + "type": "array", + "items": { + "$ref": "#/definitions/LookmlTestResult" + } } }, "400": { @@ -21592,6 +21889,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -21602,30 +21905,65 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/projects/{project_id}/tag": { + "post": { "tags": [ - "Role" + "Project" ], - "operationId": "delete_role", - "summary": "Delete Role", - "description": "### Delete the role with a specific id.\n", + "operationId": "tag_ref", + "summary": "Tag Ref", + "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Project", "required": true, + "schema": { + "$ref": "#/definitions/Project" + } + }, + { + "name": "commit_sha", + "in": "query", + "description": "(Optional): Commit Sha to Tag", + "required": false, + "type": "string" + }, + { + "name": "tag_name", + "in": "query", + "description": "Tag Name", + "required": false, + "type": "string" + }, + { + "name": "tag_message", + "in": "query", + "description": "(Optional): Tag Message", + "required": false, "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Project", "schema": { - "type": "string" + "$ref": "#/definitions/Project" } }, + "204": { + "description": "Returns 204 if tagging a ref was successful, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "schema": { @@ -21638,12 +21976,18 @@ "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -21654,37 +21998,60 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/render_tasks/looks/{look_id}/{result_format}": { + "post": { "tags": [ - "Role" + "RenderTask" ], - "operationId": "update_role", - "summary": "Update Role", - "description": "### Update information about the role with a specific id.\n", + "operationId": "create_look_render_task", + "summary": "Create Look Render Task", + "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", "parameters": [ { - "name": "role_id", + "name": "look_id", "in": "path", - "description": "id of role", + "description": "Id of look to render", "required": true, "type": "string" }, { - "name": "body", - "in": "body", - "description": "Role", + "name": "result_format", + "in": "path", + "description": "Output type: png, or jpg", "required": true, - "schema": { - "$ref": "#/definitions/Role" - } + "type": "string" + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Role", + "description": "Render Task", "schema": { - "$ref": "#/definitions/Role" + "$ref": "#/definitions/RenderTask" } }, "400": { @@ -21699,8 +22066,8 @@ "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } @@ -21719,26 +22086,49 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/roles/{role_id}/groups": { - "get": { + "/render_tasks/queries/{query_id}/{result_format}": { + "post": { "tags": [ - "Role" + "RenderTask" ], - "operationId": "role_groups", - "summary": "Get Role Groups", - "description": "### Get information about all the groups with the role that has a specific id.\n", + "operationId": "create_query_render_task", + "summary": "Create Query Render Task", + "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", "parameters": [ { - "name": "role_id", + "name": "query_id", "in": "path", - "description": "id of role", + "description": "Id of the query to render", + "required": true, + "type": "string" + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: png or jpg", "required": true, "type": "string" }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "type": "integer", + "format": "int64" + }, { "name": "fields", "in": "query", @@ -21749,12 +22139,9 @@ ], "responses": { "200": { - "description": "Groups with role.", + "description": "Render Task", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Group" - } + "$ref": "#/definitions/RenderTask" } }, "400": { @@ -21769,6 +22156,18 @@ "$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": { @@ -21777,45 +22176,99 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/render_tasks/dashboards/{dashboard_id}/{result_format}": { + "post": { "tags": [ - "Role" + "RenderTask" ], - "operationId": "set_role_groups", - "summary": "Update Role Groups", - "description": "### Set all groups for a role, removing all existing group associations from that role.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "create_dashboard_render_task", + "summary": "Create Dashboard Render Task", + "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", "parameters": [ { - "name": "role_id", + "name": "dashboard_id", "in": "path", - "description": "id of role", + "description": "Id of dashboard to render. The ID can be a LookML dashboard also.", + "required": true, + "type": "string" + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: pdf, png, or jpg", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Array of Group Ids", + "description": "Dashboard render task parameters", "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/definitions/CreateDashboardRenderTask" } + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "pdf_paper_size", + "in": "query", + "description": "Paper size for pdf. Value can be one of: [\"letter\",\"legal\",\"tabloid\",\"a0\",\"a1\",\"a2\",\"a3\",\"a4\",\"a5\"]", + "required": false, + "type": "string" + }, + { + "name": "pdf_landscape", + "in": "query", + "description": "Whether to render pdf in landscape paper orientation", + "required": false, + "type": "boolean" + }, + { + "name": "long_tables", + "in": "query", + "description": "Whether or not to expand table vis to full length", + "required": false, + "type": "boolean" + }, + { + "name": "theme", + "in": "query", + "description": "Theme to apply. Will render embedded version of dashboard if valid", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Groups with role.", + "description": "Render Task", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Group" - } + "$ref": "#/definitions/RenderTask" } }, "400": { @@ -21824,24 +22277,12 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", - "schema": { - "$ref": "#/definitions/Error" - } - }, "409": { "description": "Resource Already Exists", "schema": { @@ -21862,23 +22303,23 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/roles/{role_id}/users": { + "/render_tasks/{render_task_id}": { "get": { "tags": [ - "Role" + "RenderTask" ], - "operationId": "role_users", - "summary": "Get Role Users", - "description": "### Get information about all the users with the role that has a specific id.\n", + "operationId": "render_task", + "summary": "Get Render Task", + "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", "parameters": [ { - "name": "role_id", + "name": "render_task_id", "in": "path", - "description": "id of role", + "description": "Id of render task", "required": true, "type": "string" }, @@ -21888,23 +22329,13 @@ "description": "Requested fields.", "required": false, "type": "string" - }, - { - "name": "direct_association_only", - "in": "query", - "description": "Get only users associated directly with the role: exclude those only associated through groups.", - "required": false, - "type": "boolean" } ], "responses": { "200": { - "description": "Users with role.", + "description": "Render Task", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/User" - } + "$ref": "#/definitions/RenderTask" } }, "400": { @@ -21927,77 +22358,54 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/render_tasks/{render_task_id}/results": { + "get": { "tags": [ - "Role" + "RenderTask" + ], + "operationId": "render_task_results", + "summary": "Render Task Results", + "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", + "produces": [ + "image/jpeg", + "image/png", + "application/pdf" ], - "operationId": "set_role_users", - "summary": "Update Role Users", - "description": "### Set all the users of the role with a specific id.\n", "parameters": [ { - "name": "role_id", + "name": "render_task_id", "in": "path", - "description": "id of role", + "description": "Id of render task", "required": true, "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "array of user ids for role", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], "responses": { "200": { - "description": "Users with role.", + "description": "Document or image", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/User" - } + "type": "string" } }, + "202": { + "description": "Accepted" + }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "405": { - "description": "Resource Can't Be Modified", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -22006,26 +22414,68 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/running_queries": { - "get": { + "/render_tasks/dashboard_elements/{dashboard_element_id}/{result_format}": { + "post": { "tags": [ - "Query" + "RenderTask" + ], + "operationId": "create_dashboard_element_render_task", + "summary": "Create Dashboard Element Render Task", + "description": "### Create a new task to render a dashboard element to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "parameters": [ + { + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element to render: UDD dashboard element would be numeric and LookML dashboard element would be model_name::dashboard_title::lookml_link_id", + "required": true, + "type": "string" + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: png or jpg", + "required": true, + "type": "string" + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } ], - "operationId": "all_running_queries", - "summary": "Get All Running Queries", - "description": "Get information about all running queries.\n", "responses": { "200": { - "description": "Running Queries.", + "description": "Render Task", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/RunningQueries" - } + "$ref": "#/definitions/RenderTask" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" } }, "404": { @@ -22034,6 +22484,18 @@ "$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": { @@ -22046,28 +22508,44 @@ "x-looker-rate-limited": true } }, - "/running_queries/{query_task_id}": { - "delete": { + "/projects/{root_project_id}/credential/{credential_id}": { + "put": { "tags": [ - "Query" + "Project" ], - "operationId": "kill_query", - "summary": "Kill Running Query", - "description": "Kill a query with a specific query_task_id.\n", + "operationId": "update_repository_credential", + "summary": "Create Repository Credential", + "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", "parameters": [ { - "name": "query_task_id", + "name": "root_project_id", "in": "path", - "description": "Query task id.", + "description": "Root Project Id", "required": true, "type": "string" + }, + { + "name": "credential_id", + "in": "path", + "description": "Credential Id", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "Remote Project Information", + "required": true, + "schema": { + "$ref": "#/definitions/RepositoryCredential" + } } ], "responses": { - "204": { - "description": "Query successfully killed.", + "200": { + "description": "Repository Credential", "schema": { - "type": "string" + "$ref": "#/definitions/RepositoryCredential" } }, "400": { @@ -22082,6 +22560,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -22096,27 +22580,41 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/saml_config": { - "get": { + }, + "delete": { "tags": [ - "Auth" + "Project" + ], + "operationId": "delete_repository_credential", + "summary": "Delete Repository Credential", + "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", + "parameters": [ + { + "name": "root_project_id", + "in": "path", + "description": "Root Project Id", + "required": true, + "type": "string" + }, + { + "name": "credential_id", + "in": "path", + "description": "Credential Id", + "required": true, + "type": "string" + } ], - "operationId": "saml_config", - "summary": "Get SAML Configuration", - "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "200": { - "description": "SAML Configuration.", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/SamlConfig" + "type": "string" } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -22137,30 +22635,33 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/projects/{root_project_id}/credentials": { + "get": { "tags": [ - "Auth" + "Project" ], - "operationId": "update_saml_config", - "summary": "Update SAML Configuration", - "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "get_all_repository_credentials", + "summary": "Get All Repository Credentials", + "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "SAML Config", + "name": "root_project_id", + "in": "path", + "description": "Root Project Id", "required": true, - "schema": { - "$ref": "#/definitions/SamlConfig" - } + "type": "string" } ], "responses": { "200": { - "description": "New state for SAML Configuration.", + "description": "Repository Credential", "schema": { - "$ref": "#/definitions/SamlConfig" + "type": "array", + "items": { + "$ref": "#/definitions/RepositoryCredential" + } } }, "400": { @@ -22169,24 +22670,12 @@ "$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": { @@ -22199,74 +22688,49 @@ "x-looker-rate-limited": true } }, - "/saml_test_configs/{test_slug}": { + "/roles": { "get": { "tags": [ - "Auth" + "Role" ], - "operationId": "saml_test_config", - "summary": "Get SAML Test Configuration", - "description": "### Get a SAML test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "all_roles", + "summary": "Get All Roles", + "description": "### Get information about all roles.\n", "parameters": [ { - "name": "test_slug", - "in": "path", - "description": "Slug of test config", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" - } - ], - "responses": { - "200": { - "description": "SAML test config.", - "schema": { - "$ref": "#/definitions/SamlConfig" - } - }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "ids", + "in": "query", + "description": "Optional list of ids to get specific roles.", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "delete": { - "tags": [ - "Auth" - ], - "operationId": "delete_saml_test_config", - "summary": "Delete SAML Test Configuration", - "description": "### Delete a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", - "parameters": [ { - "name": "test_slug", - "in": "path", - "description": "Slug of test config", - "required": true, - "type": "string" + "name": "get_all_support_roles", + "in": "query", + "description": "Get all Looker support roles.", + "required": false, + "type": "boolean" } ], "responses": { - "204": { - "description": "Test config succssfully deleted.", + "200": { + "description": "Role", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/Role" + } } }, "400": { @@ -22275,12 +22739,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -22297,32 +22755,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/saml_test_configs": { + }, "post": { "tags": [ - "Auth" + "Role" ], - "operationId": "create_saml_test_config", - "summary": "Create SAML Test Configuration", - "description": "### Create a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "create_role", + "summary": "Create Role", + "description": "### Create a role with the specified information.\n", "parameters": [ { "name": "body", "in": "body", - "description": "SAML test config", + "description": "Role", "required": true, "schema": { - "$ref": "#/definitions/SamlConfig" + "$ref": "#/definitions/Role" } } ], "responses": { "200": { - "description": "SAML test config", + "description": "Role", "schema": { - "$ref": "#/definitions/SamlConfig" + "$ref": "#/definitions/Role" } }, "400": { @@ -22331,14 +22787,20 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } @@ -22361,33 +22823,96 @@ "x-looker-rate-limited": true } }, - "/parse_saml_idp_metadata": { - "post": { + "/roles/search": { + "get": { "tags": [ - "Auth" - ], - "operationId": "parse_saml_idp_metadata", - "summary": "Parse SAML IdP XML", - "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", - "consumes": [ - "text/plain" + "Role" ], + "operationId": "search_roles", + "summary": "Search Roles", + "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "SAML IdP metadata xml", - "required": true, - "schema": { - "type": "string" - } + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "id", + "in": "query", + "description": "Match role id.", + "required": false, + "type": "string" + }, + { + "name": "model_set_ids", + "in": "query", + "description": "Match roles with these model set ids (comma separated). This is an experimental feature and may not yet be available on your instance.", + "required": false, + "type": "string" + }, + { + "name": "permission_set_ids", + "in": "query", + "description": "Match roles with these permission set ids (comma separated). This is an experimental feature and may not yet be available on your instance.", + "required": false, + "type": "string" + }, + { + "name": "name", + "in": "query", + "description": "Match role name.", + "required": false, + "type": "string" + }, + { + "name": "built_in", + "in": "query", + "description": "Match roles by built_in status.", + "required": false, + "type": "boolean" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Parse result", + "description": "Role", "schema": { - "$ref": "#/definitions/SamlMetadataParseResult" + "type": "array", + "items": { + "$ref": "#/definitions/Role" + } } }, "400": { @@ -22396,12 +22921,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -22420,33 +22939,82 @@ "x-looker-rate-limited": true } }, - "/fetch_and_parse_saml_idp_metadata": { - "post": { + "/roles/search/with_user_count": { + "get": { "tags": [ - "Auth" - ], - "operationId": "fetch_and_parse_saml_idp_metadata", - "summary": "Parse SAML IdP Url", - "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", - "consumes": [ - "text/plain" + "Role" ], + "operationId": "search_roles_with_user_count", + "summary": "Search Roles with User Count", + "description": "### Search roles include user count\n\nReturns all role records that match the given search criteria, and attaches\nassociated user counts.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "SAML IdP metadata public url", - "required": true, - "schema": { - "type": "string" - } + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "id", + "in": "query", + "description": "Match role id.", + "required": false, + "type": "string" + }, + { + "name": "name", + "in": "query", + "description": "Match role name.", + "required": false, + "type": "string" + }, + { + "name": "built_in", + "in": "query", + "description": "Match roles by built_in status.", + "required": false, + "type": "boolean" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Parse result", + "description": "Role", "schema": { - "$ref": "#/definitions/SamlMetadataParseResult" + "type": "array", + "items": { + "$ref": "#/definitions/RoleSearch" + } } }, "400": { @@ -22455,12 +23023,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -22479,38 +23041,28 @@ "x-looker-rate-limited": true } }, - "/scheduled_plans/space/{space_id}": { + "/roles/{role_id}": { "get": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plans_for_space", - "summary": "Scheduled Plans for Space", - "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", + "operationId": "role", + "summary": "Get Role", + "description": "### Get information about the role with a specific id.\n", "parameters": [ { - "name": "space_id", + "name": "role_id", "in": "path", - "description": "Space Id", + "description": "id of role", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Role", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledPlan" - } + "$ref": "#/definitions/Role" } }, "400": { @@ -22533,23 +23085,21 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/scheduled_plans/{scheduled_plan_id}": { + }, "delete": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "delete_scheduled_plan", - "summary": "Delete Scheduled Plan", - "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", + "operationId": "delete_role", + "summary": "Delete Role", + "description": "### Delete the role with a specific id.\n", "parameters": [ { - "name": "scheduled_plan_id", + "name": "role_id", "in": "path", - "description": "Scheduled Plan Id", + "description": "id of role", "required": true, "type": "string" } @@ -22573,6 +23123,12 @@ "$ref": "#/definitions/Error" } }, + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -22581,39 +23137,39 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, "patch": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "update_scheduled_plan", - "summary": "Update Scheduled Plan", - "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "operationId": "update_role", + "summary": "Update Role", + "description": "### Update information about the role with a specific id.\n", "parameters": [ { - "name": "scheduled_plan_id", + "name": "role_id", "in": "path", - "description": "Scheduled Plan Id", + "description": "id of role", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Scheduled Plan", + "description": "Role", "required": true, "schema": { - "$ref": "#/definitions/ScheduledPlan" + "$ref": "#/definitions/Role" } } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Role", "schema": { - "$ref": "#/definitions/ScheduledPlan" + "$ref": "#/definitions/Role" } }, "400": { @@ -22628,6 +23184,12 @@ "$ref": "#/definitions/Error" } }, + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -22642,21 +23204,23 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/roles/{role_id}/groups": { "get": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plan", - "summary": "Get Scheduled Plan", - "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", + "operationId": "role_groups", + "summary": "Get Role Groups", + "description": "### Get information about all the groups with the role that has a specific id.\n", "parameters": [ { - "name": "scheduled_plan_id", + "name": "role_id", "in": "path", - "description": "Scheduled Plan Id", + "description": "id of role", "required": true, "type": "string" }, @@ -22670,9 +23234,12 @@ ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Groups with role.", "schema": { - "$ref": "#/definitions/ScheduledPlan" + "type": "array", + "items": { + "$ref": "#/definitions/Group" + } } }, "400": { @@ -22695,34 +23262,45 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/scheduled_plans": { - "post": { + }, + "put": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "create_scheduled_plan", - "summary": "Create Scheduled Plan", - "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://docs.cloud.google.com/looker/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "operationId": "set_role_groups", + "summary": "Update Role Groups", + "description": "### Set all groups for a role, removing all existing group associations from that role.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Scheduled Plan", + "description": "Array of Group Ids", "required": true, "schema": { - "$ref": "#/definitions/ScheduledPlan" + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Groups with role.", "schema": { - "$ref": "#/definitions/ScheduledPlan" + "type": "array", + "items": { + "$ref": "#/definitions/Group" + } } }, "400": { @@ -22731,12 +23309,24 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, + "405": { + "description": "Resource Can't Be Modified", + "schema": { + "$ref": "#/definitions/Error" + } + }, "409": { "description": "Resource Already Exists", "schema": { @@ -22757,46 +23347,48 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/roles/{role_id}/users": { "get": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "all_scheduled_plans", - "summary": "Get All Scheduled Plans", - "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "operationId": "role_users", + "summary": "Get Role Users", + "description": "### Get information about all the users with the role that has a specific id.\n", "parameters": [ { - "name": "user_id", - "in": "query", - "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", - "required": false, + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, "type": "string" }, { "name": "fields", "in": "query", - "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", + "description": "Requested fields.", "required": false, "type": "string" }, { - "name": "all_users", + "name": "direct_association_only", "in": "query", - "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", + "description": "Get only users associated directly with the role: exclude those only associated through groups.", "required": false, "type": "boolean" } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Users with role.", "schema": { "type": "array", "items": { - "$ref": "#/definitions/ScheduledPlan" + "$ref": "#/definitions/User" } } }, @@ -22812,12 +23404,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -22826,34 +23412,45 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/scheduled_plans/run_once": { - "post": { + }, + "put": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plan_run_once", - "summary": "Run Scheduled Plan Once", - "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "operationId": "set_role_users", + "summary": "Update Role Users", + "description": "### Set all the users of the role with a specific id.\n", "parameters": [ + { + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Scheduled Plan", + "description": "array of user ids for role", "required": true, "schema": { - "$ref": "#/definitions/ScheduledPlan" + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Users with role.", "schema": { - "$ref": "#/definitions/ScheduledPlan" + "type": "array", + "items": { + "$ref": "#/definitions/User" + } } }, "400": { @@ -22862,14 +23459,20 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "405": { + "description": "Resource Can't Be Modified", "schema": { "$ref": "#/definitions/Error" } @@ -22888,162 +23491,34 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/scheduled_plans/search": { + "/running_queries": { "get": { "tags": [ - "ScheduledPlan" - ], - "operationId": "search_scheduled_plans", - "summary": "Search Scheduled Plans", - "description": "### Search Scheduled Plans\n\nReturns all scheduled plans which matches the given search criteria.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", - "parameters": [ - { - "name": "user_id", - "in": "query", - "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", - "required": false, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", - "required": false, - "type": "string" - }, - { - "name": "all_users", - "in": "query", - "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", - "required": false, - "type": "boolean" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "name", - "in": "query", - "description": "Match Scheduled plan's name.", - "required": false, - "type": "string" - }, - { - "name": "user_first_name", - "in": "query", - "description": "Returns scheduled plans belonging to user with this first name.", - "required": false, - "type": "string" - }, - { - "name": "user_last_name", - "in": "query", - "description": "Returns scheduled plans belonging to user with this last name.", - "required": false, - "type": "string" - }, - { - "name": "dashboard_id", - "in": "query", - "description": "Returns scheduled plans created on this Dashboard.", - "required": false, - "type": "string" - }, - { - "name": "look_id", - "in": "query", - "description": "Returns scheduled plans created on this Look.", - "required": false, - "type": "string" - }, - { - "name": "lookml_dashboard_id", - "in": "query", - "description": "Returns scheduled plans created on this LookML Dashboard.", - "required": false, - "type": "string" - }, - { - "name": "recipient", - "in": "query", - "description": "Match recipient address.", - "required": false, - "type": "string" - }, - { - "name": "destination_type", - "in": "query", - "description": "Match scheduled plan's destination type.", - "required": false, - "type": "string" - }, - { - "name": "delivery_format", - "in": "query", - "description": "Match scheduled plan's delivery format.", - "required": false, - "type": "string" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "type": "boolean" - } + "Query" ], + "operationId": "all_running_queries", + "summary": "Get All Running Queries", + "description": "Get information about all running queries.\n", "responses": { "200": { - "description": "Scheduled Plan", + "description": "Running Queries.", "schema": { "type": "array", "items": { - "$ref": "#/definitions/ScheduledPlan" + "$ref": "#/definitions/RunningQueries" } } }, - "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": { @@ -23051,57 +23526,33 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/scheduled_plans/look/{look_id}": { - "get": { + "/running_queries/{query_task_id}": { + "delete": { "tags": [ - "ScheduledPlan" + "Query" ], - "operationId": "scheduled_plans_for_look", - "summary": "Scheduled Plans for Look", - "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "operationId": "kill_query", + "summary": "Kill Running Query", + "description": "Kill a query with a specific query_task_id.\n", "parameters": [ { - "name": "look_id", + "name": "query_task_id", "in": "path", - "description": "Look Id", + "description": "Query task id.", "required": true, "type": "string" - }, - { - "name": "user_id", - "in": "query", - "description": "User Id (default is requesting user if not specified)", - "required": false, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "all_users", - "in": "query", - "description": "Return scheduled plans belonging to all users for the look", - "required": false, - "type": "boolean" } ], "responses": { - "200": { - "description": "Scheduled Plan", + "204": { + "description": "Query successfully killed.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledPlan" - } + "type": "string" } }, "400": { @@ -23116,6 +23567,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -23128,56 +23585,23 @@ "x-looker-rate-limited": true } }, - "/scheduled_plans/dashboard/{dashboard_id}": { + "/saml_config": { "get": { "tags": [ - "ScheduledPlan" - ], - "operationId": "scheduled_plans_for_dashboard", - "summary": "Scheduled Plans for Dashboard", - "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", - "parameters": [ - { - "name": "dashboard_id", - "in": "path", - "description": "Dashboard Id", - "required": true, - "type": "string" - }, - { - "name": "user_id", - "in": "query", - "description": "User Id (default is requesting user if not specified)", - "required": false, - "type": "string" - }, - { - "name": "all_users", - "in": "query", - "description": "Return scheduled plans belonging to all users for the dashboard", - "required": false, - "type": "boolean" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - } + "Auth" ], + "operationId": "saml_config", + "summary": "Get SAML Configuration", + "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Scheduled Plan", + "description": "SAML Configuration.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledPlan" - } + "$ref": "#/definitions/SamlConfig" } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } @@ -23196,56 +23620,32 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { - "get": { + }, + "patch": { "tags": [ - "ScheduledPlan" + "Auth" ], - "operationId": "scheduled_plans_for_lookml_dashboard", - "summary": "Scheduled Plans for LookML Dashboard", - "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "operationId": "update_saml_config", + "summary": "Update SAML Configuration", + "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "lookml_dashboard_id", - "in": "path", - "description": "LookML Dashboard Id", + "name": "body", + "in": "body", + "description": "SAML Config", "required": true, - "type": "string" - }, - { - "name": "user_id", - "in": "query", - "description": "User Id (default is requesting user if not specified)", - "required": false, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "all_users", - "in": "query", - "description": "Return scheduled plans belonging to all users for the dashboard", - "required": false, - "type": "boolean" + "schema": { + "$ref": "#/definitions/SamlConfig" + } } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "New state for SAML Configuration.", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledPlan" - } + "$ref": "#/definitions/SamlConfig" } }, "400": { @@ -23254,12 +23654,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": { @@ -23268,45 +23680,36 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/scheduled_plans/{scheduled_plan_id}/run_once": { - "post": { + "/saml_test_configs/{test_slug}": { + "get": { "tags": [ - "ScheduledPlan" + "Auth" ], - "operationId": "scheduled_plan_run_once_by_id", - "summary": "Run Scheduled Plan Once by Id", - "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", + "operationId": "saml_test_config", + "summary": "Get SAML Test Configuration", + "description": "### Get a SAML test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "scheduled_plan_id", + "name": "test_slug", "in": "path", - "description": "Id of schedule plan to copy and run", + "description": "Slug of test config", "required": true, "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Property values to apply to the newly copied scheduled plan before running it", - "required": false, - "schema": { - "$ref": "#/definitions/WriteScheduledPlan" - } } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "SAML test config.", "schema": { - "$ref": "#/definitions/ScheduledPlan" + "$ref": "#/definitions/SamlConfig" } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } @@ -23317,18 +23720,6 @@ "$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": { @@ -23337,35 +23728,30 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/self_service_models/allowed_connections": { - "get": { + }, + "delete": { "tags": [ - "SelfService" + "Auth" ], - "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", + "operationId": "delete_saml_test_config", + "summary": "Delete SAML Test Configuration", + "description": "### Delete a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "google_sheets", - "in": "query", - "description": "Include connections allowed for Google Sheets.", - "required": false, - "type": "boolean" + "name": "test_slug", + "in": "path", + "description": "Slug of test config", + "required": true, + "type": "string" } ], "responses": { - "200": { - "description": "List of allowed connection names", + "204": { + "description": "Test config succssfully deleted.", "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } }, "400": { @@ -23393,33 +23779,35 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/self_service_models/{model_name}/lookml": { - "get": { + "/saml_test_configs": { + "post": { "tags": [ - "SelfService" + "Auth" ], - "operationId": "get_self_service_model_lookml", - "summary": "Get Self Service LookML", - "description": "### Get Generated LookML for a Self Service Model\n", + "operationId": "create_saml_test_config", + "summary": "Create SAML Test Configuration", + "description": "### Create a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "model_name", - "in": "path", - "description": "Name of self service model", + "name": "body", + "in": "body", + "description": "SAML test config", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/SamlConfig" + } } ], "responses": { "200": { - "description": "Self service lookml", + "description": "SAML test config", "schema": { - "type": "string" + "$ref": "#/definitions/SamlConfig" } }, "400": { @@ -23428,12 +23816,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": { @@ -23441,42 +23841,38 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/self_service_models/{model_name}/certification": { - "patch": { + "/parse_saml_idp_metadata": { + "post": { "tags": [ - "SelfService" + "Auth" + ], + "operationId": "parse_saml_idp_metadata", + "summary": "Parse SAML IdP XML", + "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "consumes": [ + "text/plain" ], - "operationId": "update_self_service_explore_certification", - "summary": "Update certification for a Self Service Explore", - "description": "### Update certification for a Self Service Explore\n", "parameters": [ - { - "name": "model_name", - "in": "path", - "description": "Name of self service model.", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "Certification Information", + "description": "SAML IdP metadata xml", "required": true, "schema": { - "$ref": "#/definitions/Certification" + "type": "string" } } ], "responses": { "200": { - "description": "Updated certification for self service model", + "description": "Parse result", "schema": { - "$ref": "#/definitions/Certification" + "$ref": "#/definitions/SamlMetadataParseResult" } }, "400": { @@ -23497,18 +23893,6 @@ "$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": { @@ -23516,24 +23900,38 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/session_config": { - "get": { + "/fetch_and_parse_saml_idp_metadata": { + "post": { "tags": [ "Auth" ], - "operationId": "session_config", - "summary": "Get Session Config", - "description": "### Get session config.\n", + "operationId": "fetch_and_parse_saml_idp_metadata", + "summary": "Parse SAML IdP Url", + "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "consumes": [ + "text/plain" + ], + "parameters": [ + { + "name": "body", + "in": "body", + "description": "SAML IdP metadata public url", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "Session Config", + "description": "Parse result", "schema": { - "$ref": "#/definitions/SessionConfig" + "$ref": "#/definitions/SamlMetadataParseResult" } }, "400": { @@ -23542,6 +23940,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -23558,30 +23962,40 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/scheduled_plans/space/{space_id}": { + "get": { "tags": [ - "Auth" + "ScheduledPlan" ], - "operationId": "update_session_config", - "summary": "Update Session Config", - "description": "### Update session config.\n", + "operationId": "scheduled_plans_for_space", + "summary": "Scheduled Plans for Space", + "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Session Config", + "name": "space_id", + "in": "path", + "description": "Space Id", "required": true, - "schema": { - "$ref": "#/definitions/SessionConfig" - } + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Session Config", + "description": "Scheduled Plan", "schema": { - "$ref": "#/definitions/SessionConfig" + "type": "array", + "items": { + "$ref": "#/definitions/ScheduledPlan" + } } }, "400": { @@ -23596,12 +24010,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -23610,23 +24018,32 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/session": { - "get": { + "/scheduled_plans/{scheduled_plan_id}": { + "delete": { "tags": [ - "Session" + "ScheduledPlan" + ], + "operationId": "delete_scheduled_plan", + "summary": "Delete Scheduled Plan", + "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", + "parameters": [ + { + "name": "scheduled_plan_id", + "in": "path", + "description": "Scheduled Plan Id", + "required": true, + "type": "string" + } ], - "operationId": "session", - "summary": "Get Auth", - "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", "responses": { - "200": { - "description": "Auth", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/ApiSession" + "type": "string" } }, "400": { @@ -23649,32 +24066,39 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true }, "patch": { "tags": [ - "Session" + "ScheduledPlan" ], - "operationId": "update_session", - "summary": "Update Auth", - "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", + "operationId": "update_scheduled_plan", + "summary": "Update Scheduled Plan", + "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", "parameters": [ + { + "name": "scheduled_plan_id", + "in": "path", + "description": "Scheduled Plan Id", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Auth", + "description": "Scheduled Plan", "required": true, "schema": { - "$ref": "#/definitions/ApiSession" + "$ref": "#/definitions/ScheduledPlan" } } ], "responses": { "200": { - "description": "Auth", + "description": "Scheduled Plan", "schema": { - "$ref": "#/definitions/ApiSession" + "$ref": "#/definitions/ScheduledPlan" } }, "400": { @@ -23703,41 +24127,37 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - } - }, - "/setting": { - "patch": { + }, + "get": { "tags": [ - "Config" + "ScheduledPlan" ], - "operationId": "set_setting", - "summary": "Set Setting", - "description": "### Configure Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - auto_certify_lookml_content\n - content_certification_documentation_link\n - custom_welcome_email\n - data_connector_default_enabled\n - dashboard_auto_refresh_restriction\n - dashboard_auto_refresh_minimum_interval\n - extension_framework_enabled\n - extension_load_url_enabled\n - instance_config\n - is_content_certification_enabled\n - managed_certificate_uri\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - revoke_certification_on_edits\n - automated_mfa_enabled\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_enabled\n - embed_config\n - mcp_tools\n\nSee the `Setting` type for more information on the specific values that can be configured.\n\nIf a setting update is rejected, the API error payload should provide information on the cause of the rejection.\n", + "operationId": "scheduled_plan", + "summary": "Get Scheduled Plan", + "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Looker Setting Configuration", + "name": "scheduled_plan_id", + "in": "path", + "description": "Scheduled Plan Id", "required": true, - "schema": { - "$ref": "#/definitions/Setting" - } + "type": "string" }, { "name": "fields", "in": "query", - "description": "Requested fields", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Looker Settings", + "description": "Scheduled Plan", "schema": { - "$ref": "#/definitions/Setting" + "$ref": "#/definitions/ScheduledPlan" } }, "400": { @@ -23746,8 +24166,52 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "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": "db_query", + "x-looker-rate-limited": true + } + }, + "/scheduled_plans": { + "post": { + "tags": [ + "ScheduledPlan" + ], + "operationId": "create_scheduled_plan", + "summary": "Create Scheduled Plan", + "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://docs.cloud.google.com/looker/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Scheduled Plan", + "required": true, + "schema": { + "$ref": "#/definitions/ScheduledPlan" + } + } + ], + "responses": { + "200": { + "description": "Scheduled Plan", + "schema": { + "$ref": "#/definitions/ScheduledPlan" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -23778,30 +24242,47 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true }, "get": { "tags": [ - "Config" + "ScheduledPlan" ], - "operationId": "get_setting", - "summary": "Get Setting", - "description": "### Get Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - auto_certify_lookml_content\n - content_certification_documentation_link\n - custom_welcome_email\n - data_connector_default_enabled\n - dashboard_auto_refresh_restriction\n - dashboard_auto_refresh_minimum_interval\n - extension_framework_enabled\n - extension_load_url_enabled\n - instance_config\n - is_content_certification_enabled\n - managed_certificate_uri\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - revoke_certification_on_edits\n - automated_mfa_enabled\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_enabled\n - embed_config\n - mcp_tools\n\n", + "operationId": "all_scheduled_plans", + "summary": "Get All Scheduled Plans", + "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", + "required": false, + "type": "string" + }, { "name": "fields", "in": "query", - "description": "Requested fields", + "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", "required": false, "type": "string" + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Looker Settings", + "description": "Scheduled Plan", "schema": { - "$ref": "#/definitions/Setting" + "type": "array", + "items": { + "$ref": "#/definitions/ScheduledPlan" + } } }, "400": { @@ -23830,41 +24311,38 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/smtp_settings": { + "/scheduled_plans/run_once": { "post": { "tags": [ - "Config" + "ScheduledPlan" ], - "operationId": "set_smtp_settings", - "summary": "Set SMTP Setting", - "description": "### Configure SMTP Settings\n This API allows users to configure the SMTP settings on the Looker instance.\n Only admin users are authorised to call this API.\n", + "operationId": "scheduled_plan_run_once", + "summary": "Run Scheduled Plan Once", + "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", "parameters": [ { "name": "body", "in": "body", - "description": "SMTP Setting Configuration", + "description": "Scheduled Plan", "required": true, "schema": { - "$ref": "#/definitions/SmtpSettings" + "$ref": "#/definitions/ScheduledPlan" } } ], "responses": { - "204": { - "description": "Successfully updated SMTP settings" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "Scheduled Plan", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/ScheduledPlan" } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -23895,91 +24373,39 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/smtp_status": { + "/scheduled_plans/search": { "get": { "tags": [ - "Config" + "ScheduledPlan" ], - "operationId": "smtp_status", - "summary": "Get SMTP Status", - "description": "### Get current SMTP status.\n", + "operationId": "search_scheduled_plans", + "summary": "Search Scheduled Plans", + "description": "### Search Scheduled Plans\n\nReturns all scheduled plans which matches the given search criteria.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ { - "name": "fields", + "name": "user_id", "in": "query", - "description": "Include only these fields in the response", + "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", "required": false, "type": "string" - } - ], - "responses": { - "200": { - "description": "SMTP Status", - "schema": { - "$ref": "#/definitions/SmtpStatus" - } - }, - "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 - } - }, - "/folders/search": { - "get": { - "tags": [ - "Folder" - ], - "operationId": "search_folders", - "summary": "Search Folders", - "description": "Search for folders by creator id, parent id, name, etc", - "parameters": [ { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", "required": false, "type": "string" }, { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", + "name": "all_users", "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true + "type": "boolean" }, { "name": "limit", @@ -24007,60 +24433,109 @@ { "name": "name", "in": "query", - "description": "Match Space title.", + "description": "Match Scheduled plan's name.", "required": false, "type": "string" }, { - "name": "id", + "name": "user_first_name", "in": "query", - "description": "Match Space id", + "description": "Returns scheduled plans belonging to user with this first name.", "required": false, "type": "string" }, { - "name": "parent_id", + "name": "user_last_name", "in": "query", - "description": "Filter on a children of a particular folder.", + "description": "Returns scheduled plans belonging to user with this last name.", "required": false, "type": "string" }, { - "name": "creator_id", + "name": "dashboard_id", "in": "query", - "description": "Filter on folder created by a particular user.", + "description": "Returns scheduled plans created on this Dashboard.", "required": false, "type": "string" }, { - "name": "filter_or", + "name": "look_id", "in": "query", - "description": "Combine given search criteria in a boolean OR expression", + "description": "Returns scheduled plans created on this Look.", + "required": false, + "type": "string" + }, + { + "name": "lookml_dashboard_id", + "in": "query", + "description": "Returns scheduled plans created on this LookML Dashboard.", + "required": false, + "type": "string" + }, + { + "name": "recipient", + "in": "query", + "description": "Match recipient address.", + "required": false, + "type": "string" + }, + { + "name": "destination_type", + "in": "query", + "description": "Match scheduled plan's destination type.", + "required": false, + "type": "string" + }, + { + "name": "delivery_format", + "in": "query", + "description": "Match scheduled plan's delivery format.", + "required": false, + "type": "string" + }, + { + "name": "all_states", + "in": "query", + "description": "Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag).", "required": false, "type": "boolean" }, { - "name": "is_shared_root", + "name": "run_once", "in": "query", - "description": "Match is shared root", + "description": "Match Scheduled plan's run_once.", "required": false, "type": "boolean" }, { - "name": "is_users_root", + "name": "enabled", "in": "query", - "description": "Match is users root", + "description": "Match Scheduled plan's enabled status.", + "required": false, + "type": "boolean" + }, + { + "name": "last_run_status", + "in": "query", + "description": "Match scheduled plan's last run status.", + "required": false, + "type": "string" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", "required": false, "type": "boolean" } ], "responses": { "200": { - "description": "folders", + "description": "Scheduled Plan", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Folder" + "$ref": "#/definitions/ScheduledPlan" } } }, @@ -24076,6 +24551,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -24083,40 +24564,57 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "alpha", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}": { + "/scheduled_plans/look/{look_id}": { "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "folder", - "summary": "Get Folder", - "description": "### Get information about the folder with a specific id.", + "operationId": "scheduled_plans_for_look", + "summary": "Scheduled Plans for Look", + "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ { - "name": "folder_id", + "name": "look_id", "in": "path", - "description": "Id of folder", + "description": "Look Id", "required": true, "type": "string" }, + { + "name": "user_id", + "in": "query", + "description": "User Id (default is requesting user if not specified)", + "required": false, + "type": "string" + }, { "name": "fields", "in": "query", "description": "Requested fields.", "required": false, "type": "string" + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users for the look", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "schema": { - "$ref": "#/definitions/Folder" + "type": "array", + "items": { + "$ref": "#/definitions/ScheduledPlan" + } } }, "400": { @@ -24139,91 +24637,56 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/scheduled_plans/dashboard/{dashboard_id}": { + "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "delete_folder", - "summary": "Delete Folder", - "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", + "operationId": "scheduled_plans_for_dashboard", + "summary": "Scheduled Plans for Dashboard", + "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ { - "name": "folder_id", + "name": "dashboard_id", "in": "path", - "description": "Id of folder", + "description": "Dashboard Id", "required": true, "type": "string" - } - ], - "responses": { - "204": { - "description": "Successfully deleted.", - "schema": { - "type": "string" - } }, - "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": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "patch": { - "tags": [ - "Folder" - ], - "operationId": "update_folder", - "summary": "Update Folder", - "description": "### Update the folder with a specific id.", - "parameters": [ { - "name": "folder_id", - "in": "path", - "description": "Id of folder", - "required": true, + "name": "user_id", + "in": "query", + "description": "User Id (default is requesting user if not specified)", + "required": false, "type": "string" }, { - "name": "body", - "in": "body", - "description": "Folder parameters", - "required": true, - "schema": { - "$ref": "#/definitions/UpdateFolder" - } + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users for the dashboard", + "required": false, + "type": "boolean" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "schema": { - "$ref": "#/definitions/Folder" + "type": "array", + "items": { + "$ref": "#/definitions/ScheduledPlan" + } } }, "400": { @@ -24238,12 +24701,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -24252,34 +24709,55 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/folders": { + "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "all_folders", - "summary": "Get All Folders", - "description": "### Get information about all folders.\n\nAll personal folders will be returned.\n\n", + "operationId": "scheduled_plans_for_lookml_dashboard", + "summary": "Scheduled Plans for LookML Dashboard", + "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ + { + "name": "lookml_dashboard_id", + "in": "path", + "description": "LookML Dashboard Id", + "required": true, + "type": "string" + }, + { + "name": "user_id", + "in": "query", + "description": "User Id (default is requesting user if not specified)", + "required": false, + "type": "string" + }, { "name": "fields", "in": "query", "description": "Requested fields.", "required": false, "type": "string" + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users for the dashboard", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "schema": { "type": "array", "items": { - "$ref": "#/definitions/FolderBase" + "$ref": "#/definitions/ScheduledPlan" } } }, @@ -24303,32 +24781,41 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, + } + }, + "/scheduled_plans/{scheduled_plan_id}/run_once": { "post": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "create_folder", - "summary": "Create Folder", - "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", + "operationId": "scheduled_plan_run_once_by_id", + "summary": "Run Scheduled Plan Once by Id", + "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", "parameters": [ + { + "name": "scheduled_plan_id", + "in": "path", + "description": "Id of schedule plan to copy and run", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Folder parameters", - "required": true, + "description": "Property values to apply to the newly copied scheduled plan before running it", + "required": false, "schema": { - "$ref": "#/definitions/CreateFolder" + "$ref": "#/definitions/WriteScheduledPlan" } } ], "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "schema": { - "$ref": "#/definitions/Folder" + "$ref": "#/definitions/ScheduledPlan" } }, "400": { @@ -24363,82 +24850,34 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}/children": { + "/self_service_models/allowed_connections": { "get": { "tags": [ - "Folder" + "SelfService" ], - "operationId": "folder_children", - "summary": "Get Folder Children", - "description": "### Get the children of a folder.", + "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": "folder_id", - "in": "path", - "description": "Id of folder", - "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", + "name": "google_sheets", "in": "query", - "description": "Fields to sort by.", + "description": "Include connections allowed for Google Sheets.", "required": false, - "type": "string" + "type": "boolean" } ], "responses": { "200": { - "description": "Folders", + "description": "List of allowed connection names", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Folder" + "type": "string" } } }, @@ -24448,6 +24887,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -24461,57 +24906,33 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}/children/search": { + "/self_service_models/{model_name}/lookml": { "get": { "tags": [ - "Folder" + "SelfService" ], - "operationId": "folder_children_search", - "summary": "Search Folder Children", - "description": "### Search the children of a folder", + "operationId": "get_self_service_model_lookml", + "summary": "Get Self Service LookML", + "description": "### Get Generated LookML for a Self Service Model\n", "parameters": [ { - "name": "folder_id", + "name": "model_name", "in": "path", - "description": "Id of folder", + "description": "Name of self service model", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "name", - "in": "query", - "description": "Match folder name.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Folders", + "description": "Self service lookml", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Folder" - } + "type": "string" } }, "400": { @@ -24533,40 +24954,42 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}/parent": { - "get": { + "/self_service_models/{model_name}/certification": { + "patch": { "tags": [ - "Folder" + "SelfService" ], - "operationId": "folder_parent", - "summary": "Get Folder Parent", - "description": "### Get the parent of a folder", + "operationId": "update_self_service_explore_certification", + "summary": "Update certification for a Self Service Explore", + "description": "### Update certification for a Self Service Explore\n", "parameters": [ { - "name": "folder_id", + "name": "model_name", "in": "path", - "description": "Id of folder", + "description": "Name of self service model.", "required": true, "type": "string" }, { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" + "name": "body", + "in": "body", + "description": "Certification Information", + "required": true, + "schema": { + "$ref": "#/definitions/Certification" + } } ], "responses": { "200": { - "description": "Folder", + "description": "Updated certification for self service model", "schema": { - "$ref": "#/definitions/Folder" + "$ref": "#/definitions/Certification" } }, "400": { @@ -24575,12 +24998,30 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "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": { @@ -24588,43 +25029,24 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}/ancestors": { + "/session_config": { "get": { "tags": [ - "Folder" - ], - "operationId": "folder_ancestors", - "summary": "Get Folder Ancestors", - "description": "### Get the ancestors of a folder", - "parameters": [ - { - "name": "folder_id", - "in": "path", - "description": "Id of folder", - "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - } + "Auth" ], + "operationId": "session_config", + "summary": "Get Session Config", + "description": "### Get session config.\n", "responses": { "200": { - "description": "Folders", + "description": "Session Config", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Folder" - } + "$ref": "#/definitions/SessionConfig" } }, "400": { @@ -24649,40 +25071,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/folders/{folder_id}/looks": { - "get": { + }, + "patch": { "tags": [ - "Folder" + "Auth" ], - "operationId": "folder_looks", - "summary": "Get Folder Looks", - "description": "### Get all looks in a folder.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", + "operationId": "update_session_config", + "summary": "Update Session Config", + "description": "### Update session config.\n", "parameters": [ { - "name": "folder_id", - "in": "path", - "description": "Id of folder", + "name": "body", + "in": "body", + "description": "Session Config", "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" + "schema": { + "$ref": "#/definitions/SessionConfig" + } } ], "responses": { "200": { - "description": "Looks", + "description": "Session Config", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/LookWithQuery" - } + "$ref": "#/definitions/SessionConfig" } }, "400": { @@ -24697,6 +25109,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -24709,38 +25127,19 @@ "x-looker-rate-limited": true } }, - "/folders/{folder_id}/dashboards": { + "/session": { "get": { "tags": [ - "Folder" - ], - "operationId": "folder_dashboards", - "summary": "Get Folder Dashboards", - "description": "### Get the dashboards in a folder", - "parameters": [ - { - "name": "folder_id", - "in": "path", - "description": "Id of folder", - "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - } + "Session" ], + "operationId": "session", + "summary": "Get Auth", + "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", "responses": { "200": { - "description": "Dashboard", + "description": "Auth", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Dashboard" - } + "$ref": "#/definitions/ApiSession" } }, "400": { @@ -24765,30 +25164,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/sql_interface_queries/metadata": { - "get": { + }, + "patch": { "tags": [ - "SqlInterfaceQuery" + "Session" ], - "operationId": "sql_interface_metadata", - "summary": "Get SQL Interface Query Metadata", - "description": "### Handles Avatica RPC metadata requests for SQL Interface queries", + "operationId": "update_session", + "summary": "Update Auth", + "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", "parameters": [ { - "name": "avatica_request", - "in": "query", - "description": "Avatica RPC request", - "required": false, - "type": "string" + "name": "body", + "in": "body", + "description": "Auth", + "required": true, + "schema": { + "$ref": "#/definitions/ApiSession" + } } ], "responses": { "200": { - "description": null, + "description": "Auth", "schema": { - "$ref": "#/definitions/SqlInterfaceQueryMetadata" + "$ref": "#/definitions/ApiSession" } }, "400": { @@ -24797,16 +25196,16 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/ValidationError" } }, "429": { @@ -24816,45 +25215,42 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/sql_interface_queries/{query_id}/run/{result_format}": { - "get": { + "/setting": { + "patch": { "tags": [ - "SqlInterfaceQuery" - ], - "operationId": "run_sql_interface_query", - "summary": "Run SQL Interface Query", - "description": "### Run a saved SQL interface query.\n\nThis runs a previously created SQL interface query.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json_bi | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n\n\n", - "produces": [ - "text", - "application/json" + "Config" ], + "operationId": "set_setting", + "summary": "Set Setting", + "description": "### Configure Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - auto_certify_lookml_content\n - content_certification_documentation_link\n - custom_welcome_email\n - data_connector_default_enabled\n - dashboard_auto_refresh_restriction\n - dashboard_auto_refresh_minimum_interval\n - extension_framework_enabled\n - extension_load_url_enabled\n - instance_config\n - is_content_certification_enabled\n - managed_certificate_uri\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - revoke_certification_on_edits\n - automated_mfa_enabled\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_vis_modernization_default\n - embed_enabled\n - embed_config\n - mcp_tools\n\nSee the `Setting` type for more information on the specific values that can be configured.\n\nIf a setting update is rejected, the API error payload should provide information on the cause of the rejection.\n", "parameters": [ { - "name": "query_id", - "in": "path", - "description": "Integer id of query", + "name": "body", + "in": "body", + "description": "Looker Setting Configuration", "required": true, - "type": "integer", - "format": "int64" + "schema": { + "$ref": "#/definitions/Setting" + } }, { - "name": "result_format", - "in": "path", - "description": "Format of result, options are: [\"json_bi\"]", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "Query Result", + "description": "Looker Settings", "schema": { - "$ref": "#/definitions/JsonBi" + "$ref": "#/definitions/Setting" } }, "400": { @@ -24875,6 +25271,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -24888,35 +25290,31 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/sql_interface_queries": { - "post": { + }, + "get": { "tags": [ - "SqlInterfaceQuery" + "Config" ], - "operationId": "create_sql_interface_query", - "summary": "Create SQL Interface Query", - "description": "### Create a SQL interface query.\n\nThis allows you to create a new SQL interface query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", + "operationId": "get_setting", + "summary": "Get Setting", + "description": "### Get Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - auto_certify_lookml_content\n - content_certification_documentation_link\n - custom_welcome_email\n - data_connector_default_enabled\n - dashboard_auto_refresh_restriction\n - dashboard_auto_refresh_minimum_interval\n - extension_framework_enabled\n - extension_load_url_enabled\n - instance_config\n - is_content_certification_enabled\n - managed_certificate_uri\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - revoke_certification_on_edits\n - automated_mfa_enabled\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_vis_modernization_default\n - embed_enabled\n - embed_config\n - mcp_tools\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "SQL Interface Query Create", - "required": true, - "schema": { - "$ref": "#/definitions/SqlInterfaceQueryCreate" - } + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "SQL Interface Query", + "description": "Looker Settings", "schema": { - "$ref": "#/definitions/SqlInterfaceQuery" + "$ref": "#/definitions/Setting" } }, "400": { @@ -24925,24 +25323,12 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "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": { @@ -24954,44 +25340,35 @@ "schema": { "$ref": "#/definitions/Error" } - }, - "500": { - "description": "Server Error", - "schema": { - "$ref": "#/definitions/Error" - } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/sql_queries": { + "/smtp_settings": { "post": { "tags": [ - "Query" + "Config" ], - "operationId": "create_sql_query", - "summary": "Create SQL Runner Query", - "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", + "operationId": "set_smtp_settings", + "summary": "Set SMTP Setting", + "description": "### Configure SMTP Settings\n This API allows users to configure the SMTP settings on the Looker instance.\n Only admin users are authorised to call this API.\n", "parameters": [ { "name": "body", "in": "body", - "description": "SQL Runner Query", + "description": "SMTP Setting Configuration", "required": true, "schema": { - "$ref": "#/definitions/SqlQueryCreate" + "$ref": "#/definitions/SmtpSettings" } } ], "responses": { - "200": { - "description": "SQL Runner Query", - "schema": { - "$ref": "#/definitions/SqlQuery" - } + "204": { + "description": "Successfully updated SMTP settings" }, "400": { "description": "Bad Request", @@ -24999,6 +25376,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -25025,32 +25408,32 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/sql_queries/{slug}": { + "/smtp_status": { "get": { "tags": [ - "Query" + "Config" ], - "operationId": "sql_query", - "summary": "Get SQL Runner Query", - "description": "Get a SQL Runner query.", + "operationId": "smtp_status", + "summary": "Get SMTP Status", + "description": "### Get current SMTP status.\n", "parameters": [ { - "name": "slug", - "in": "path", - "description": "slug of query", - "required": true, + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "SQL Runner Query", + "description": "SMTP Status", "schema": { - "$ref": "#/definitions/SqlQuery" + "$ref": "#/definitions/SmtpStatus" } }, "400": { @@ -25073,163 +25456,124 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/sql_queries/{slug}/run/{result_format}": { - "post": { + "/folders/search": { + "get": { "tags": [ - "Query" - ], - "operationId": "run_sql_query", - "summary": "Run SQL Runner Query", - "description": "Execute a SQL Runner query in a given result_format.", - "produces": [ - "text", - "application/json" + "Folder" ], + "operationId": "search_folders", + "summary": "Search Folders", + "description": "Search for folders by creator id, parent id, name, etc", "parameters": [ { - "name": "slug", - "in": "path", - "description": "slug of query", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" }, { - "name": "result_format", - "in": "path", - "description": "Format of result, options are: [\"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"json_bi\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"sql\", \"odc\", \"json_label\"]", - "required": true, - "type": "string" + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true }, { - "name": "download", + "name": "per_page", "in": "query", - "description": "Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content.", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", "required": false, - "type": "string" - } - ], - "responses": { - "200": { - "description": "SQL Runner Query", - "schema": { - "type": "string" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } + "type": "integer", + "format": "int64", + "x-looker-deprecated": true }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "type": "integer", + "format": "int64" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "db_query", - "x-looker-rate-limited": true - } - }, - "/reports/search": { - "get": { - "tags": [ - "Report" - ], - "operationId": "search_reports", - "summary": "Search Reports", - "description": "### Search Reports\n\nReturns an **array of Report objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", - "parameters": [ { - "name": "folder_id", + "name": "offset", "in": "query", - "description": "Select reports in a particular folder.", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", "required": false, - "type": "string" + "type": "integer", + "format": "int64" }, { - "name": "favorite", + "name": "sorts", "in": "query", - "description": "Select favorite reports.", + "description": "Fields to sort by.", "required": false, - "type": "boolean" + "type": "string" }, { - "name": "recent", + "name": "name", "in": "query", - "description": "Select reports viewed recently.", + "description": "Match Space title.", "required": false, - "type": "boolean" + "type": "string" }, { "name": "id", "in": "query", - "description": "Match report id.", + "description": "Match Space id", "required": false, "type": "string" }, { - "name": "title", + "name": "parent_id", "in": "query", - "description": "Match report title.", + "description": "Filter on a children of a particular folder.", "required": false, "type": "string" }, { - "name": "sorts", + "name": "creator_id", "in": "query", - "description": "One or more fields to sort results by.", + "description": "Filter on folder created by a particular user.", "required": false, "type": "string" }, { - "name": "limit", + "name": "filter_or", "in": "query", - "description": "Number of results to return.(used with next_page_token)", + "description": "Combine given search criteria in a boolean OR expression", "required": false, - "type": "integer", - "format": "int64" + "type": "boolean" }, { - "name": "fields", + "name": "is_shared_root", "in": "query", - "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response.", + "description": "Match is shared root", "required": false, - "type": "string" + "type": "boolean" }, { - "name": "next_page_token", + "name": "is_users_root", "in": "query", - "description": "Contains a token that can be used to return up to Number of results to return.(used with next_page_token) additional results. A next_page_token will not be returned if there are no additional results to display.", + "description": "Match is users root", "required": false, - "type": "string" + "type": "boolean" } ], "responses": { "200": { - "description": "returns a list of reports.", + "description": "folders", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Report" + "$ref": "#/definitions/Folder" } } }, @@ -25252,20 +25596,27 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/support_access/allowlist": { + "/folders/{folder_id}": { "get": { "tags": [ - "Auth" + "Folder" ], - "operationId": "get_support_access_allowlist_entries", - "summary": "Get Support Access Allowlist Users", - "description": "### Get Support Access Allowlist Users\n\nReturns the users that have been added to the Support Access Allowlist\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "folder", + "summary": "Get Folder", + "description": "### Get information about the folder with a specific id.", "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", @@ -25276,12 +25627,9 @@ ], "responses": { "200": { - "description": "Support Access Allowlist Entries", + "description": "Folder", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/SupportAccessAllowlistEntry" - } + "$ref": "#/definitions/Folder" } }, "400": { @@ -25290,8 +25638,48 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "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 + }, + "delete": { + "tags": [ + "Folder" + ], + "operationId": "delete_folder", + "summary": "Delete Folder", + "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", "schema": { "$ref": "#/definitions/Error" } @@ -25302,6 +25690,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -25313,32 +25707,36 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "patch": { "tags": [ - "Auth" + "Folder" ], - "operationId": "add_support_access_allowlist_entries", - "summary": "Add Support Access Allowlist Users", - "description": "### Add Support Access Allowlist Users\n\nAdds a list of emails to the Allowlist, using the provided reason\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "update_folder", + "summary": "Update Folder", + "description": "### Update the folder with a specific id.", "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "type": "string" + }, { "name": "body", "in": "body", - "description": "Request params.", + "description": "Folder parameters", "required": true, "schema": { - "$ref": "#/definitions/SupportAccessAddEntries" + "$ref": "#/definitions/UpdateFolder" } } ], "responses": { "200": { - "description": "Support Access Allowlist Entries", + "description": "Folder", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/SupportAccessAllowlistEntry" - } + "$ref": "#/definitions/Folder" } }, "400": { @@ -25347,12 +25745,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -25377,28 +25769,31 @@ "x-looker-rate-limited": true } }, - "/support_access/allowlist/{entry_id}": { - "delete": { + "/folders": { + "get": { "tags": [ - "Auth" + "Folder" ], - "operationId": "delete_support_access_allowlist_entry", - "summary": "Delete Support Access Allowlist Entry", - "description": "### Delete Support Access Allowlist User\n\nDeletes the specified Allowlist Entry Id\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "all_folders", + "summary": "Get All Folders", + "description": "### Get information about all folders.\n\nAll personal folders will be returned.\n\n", "parameters": [ { - "name": "entry_id", - "in": "path", - "description": "Id of Allowlist Entry", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" } ], "responses": { - "204": { - "description": "Entry successfully deleted.", + "200": { + "description": "Folder", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/FolderBase" + } } }, "400": { @@ -25407,12 +25802,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -25429,32 +25818,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/support_access/enable": { - "put": { + }, + "post": { "tags": [ - "Auth" + "Folder" ], - "operationId": "enable_support_access", - "summary": "Enable Support Access", - "description": "### Enable Support Access\n\nEnables Support Access for the provided duration\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "create_folder", + "summary": "Create Folder", + "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", "parameters": [ { "name": "body", "in": "body", - "description": "Enable Support Access request params.", + "description": "Folder parameters", "required": true, "schema": { - "$ref": "#/definitions/SupportAccessEnable" + "$ref": "#/definitions/CreateFolder" } } ], "responses": { "200": { - "description": "Support Access Status", + "description": "Folder", "schema": { - "$ref": "#/definitions/SupportAccessStatus" + "$ref": "#/definitions/Folder" } }, "400": { @@ -25463,12 +25850,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -25499,19 +25880,79 @@ "x-looker-rate-limited": true } }, - "/support_access/disable": { - "put": { + "/folders/{folder_id}/children": { + "get": { "tags": [ - "Auth" + "Folder" + ], + "operationId": "folder_children", + "summary": "Get Folder Children", + "description": "### Get the children of a folder.", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + } ], - "operationId": "disable_support_access", - "summary": "Disable Support Access", - "description": "### Disable Support Access\n\nDisables Support Access immediately\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Support Access Status", + "description": "Folders", "schema": { - "$ref": "#/definitions/SupportAccessStatus" + "type": "array", + "items": { + "$ref": "#/definitions/Folder" + } } }, "400": { @@ -25520,12 +25961,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -25544,19 +25979,52 @@ "x-looker-rate-limited": true } }, - "/support_access/status": { + "/folders/{folder_id}/children/search": { "get": { "tags": [ - "Auth" + "Folder" + ], + "operationId": "folder_children_search", + "summary": "Search Folder Children", + "description": "### Search the children of a folder", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "name", + "in": "query", + "description": "Match folder name.", + "required": false, + "type": "string" + } ], - "operationId": "support_access_status", - "summary": "Support Access Status", - "description": "### Support Access Status\n\nReturns the current Support Access Status\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Support Access Status", + "description": "Folders", "schema": { - "$ref": "#/definitions/SupportAccessStatus" + "type": "array", + "items": { + "$ref": "#/definitions/Folder" + } } }, "400": { @@ -25565,12 +26033,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -25589,15 +26051,22 @@ "x-looker-rate-limited": true } }, - "/themes": { + "/folders/{folder_id}/parent": { "get": { "tags": [ - "Theme" + "Folder" ], - "operationId": "all_themes", - "summary": "Get All Themes", - "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "folder_parent", + "summary": "Get Folder Parent", + "description": "### Get the parent of a folder", "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", @@ -25608,12 +26077,9 @@ ], "responses": { "200": { - "description": "Themes", + "description": "Folder", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Theme" - } + "$ref": "#/definitions/Folder" } }, "400": { @@ -25638,30 +26104,40 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/folders/{folder_id}/ancestors": { + "get": { "tags": [ - "Theme" + "Folder" ], - "operationId": "create_theme", - "summary": "Create Theme", - "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://docs.cloud.google.com/looker/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "folder_ancestors", + "summary": "Get Folder Ancestors", + "description": "### Get the ancestors of a folder", "parameters": [ { - "name": "body", - "in": "body", - "description": "Theme", + "name": "folder_id", + "in": "path", + "description": "Id of folder", "required": true, - "schema": { - "$ref": "#/definitions/Theme" - } + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Theme", + "description": "Folders", "schema": { - "$ref": "#/definitions/Theme" + "type": "array", + "items": { + "$ref": "#/definitions/Folder" + } } }, "400": { @@ -25676,18 +26152,6 @@ "$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": { @@ -25700,66 +26164,20 @@ "x-looker-rate-limited": true } }, - "/themes/search": { + "/folders/{folder_id}/looks": { "get": { "tags": [ - "Theme" + "Folder" ], - "operationId": "search_themes", - "summary": "Search Themes", - "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "folder_looks", + "summary": "Get Folder Looks", + "description": "### Get all looks in a folder.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", "parameters": [ { - "name": "id", - "in": "query", - "description": "Match theme id.", - "required": false, - "type": "string" - }, - { - "name": "name", - "in": "query", - "description": "Match theme name.", - "required": false, - "type": "string" - }, - { - "name": "begin_at", - "in": "query", - "description": "Timestamp for activation.", - "required": false, - "type": "string", - "format": "date-time" - }, - { - "name": "end_at", - "in": "query", - "description": "Timestamp for expiration.", - "required": false, - "type": "string", - "format": "date-time" - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, "type": "string" }, { @@ -25768,29 +26186,15 @@ "description": "Requested fields.", "required": false, "type": "string" - }, - { - "name": "filter_or", - "in": "query", - "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": { "200": { - "description": "Themes", + "description": "Looks", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Theme" + "$ref": "#/definitions/LookWithQuery" } } }, @@ -25800,24 +26204,12 @@ "$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": { @@ -25830,29 +26222,38 @@ "x-looker-rate-limited": true } }, - "/themes/default": { + "/folders/{folder_id}/dashboards": { "get": { "tags": [ - "Theme" + "Folder" ], - "operationId": "default_theme", - "summary": "Get Default Theme", - "description": "### Get the default theme\n\nThis endpoint is deprecated. [Get Default Theme (with type)](#!/Theme/default_theme_by_type) should be used instead.\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", + "operationId": "folder_dashboards", + "summary": "Get Folder Dashboards", + "description": "### Get the dashboards in a folder", "parameters": [ { - "name": "ts", + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "type": "string" + }, + { + "name": "fields", "in": "query", - "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "description": "Requested fields.", "required": false, - "type": "string", - "format": "date-time" + "type": "string" } ], "responses": { "200": { - "description": "Theme", + "description": "Dashboard", "schema": { - "$ref": "#/definitions/Theme" + "type": "array", + "items": { + "$ref": "#/definitions/Dashboard" + } } }, "400": { @@ -25874,32 +26275,33 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/sql_interface_queries/metadata": { + "get": { "tags": [ - "Theme" + "SqlInterfaceQuery" ], - "operationId": "set_default_theme", - "summary": "Set Default Theme", - "description": "### Set the global default theme by theme name\n\nThis endpoint is deprecated. [Set Default Theme (with type)](#!/Theme/set_default_theme_by_type) should be used instead.\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "sql_interface_metadata", + "summary": "Get SQL Interface Query Metadata", + "description": "### Handles Avatica RPC metadata requests for SQL Interface queries", "parameters": [ { - "name": "name", + "name": "avatica_request", "in": "query", - "description": "Name of theme to set as default", - "required": true, + "description": "Avatica RPC request", + "required": false, "type": "string" } ], "responses": { "200": { - "description": "Theme", + "description": null, "schema": { - "$ref": "#/definitions/Theme" + "$ref": "#/definitions/SqlInterfaceQueryMetadata" } }, "400": { @@ -25908,16 +26310,16 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "schema": { - "$ref": "#/definitions/ValidationError" + "$ref": "#/definitions/Error" } }, "429": { @@ -25927,42 +26329,45 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/themes/default_theme": { + "/sql_interface_queries/{query_id}/run/{result_format}": { "get": { "tags": [ - "Theme" + "SqlInterfaceQuery" + ], + "operationId": "run_sql_interface_query", + "summary": "Run SQL Interface Query", + "description": "### Run a saved SQL interface query.\n\nThis runs a previously created SQL interface query.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json_bi | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n\n\n", + "produces": [ + "text", + "application/json" ], - "operationId": "default_theme_by_type", - "summary": "Get Default Theme (with type)", - "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n\nThe optional `theme_type` parameter can specify the theme type to select for.\n", "parameters": [ { - "name": "ts", - "in": "query", - "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", - "required": false, - "type": "string", - "format": "date-time" + "name": "query_id", + "in": "path", + "description": "Integer id of query", + "required": true, + "type": "integer", + "format": "int64" }, { - "name": "theme_type", - "in": "query", - "description": "Theme type.", + "name": "result_format", + "in": "path", + "description": "Format of result, options are: [\"json_bi\"]", "required": true, "type": "string" } ], "responses": { "200": { - "description": "Theme", + "description": "Query Result", "schema": { - "$ref": "#/definitions/Theme" + "$ref": "#/definitions/JsonBi" } }, "400": { @@ -25971,6 +26376,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -25991,37 +26402,34 @@ } }, "x-looker-status": "beta", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/sql_interface_queries": { + "post": { "tags": [ - "Theme" + "SqlInterfaceQuery" ], - "operationId": "set_default_theme_by_type", - "summary": "Set Default Theme (with type)", - "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\nThe optional `theme_type` parameter can specify the theme type to select for.\n", + "operationId": "create_sql_interface_query", + "summary": "Create SQL Interface Query", + "description": "### Create a SQL interface query.\n\nThis allows you to create a new SQL interface query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", "parameters": [ { - "name": "name", - "in": "query", - "description": "Name of theme to set as default", - "required": true, - "type": "string" - }, - { - "name": "theme_type", - "in": "query", - "description": "Theme type.", + "name": "body", + "in": "body", + "description": "SQL Interface Query Create", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/SqlInterfaceQueryCreate" + } } ], "responses": { "200": { - "description": "Theme", + "description": "SQL Interface Query", "schema": { - "$ref": "#/definitions/Theme" + "$ref": "#/definitions/SqlInterfaceQuery" } }, "400": { @@ -26042,6 +26450,12 @@ "$ref": "#/definitions/Error" } }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, "422": { "description": "Validation Error", "schema": { @@ -26053,60 +26467,43 @@ "schema": { "$ref": "#/definitions/Error" } + }, + "500": { + "description": "Server Error", + "schema": { + "$ref": "#/definitions/Error" + } } }, "x-looker-status": "beta", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/themes/active": { - "get": { + "/sql_queries": { + "post": { "tags": [ - "Theme" + "Query" ], - "operationId": "active_themes", - "summary": "Get Active Themes", - "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "create_sql_query", + "summary": "Create SQL Runner Query", + "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", "parameters": [ { - "name": "name", - "in": "query", - "description": "Name of theme", - "required": false, - "type": "string" - }, - { - "name": "ts", - "in": "query", - "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", - "required": false, - "type": "string", - "format": "date-time" - }, - { - "name": "theme_type", - "in": "query", - "description": "Theme type.", - "required": false, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" + "name": "body", + "in": "body", + "description": "SQL Runner Query", + "required": true, + "schema": { + "$ref": "#/definitions/SqlQueryCreate" + } } ], "responses": { "200": { - "description": "Themes", + "description": "SQL Runner Query", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Theme" - } + "$ref": "#/definitions/SqlQuery" } }, "400": { @@ -26115,14 +26512,14 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } @@ -26141,40 +26538,32 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/themes/theme_or_default": { + "/sql_queries/{slug}": { "get": { "tags": [ - "Theme" + "Query" ], - "operationId": "theme_or_default", - "summary": "Get Theme or Default", - "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "sql_query", + "summary": "Get SQL Runner Query", + "description": "Get a SQL Runner query.", "parameters": [ { - "name": "name", - "in": "query", - "description": "Name of theme", + "name": "slug", + "in": "path", + "description": "slug of query", "required": true, "type": "string" - }, - { - "name": "ts", - "in": "query", - "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", - "required": false, - "type": "string", - "format": "date-time" } ], "responses": { "200": { - "description": "Theme", + "description": "SQL Runner Query", "schema": { - "$ref": "#/definitions/Theme" + "$ref": "#/definitions/SqlQuery" } }, "400": { @@ -26197,38 +26586,48 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/themes/validate": { + "/sql_queries/{slug}/run/{result_format}": { "post": { "tags": [ - "Theme" + "Query" + ], + "operationId": "run_sql_query", + "summary": "Run SQL Runner Query", + "description": "Execute a SQL Runner query in a given result_format.", + "produces": [ + "text", + "application/json" ], - "operationId": "validate_theme", - "summary": "Validate Theme", - "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "body", - "in": "body", - "description": "Theme", + "name": "slug", + "in": "path", + "description": "slug of query", "required": true, - "schema": { - "$ref": "#/definitions/Theme" - } + "type": "string" + }, + { + "name": "result_format", + "in": "path", + "description": "Format of result, options are: [\"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"json_bi\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"sql\", \"odc\", \"json_label\"]", + "required": true, + "type": "string" + }, + { + "name": "download", + "in": "query", + "description": "Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content.", + "required": false, + "type": "string" } ], "responses": { "200": { - "description": "Theme validation results", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, - "204": { - "description": "No errors detected with the theme", + "description": "SQL Runner Query", "schema": { "type": "string" } @@ -26245,12 +26644,6 @@ "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", - "schema": { - "$ref": "#/definitions/Error" - } - }, "422": { "description": "Validation Error", "schema": { @@ -26265,187 +26658,91 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/themes/{theme_id}": { + "/reports/search": { "get": { "tags": [ - "Theme" + "Report" ], - "operationId": "theme", - "summary": "Get Theme", - "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "search_reports", + "summary": "Search Reports", + "description": "### Search Reports\n\nReturns an **array of Report objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "theme_id", - "in": "path", - "description": "Id of theme", - "required": true, + "name": "folder_id", + "in": "query", + "description": "Select reports in a particular folder.", + "required": false, "type": "string" }, { - "name": "fields", + "name": "favorite", "in": "query", - "description": "Requested fields.", + "description": "Select favorite reports.", "required": false, - "type": "string" - } - ], - "responses": { - "200": { - "description": "Theme", - "schema": { - "$ref": "#/definitions/Theme" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } + "type": "boolean" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "recent", + "in": "query", + "description": "Select reports viewed recently.", + "required": false, + "type": "boolean" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "patch": { - "tags": [ - "Theme" - ], - "operationId": "update_theme", - "summary": "Update Theme", - "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", - "parameters": [ { - "name": "theme_id", - "in": "path", - "description": "Id of theme", - "required": true, + "name": "id", + "in": "query", + "description": "Match report id.", + "required": false, "type": "string" }, { - "name": "body", - "in": "body", - "description": "Theme", - "required": true, - "schema": { - "$ref": "#/definitions/Theme" - } - } - ], - "responses": { - "200": { - "description": "Theme", - "schema": { - "$ref": "#/definitions/Theme" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } + "name": "title", + "in": "query", + "description": "Match report title.", + "required": false, + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "delete": { - "tags": [ - "Theme" - ], - "operationId": "delete_theme", - "summary": "Delete Theme", - "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", - "parameters": [ { - "name": "theme_id", - "in": "path", - "description": "Id of theme", - "required": true, + "name": "sorts", + "in": "query", + "description": "One or more fields to sort results by.", + "required": false, "type": "string" - } - ], - "responses": { - "204": { - "description": "Successfully deleted.", - "schema": { - "type": "string" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "limit", + "in": "query", + "description": "Number of results to return.(used with next_page_token)", + "required": false, + "type": "integer", + "format": "int64" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "fields", + "in": "query", + "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response.", + "required": false, + "type": "string" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "next_page_token", + "in": "query", + "description": "Contains a token that can be used to return up to Number of results to return.(used with next_page_token) additional results. A next_page_token will not be returned if there are no additional results to display.", + "required": false, + "type": "string" } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/timezones": { - "get": { - "tags": [ - "Config" ], - "operationId": "all_timezones", - "summary": "Get All Timezones", - "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", "responses": { "200": { - "description": "Timezone", + "description": "returns a list of reports.", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Timezone" + "$ref": "#/definitions/Report" } } }, @@ -26468,19 +26765,19 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "alpha", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/ssh_servers": { + "/support_access/allowlist": { "get": { "tags": [ - "Connection" + "Auth" ], - "operationId": "all_ssh_servers", - "summary": "Get All SSH Servers", - "description": "### Get information about all SSH Servers.\n", + "operationId": "get_support_access_allowlist_entries", + "summary": "Get Support Access Allowlist Users", + "description": "### Get Support Access Allowlist Users\n\nReturns the users that have been added to the Support Access Allowlist\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "fields", @@ -26492,11 +26789,11 @@ ], "responses": { "200": { - "description": "SSH Server", + "description": "Support Access Allowlist Entries", "schema": { "type": "array", "items": { - "$ref": "#/definitions/SshServer" + "$ref": "#/definitions/SupportAccessAllowlistEntry" } } }, @@ -26506,6 +26803,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -26525,27 +26828,30 @@ }, "post": { "tags": [ - "Connection" + "Auth" ], - "operationId": "create_ssh_server", - "summary": "Create SSH Server", - "description": "### Create an SSH Server.\n", + "operationId": "add_support_access_allowlist_entries", + "summary": "Add Support Access Allowlist Users", + "description": "### Add Support Access Allowlist Users\n\nAdds a list of emails to the Allowlist, using the provided reason\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { "name": "body", "in": "body", - "description": "SSH Server", + "description": "Request params.", "required": true, "schema": { - "$ref": "#/definitions/SshServer" + "$ref": "#/definitions/SupportAccessAddEntries" } } ], "responses": { "200": { - "description": "SSH Server", + "description": "Support Access Allowlist Entries", "schema": { - "$ref": "#/definitions/SshServer" + "type": "array", + "items": { + "$ref": "#/definitions/SupportAccessAllowlistEntry" + } } }, "400": { @@ -26554,14 +26860,14 @@ "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "schema": { "$ref": "#/definitions/Error" } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } @@ -26584,28 +26890,28 @@ "x-looker-rate-limited": true } }, - "/ssh_server/{ssh_server_id}": { - "get": { + "/support_access/allowlist/{entry_id}": { + "delete": { "tags": [ - "Connection" + "Auth" ], - "operationId": "ssh_server", - "summary": "Get SSH Server", - "description": "### Get information about an SSH Server.\n", + "operationId": "delete_support_access_allowlist_entry", + "summary": "Delete Support Access Allowlist Entry", + "description": "### Delete Support Access Allowlist User\n\nDeletes the specified Allowlist Entry Id\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "ssh_server_id", + "name": "entry_id", "in": "path", - "description": "Id of SSH Server", + "description": "Id of Allowlist Entry", "required": true, "type": "string" } ], "responses": { - "200": { - "description": "SSH Server", + "204": { + "description": "Entry successfully deleted.", "schema": { - "$ref": "#/definitions/SshServer" + "type": "string" } }, "400": { @@ -26614,6 +26920,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -26630,37 +26942,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/support_access/enable": { + "put": { "tags": [ - "Connection" + "Auth" ], - "operationId": "update_ssh_server", - "summary": "Update SSH Server", - "description": "### Update an SSH Server.\n", + "operationId": "enable_support_access", + "summary": "Enable Support Access", + "description": "### Enable Support Access\n\nEnables Support Access for the provided duration\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ - { - "name": "ssh_server_id", - "in": "path", - "description": "Id of SSH Server", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "SSH Server", + "description": "Enable Support Access request params.", "required": true, "schema": { - "$ref": "#/definitions/SshServer" + "$ref": "#/definitions/SupportAccessEnable" } } ], "responses": { "200": { - "description": "SSH Server", + "description": "Support Access Status", "schema": { - "$ref": "#/definitions/SshServer" + "$ref": "#/definitions/SupportAccessStatus" } }, "400": { @@ -26669,12 +26976,24 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "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": { @@ -26691,28 +27010,21 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/support_access/disable": { + "put": { "tags": [ - "Connection" - ], - "operationId": "delete_ssh_server", - "summary": "Delete SSH Server", - "description": "### Delete an SSH Server.\n", - "parameters": [ - { - "name": "ssh_server_id", - "in": "path", - "description": "Id of SSH Server", - "required": true, - "type": "string" - } + "Auth" ], + "operationId": "disable_support_access", + "summary": "Disable Support Access", + "description": "### Disable Support Access\n\nDisables Support Access immediately\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Support Access Status", "schema": { - "type": "string" + "$ref": "#/definitions/SupportAccessStatus" } }, "400": { @@ -26721,6 +27033,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -26739,28 +27057,19 @@ "x-looker-rate-limited": true } }, - "/ssh_server/{ssh_server_id}/test": { + "/support_access/status": { "get": { "tags": [ - "Connection" - ], - "operationId": "test_ssh_server", - "summary": "Test SSH Server", - "description": "### Test the SSH Server\n", - "parameters": [ - { - "name": "ssh_server_id", - "in": "path", - "description": "Id of SSH Server", - "required": true, - "type": "string" - } + "Auth" ], + "operationId": "support_access_status", + "summary": "Support Access Status", + "description": "### Support Access Status\n\nReturns the current Support Access Status\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Test SSH Server", + "description": "Support Access Status", "schema": { - "$ref": "#/definitions/SshServer" + "$ref": "#/definitions/SupportAccessStatus" } }, "400": { @@ -26769,6 +27078,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -26787,14 +27102,14 @@ "x-looker-rate-limited": true } }, - "/ssh_tunnels": { + "/themes": { "get": { "tags": [ - "Connection" + "Theme" ], - "operationId": "all_ssh_tunnels", - "summary": "Get All SSH Tunnels", - "description": "### Get information about all SSH Tunnels.\n", + "operationId": "all_themes", + "summary": "Get All Themes", + "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "fields", @@ -26806,11 +27121,11 @@ ], "responses": { "200": { - "description": "SSH Tunnel", + "description": "Themes", "schema": { "type": "array", "items": { - "$ref": "#/definitions/SshTunnel" + "$ref": "#/definitions/Theme" } } }, @@ -26839,27 +27154,27 @@ }, "post": { "tags": [ - "Connection" + "Theme" ], - "operationId": "create_ssh_tunnel", - "summary": "Create SSH Tunnel", - "description": "### Create an SSH Tunnel\n", + "operationId": "create_theme", + "summary": "Create Theme", + "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://docs.cloud.google.com/looker/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "body", "in": "body", - "description": "SSH Tunnel", + "description": "Theme", "required": true, "schema": { - "$ref": "#/definitions/SshTunnel" + "$ref": "#/definitions/Theme" } } ], "responses": { "200": { - "description": "SSH Tunnel", + "description": "Theme", "schema": { - "$ref": "#/definitions/SshTunnel" + "$ref": "#/definitions/Theme" } }, "400": { @@ -26898,83 +27213,98 @@ "x-looker-rate-limited": true } }, - "/ssh_tunnel/{ssh_tunnel_id}": { + "/themes/search": { "get": { "tags": [ - "Connection" + "Theme" ], - "operationId": "ssh_tunnel", - "summary": "Get SSH Tunnel", - "description": "### Get information about an SSH Tunnel.\n", + "operationId": "search_themes", + "summary": "Search Themes", + "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "ssh_tunnel_id", - "in": "path", - "description": "Id of SSH Tunnel", - "required": true, + "name": "id", + "in": "query", + "description": "Match theme id.", + "required": false, "type": "string" - } - ], - "responses": { - "200": { - "description": "SSH Tunnel", - "schema": { - "$ref": "#/definitions/SshTunnel" - } }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "name", + "in": "query", + "description": "Match theme name.", + "required": false, + "type": "string" }, - "404": { - "description": "Not Found", - "schema": { - "$ref": "#/definitions/Error" - } + { + "name": "begin_at", + "in": "query", + "description": "Timestamp for activation.", + "required": false, + "type": "string", + "format": "date-time" }, - "429": { - "description": "Too Many Requests", - "schema": { - "$ref": "#/definitions/Error" - } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "patch": { - "tags": [ - "Connection" - ], - "operationId": "update_ssh_tunnel", - "summary": "Update SSH Tunnel", - "description": "### Update an SSH Tunnel\n", - "parameters": [ { - "name": "ssh_tunnel_id", - "in": "path", - "description": "Id of SSH Tunnel", - "required": true, - "type": "string" + "name": "end_at", + "in": "query", + "description": "Timestamp for expiration.", + "required": false, + "type": "string", + "format": "date-time" }, { - "name": "body", - "in": "body", - "description": "SSH Tunnel", - "required": true, - "schema": { - "$ref": "#/definitions/SshTunnel" - } + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "filter_or", + "in": "query", + "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": { "200": { - "description": "SSH Tunnel", + "description": "Themes", "schema": { - "$ref": "#/definitions/SshTunnel" + "type": "array", + "items": { + "$ref": "#/definitions/Theme" + } } }, "400": { @@ -26983,6 +27313,12 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { @@ -27005,28 +27341,78 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true + } + }, + "/themes/default": { + "get": { + "tags": [ + "Theme" + ], + "operationId": "default_theme", + "summary": "Get Default Theme", + "description": "### Get the default theme\n\nThis endpoint is deprecated. [Get Default Theme (with type)](#!/Theme/default_theme_by_type) should be used instead.\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", + "parameters": [ + { + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "type": "string", + "format": "date-time" + } + ], + "responses": { + "200": { + "description": "Theme", + "schema": { + "$ref": "#/definitions/Theme" + } + }, + "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" + } + } + }, + "deprecated": true, + "x-looker-status": "deprecated", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true }, - "delete": { + "put": { "tags": [ - "Connection" + "Theme" ], - "operationId": "delete_ssh_tunnel", - "summary": "Delete SSH Tunnel", - "description": "### Delete an SSH Tunnel\n", + "operationId": "set_default_theme", + "summary": "Set Default Theme", + "description": "### Set the global default theme by theme name\n\nThis endpoint is deprecated. [Set Default Theme (with type)](#!/Theme/set_default_theme_by_type) should be used instead.\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "ssh_tunnel_id", - "in": "path", - "description": "Id of SSH Tunnel", + "name": "name", + "in": "query", + "description": "Name of theme to set as default", "required": true, "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Theme", "schema": { - "type": "string" + "$ref": "#/definitions/Theme" } }, "400": { @@ -27041,6 +27427,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -27048,33 +27440,42 @@ } } }, - "x-looker-status": "stable", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/ssh_tunnel/{ssh_tunnel_id}/test": { + "/themes/default_theme": { "get": { "tags": [ - "Connection" + "Theme" ], - "operationId": "test_ssh_tunnel", - "summary": "Test SSH Tunnel", - "description": "### Test the SSH Tunnel\n", + "operationId": "default_theme_by_type", + "summary": "Get Default Theme (with type)", + "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n\nThe optional `theme_type` parameter can specify the theme type to select for.\n", "parameters": [ { - "name": "ssh_tunnel_id", - "in": "path", - "description": "Id of SSH Tunnel", + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "theme_type", + "in": "query", + "description": "Theme type.", "required": true, "type": "string" } ], "responses": { "200": { - "description": "Test SSH Tunnel", + "description": "Theme", "schema": { - "$ref": "#/definitions/SshTunnel" + "$ref": "#/definitions/Theme" } }, "400": { @@ -27089,6 +27490,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -27096,24 +27503,38 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/ssh_public_key": { - "get": { + }, + "put": { "tags": [ - "Connection" + "Theme" + ], + "operationId": "set_default_theme_by_type", + "summary": "Set Default Theme (with type)", + "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\nThe optional `theme_type` parameter can specify the theme type to select for.\n", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Name of theme to set as default", + "required": true, + "type": "string" + }, + { + "name": "theme_type", + "in": "query", + "description": "Theme type.", + "required": true, + "type": "string" + } ], - "operationId": "ssh_public_key", - "summary": "Get SSH Public Key", - "description": "### Get the SSH public key\n\nGet the public key created for this instance to identify itself to a remote SSH server.\n", "responses": { "200": { - "description": "SSH Public Key", + "description": "Theme", "schema": { - "$ref": "#/definitions/SshPublicKey" + "$ref": "#/definitions/Theme" } }, "400": { @@ -27122,12 +27543,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": { @@ -27135,42 +27568,57 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/user_attributes": { + "/themes/active": { "get": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "all_user_attributes", - "summary": "Get All User Attributes", - "description": "### Get information about all user attributes.\n", + "operationId": "active_themes", + "summary": "Get Active Themes", + "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "fields", + "name": "name", "in": "query", - "description": "Requested fields.", + "description": "Name of theme", "required": false, "type": "string" }, { - "name": "sorts", + "name": "ts", "in": "query", - "description": "Fields to order the results by. Sortable fields include: name, label", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "type": "string", + "format": "date-time" + }, + { + "name": "theme_type", + "in": "query", + "description": "Theme type.", + "required": false, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", "required": false, "type": "string" } ], "responses": { "200": { - "description": "User Attribute", + "description": "Themes", "schema": { "type": "array", "items": { - "$ref": "#/definitions/UserAttribute" + "$ref": "#/definitions/Theme" } } }, @@ -27180,12 +27628,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": { @@ -27196,37 +27656,94 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/themes/theme_or_default": { + "get": { + "tags": [ + "Theme" + ], + "operationId": "theme_or_default", + "summary": "Get Theme or Default", + "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Name of theme", + "required": true, + "type": "string" + }, + { + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "type": "string", + "format": "date-time" + } + ], + "responses": { + "200": { + "description": "Theme", + "schema": { + "$ref": "#/definitions/Theme" + } + }, + "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 + } + }, + "/themes/validate": { "post": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "create_user_attribute", - "summary": "Create User Attribute", - "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", + "operationId": "validate_theme", + "summary": "Validate Theme", + "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "body", "in": "body", - "description": "User Attribute", + "description": "Theme", "required": true, "schema": { - "$ref": "#/definitions/UserAttribute" + "$ref": "#/definitions/Theme" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "User Attribute", + "description": "Theme validation results", "schema": { - "$ref": "#/definitions/UserAttribute" + "$ref": "#/definitions/ValidationError" + } + }, + "204": { + "description": "No errors detected with the theme", + "schema": { + "type": "string" } }, "400": { @@ -27265,19 +27782,19 @@ "x-looker-rate-limited": true } }, - "/user_attributes/{user_attribute_id}": { + "/themes/{theme_id}": { "get": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "user_attribute", - "summary": "Get User Attribute", - "description": "### Get information about a user attribute.\n", + "operationId": "theme", + "summary": "Get Theme", + "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "user_attribute_id", + "name": "theme_id", "in": "path", - "description": "Id of user attribute", + "description": "Id of theme", "required": true, "type": "string" }, @@ -27291,9 +27808,9 @@ ], "responses": { "200": { - "description": "User Attribute", + "description": "Theme", "schema": { - "$ref": "#/definitions/UserAttribute" + "$ref": "#/definitions/Theme" } }, "400": { @@ -27321,41 +27838,34 @@ }, "patch": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "update_user_attribute", - "summary": "Update User Attribute", - "description": "### Update a user attribute definition.\n", + "operationId": "update_theme", + "summary": "Update Theme", + "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "user_attribute_id", + "name": "theme_id", "in": "path", - "description": "Id of user attribute", + "description": "Id of theme", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "User Attribute", + "description": "Theme", "required": true, "schema": { - "$ref": "#/definitions/UserAttribute" + "$ref": "#/definitions/Theme" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "User Attribute", + "description": "Theme", "schema": { - "$ref": "#/definitions/UserAttribute" + "$ref": "#/definitions/Theme" } }, "400": { @@ -27389,16 +27899,16 @@ }, "delete": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "delete_user_attribute", - "summary": "Delete User Attribute", - "description": "### Delete a user attribute (admin only).\n", + "operationId": "delete_theme", + "summary": "Delete Theme", + "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "user_attribute_id", + "name": "theme_id", "in": "path", - "description": "Id of user attribute", + "description": "Id of theme", "required": true, "type": "string" } @@ -27434,22 +27944,57 @@ "x-looker-rate-limited": true } }, - "/user_attributes/{user_attribute_id}/group_values": { + "/timezones": { "get": { "tags": [ - "UserAttribute" + "Config" ], - "operationId": "all_user_attribute_group_values", - "summary": "Get User Attribute Group Values", - "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", - "parameters": [ - { - "name": "user_attribute_id", - "in": "path", - "description": "Id of user attribute", - "required": true, - "type": "string" + "operationId": "all_timezones", + "summary": "Get All Timezones", + "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", + "responses": { + "200": { + "description": "Timezone", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Timezone" + } + } + }, + "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 + } + }, + "/ssh_servers": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "all_ssh_servers", + "summary": "Get All SSH Servers", + "description": "### Get information about all SSH Servers.\n", + "parameters": [ { "name": "fields", "in": "query", @@ -27460,11 +28005,11 @@ ], "responses": { "200": { - "description": "All group values for attribute.", + "description": "SSH Server", "schema": { "type": "array", "items": { - "$ref": "#/definitions/UserAttributeGroupValue" + "$ref": "#/definitions/SshServer" } } }, @@ -27493,40 +28038,27 @@ }, "post": { "tags": [ - "UserAttribute" + "Connection" ], - "operationId": "set_user_attribute_group_values", - "summary": "Set User Attribute Group Values", - "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", + "operationId": "create_ssh_server", + "summary": "Create SSH Server", + "description": "### Create an SSH Server.\n", "parameters": [ - { - "name": "user_attribute_id", - "in": "path", - "description": "Id of user attribute", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "Array of group values.", + "description": "SSH Server", "required": true, "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/UserAttributeGroupValue" - } + "$ref": "#/definitions/SshServer" } } ], "responses": { "200": { - "description": "Array of group values.", + "description": "SSH Server", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/UserAttributeGroupValue" - } + "$ref": "#/definitions/SshServer" } }, "400": { @@ -27565,31 +28097,28 @@ "x-looker-rate-limited": true } }, - "/user_login_lockouts": { + "/ssh_server/{ssh_server_id}": { "get": { "tags": [ - "Auth" + "Connection" ], - "operationId": "all_user_login_lockouts", - "summary": "Get All User Login Lockouts", - "description": "### Get currently locked-out users.\n", + "operationId": "ssh_server", + "summary": "Get SSH Server", + "description": "### Get information about an SSH Server.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Include only these fields in the response", - "required": false, + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, "type": "string" } ], "responses": { "200": { - "description": "User Login Lockout", + "description": "SSH Server", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/UserLoginLockout" - } + "$ref": "#/definitions/SshServer" } }, "400": { @@ -27614,109 +28143,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/user_login_lockouts/search": { - "get": { + }, + "patch": { "tags": [ - "Auth" + "Connection" ], - "operationId": "search_user_login_lockouts", - "summary": "Search User Login Lockouts", - "description": "### Search currently locked-out users.\n", + "operationId": "update_ssh_server", + "summary": "Update SSH Server", + "description": "### Update an SSH Server.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Include only these fields in the response", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "auth_type", - "in": "query", - "description": "Auth type user is locked out for (email, ldap, totp, api)", - "required": false, - "type": "string" - }, - { - "name": "full_name", - "in": "query", - "description": "Match name", - "required": false, - "type": "string" - }, - { - "name": "email", - "in": "query", - "description": "Match email", - "required": false, - "type": "string" - }, - { - "name": "remote_id", - "in": "query", - "description": "Match remote LDAP ID", - "required": false, + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, "type": "string" }, { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "type": "boolean" + "name": "body", + "in": "body", + "description": "SSH Server", + "required": true, + "schema": { + "$ref": "#/definitions/SshServer" + } } ], "responses": { "200": { - "description": "User Login Lockout", + "description": "SSH Server", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/UserLoginLockout" - } + "$ref": "#/definitions/SshServer" } }, "400": { @@ -27731,6 +28188,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -27741,21 +28204,19 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/user_login_lockout/{key}": { + }, "delete": { "tags": [ - "Auth" + "Connection" ], - "operationId": "delete_user_login_lockout", - "summary": "Delete User Login Lockout", - "description": "### Removes login lockout for the associated user.\n", + "operationId": "delete_ssh_server", + "summary": "Delete SSH Server", + "description": "### Delete an SSH Server.\n", "parameters": [ { - "name": "key", + "name": "ssh_server_id", "in": "path", - "description": "The key associated with the locked user", + "description": "Id of SSH Server", "required": true, "type": "string" } @@ -27791,28 +28252,34 @@ "x-looker-rate-limited": true } }, - "/user": { + "/ssh_server/{ssh_server_id}/test": { "get": { "tags": [ - "User" + "Connection" ], - "operationId": "me", - "summary": "Get Current User", - "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", + "operationId": "test_ssh_server", + "summary": "Test SSH Server", + "description": "### Test the SSH Server\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, "type": "string" } ], "responses": { "200": { - "description": "Current user.", + "description": "Test SSH Server", "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/SshServer" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" } }, "404": { @@ -27833,14 +28300,14 @@ "x-looker-rate-limited": true } }, - "/users": { + "/ssh_tunnels": { "get": { "tags": [ - "User" + "Connection" ], - "operationId": "all_users", - "summary": "Get All Users", - "description": "### Get information about all users.\n", + "operationId": "all_ssh_tunnels", + "summary": "Get All SSH Tunnels", + "description": "### Get information about all SSH Tunnels.\n", "parameters": [ { "name": "fields", @@ -27848,67 +28315,15 @@ "description": "Requested fields.", "required": false, "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "ids", - "in": "query", - "description": "Optional list of ids to get specific users.", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "csv" } ], "responses": { "200": { - "description": "All users.", + "description": "SSH Tunnel", "schema": { "type": "array", "items": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/SshTunnel" } } }, @@ -27937,34 +28352,27 @@ }, "post": { "tags": [ - "User" + "Connection" ], - "operationId": "create_user", - "summary": "Create User", - "description": "### Create a user with the specified information.\n", + "operationId": "create_ssh_tunnel", + "summary": "Create SSH Tunnel", + "description": "### Create an SSH Tunnel\n", "parameters": [ { "name": "body", "in": "body", - "description": "User", - "required": false, + "description": "SSH Tunnel", + "required": true, "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/SshTunnel" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Created User", + "description": "SSH Tunnel", "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/SshTunnel" } }, "400": { @@ -28003,163 +28411,83 @@ "x-looker-rate-limited": true } }, - "/users/search": { + "/ssh_tunnel/{ssh_tunnel_id}": { "get": { "tags": [ - "User" + "Connection" ], - "operationId": "search_users", - "summary": "Search Users", - "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", + "operationId": "ssh_tunnel", + "summary": "Get SSH Tunnel", + "description": "### Get information about an SSH Tunnel.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Include only these fields in the response", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "query", - "description": "Match User Id.", - "required": false, - "type": "string" - }, - { - "name": "first_name", - "in": "query", - "description": "Match First name.", - "required": false, - "type": "string" - }, - { - "name": "last_name", - "in": "query", - "description": "Match Last name.", - "required": false, - "type": "string" - }, - { - "name": "full_name", - "in": "query", - "description": "Match Full name (First Last).", - "required": false, - "type": "string" - }, - { - "name": "verified_looker_employee", - "in": "query", - "description": "Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details.", - "required": false, - "type": "boolean" - }, - { - "name": "embed_user", - "in": "query", - "description": "Search for only embed users", - "required": false, - "type": "boolean" - }, - { - "name": "email", - "in": "query", - "description": "Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details.", - "required": false, + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, "type": "string" + } + ], + "responses": { + "200": { + "description": "SSH Tunnel", + "schema": { + "$ref": "#/definitions/SshTunnel" + } }, - { - "name": "is_disabled", - "in": "query", - "description": "Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details.", - "required": false, - "type": "boolean" - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "type": "boolean" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } }, - { - "name": "content_metadata_id", - "in": "query", - "description": "Search for users who have access to this content_metadata item", - "required": false, - "type": "string" + "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 + }, + "patch": { + "tags": [ + "Connection" + ], + "operationId": "update_ssh_tunnel", + "summary": "Update SSH Tunnel", + "description": "### Update an SSH Tunnel\n", + "parameters": [ { - "name": "group_id", - "in": "query", - "description": "Search for users who are direct members of this group", - "required": false, + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, "type": "string" }, { - "name": "can_manage_api3_creds", - "in": "query", - "description": "Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance.", - "required": false, - "type": "boolean" - }, - { - "name": "is_service_account", - "in": "query", - "description": "Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details.", - "required": false, - "type": "boolean" + "name": "body", + "in": "body", + "description": "SSH Tunnel", + "required": true, + "schema": { + "$ref": "#/definitions/SshTunnel" + } } ], "responses": { "200": { - "description": "Matching users.", + "description": "SSH Tunnel", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/User" - } + "$ref": "#/definitions/SshTunnel" } }, "400": { @@ -28174,6 +28502,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -28184,123 +28518,115 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/search/names/{pattern}": { - "get": { + }, + "delete": { "tags": [ - "User" + "Connection" ], - "operationId": "search_users_names", - "summary": "Search User Names", - "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", + "operationId": "delete_ssh_tunnel", + "summary": "Delete SSH Tunnel", + "description": "### Delete an SSH Tunnel\n", "parameters": [ { - "name": "pattern", + "name": "ssh_tunnel_id", "in": "path", - "description": "Pattern to match", + "description": "Id of SSH Tunnel", "required": true, "type": "string" + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "schema": { + "type": "string" + } }, - { - "name": "fields", - "in": "query", - "description": "Include only these fields in the response", - "required": false, - "type": "string" - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "type": "integer", - "format": "int64", - "x-looker-deprecated": true - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "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, - "type": "integer", - "format": "int64" - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "query", - "description": "Match User Id", - "required": false, - "type": "string" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } }, - { - "name": "first_name", - "in": "query", - "description": "Match First name", - "required": false, - "type": "string" + "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 + } + }, + "/ssh_tunnel/{ssh_tunnel_id}/test": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "test_ssh_tunnel", + "summary": "Test SSH Tunnel", + "description": "### Test the SSH Tunnel\n", + "parameters": [ { - "name": "last_name", - "in": "query", - "description": "Match Last name", - "required": false, + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, "type": "string" + } + ], + "responses": { + "200": { + "description": "Test SSH Tunnel", + "schema": { + "$ref": "#/definitions/SshTunnel" + } }, - { - "name": "verified_looker_employee", - "in": "query", - "description": "Match Verified Looker employee", - "required": false, - "type": "boolean" + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } }, - { - "name": "email", - "in": "query", - "description": "Match Email Address", - "required": false, - "type": "string" + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } }, - { - "name": "is_disabled", - "in": "query", - "description": "Include or exclude disabled accounts in the results", - "required": false, - "type": "boolean" + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/ssh_public_key": { + "get": { + "tags": [ + "Connection" ], + "operationId": "ssh_public_key", + "summary": "Get SSH Public Key", + "description": "### Get the SSH public key\n\nGet the public key created for this instance to identify itself to a remote SSH server.\n", "responses": { "200": { - "description": "Matching users.", + "description": "SSH Public Key", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/User" - } + "$ref": "#/definitions/SshPublicKey" } }, "400": { @@ -28327,35 +28653,38 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}": { + "/user_attributes": { "get": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "user", - "summary": "Get User by Id", - "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", + "operationId": "all_user_attributes", + "summary": "Get All User Attributes", + "description": "### Get information about all user attributes.\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" }, { - "name": "fields", + "name": "sorts", "in": "query", - "description": "Requested fields.", + "description": "Fields to order the results by. Sortable fields include: name, label", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Specified user.", + "description": "User Attribute", "schema": { - "$ref": "#/definitions/User" + "type": "array", + "items": { + "$ref": "#/definitions/UserAttribute" + } } }, "400": { @@ -28381,28 +28710,21 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "update_user", - "summary": "Update User", - "description": "### Update information about the user with a specific id.\n", + "operationId": "create_user_attribute", + "summary": "Create User Attribute", + "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "type": "string" - }, { "name": "body", "in": "body", - "description": "User", + "description": "User Attribute", "required": true, "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/UserAttribute" } }, { @@ -28415,9 +28737,9 @@ ], "responses": { "200": { - "description": "New state for specified user.", + "description": "User Attribute", "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/UserAttribute" } }, "400": { @@ -28426,14 +28748,14 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } @@ -28454,28 +28776,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/user_attributes/{user_attribute_id}": { + "get": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "delete_user", - "summary": "Delete User", - "description": "### Delete the user with a specific id.\n\n**This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them.\n\nDeletion will have the following impact:\n* Their reports, Looks and dashboards will be moved to Trash.\n* Any public URLs owned by them will no longer work.\n* Schedules created by the users or that use their content will be deleted.\n* Alerts will continue to run, but will not be visible or editable from the dashboard.\n\nThe user cannot delete themselves.\nThe last administrator user cannot be deleted.\n\nDeleting Service Accounts via this endpoint is deprecated and can be blocked in future versions.\nPlease use the dedicated `delete_service_account` endpoint.\n", + "operationId": "user_attribute", + "summary": "Get User Attribute", + "description": "### Get information about a user attribute.\n", "parameters": [ { - "name": "user_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of user", + "description": "Id of user attribute", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { - "204": { - "description": "User successfully deleted.", + "200": { + "description": "User Attribute", "schema": { - "type": "string" + "$ref": "#/definitions/UserAttribute" } }, "400": { @@ -28484,12 +28815,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -28506,30 +28831,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/credential/{credential_type}/{credential_id}": { - "get": { + }, + "patch": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "user_for_credential", - "summary": "Get User by Credential Id", - "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "update_user_attribute", + "summary": "Update User Attribute", + "description": "### Update a user attribute definition.\n", "parameters": [ { - "name": "credential_type", + "name": "user_attribute_id", "in": "path", - "description": "Type name of credential", + "description": "Id of user attribute", "required": true, "type": "string" }, { - "name": "credential_id", - "in": "path", - "description": "Id of credential", + "name": "body", + "in": "body", + "description": "User Attribute", "required": true, - "type": "string" + "schema": { + "$ref": "#/definitions/UserAttribute" + } }, { "name": "fields", @@ -28541,9 +28866,9 @@ ], "responses": { "200": { - "description": "Specified user.", + "description": "User Attribute", "schema": { - "$ref": "#/definitions/User" + "$ref": "#/definitions/UserAttribute" } }, "400": { @@ -28552,16 +28877,16 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/ValidationError" } }, "429": { @@ -28574,28 +28899,26 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/service_accounts/{user_id}": { + }, "delete": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "delete_service_account", - "summary": "Delete Service Account", - "description": "### Delete the service account with a specific id.\n\n**This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them.\n\nDeletion will have the following impact:\n* Their reports, Looks and dashboards will be moved to Trash.\n* Any public URLs owned by them will no longer work.\n* Schedules created by the service account or that use their content will be deleted.\n* Alerts will continue to run, but will not be visible or editable from the dashboard.\n\nThe service account cannot delete itself.\n", + "operationId": "delete_user_attribute", + "summary": "Delete User Attribute", + "description": "### Delete a user attribute (admin only).\n", "parameters": [ { - "name": "user_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of service account user", + "description": "Id of user attribute", "required": true, "type": "string" } ], "responses": { "204": { - "description": "Service Account successfully deleted.", + "description": "Successfully deleted.", "schema": { "type": "string" } @@ -28606,12 +28929,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -28625,34 +28942,27 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/user_attributes/{user_attribute_id}/group_values": { + "get": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "update_service_account", - "summary": "Update Service Account", - "description": "### Update information for a specific service account. This action is restricted to Looker admins.\n\nThis endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead.\n", + "operationId": "all_user_attribute_group_values", + "summary": "Get User Attribute Group Values", + "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", "parameters": [ { - "name": "user_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of service account", + "description": "Id of user attribute", "required": true, "type": "string" }, - { - "name": "body", - "in": "body", - "description": "Service Account", - "required": true, - "schema": { - "$ref": "#/definitions/ServiceAccount" - } - }, { "name": "fields", "in": "query", @@ -28663,9 +28973,12 @@ ], "responses": { "200": { - "description": "New state for specified service account.", + "description": "All group values for attribute.", "schema": { - "$ref": "#/definitions/ServiceAccount" + "type": "array", + "items": { + "$ref": "#/definitions/UserAttributeGroupValue" + } } }, "400": { @@ -28674,24 +28987,12 @@ "$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": { @@ -28699,40 +29000,46 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_email": { - "get": { + }, + "post": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "user_credentials_email", - "summary": "Get Email/Password Credential", - "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "set_user_attribute_group_values", + "summary": "Set User Attribute Group Values", + "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", "parameters": [ { - "name": "user_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of user", + "description": "Id of user attribute", "required": true, "type": "string" }, { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" + "name": "body", + "in": "body", + "description": "Array of group values.", + "required": true, + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/UserAttributeGroupValue" + } + } } ], "responses": { "200": { - "description": "Email/Password Credential", + "description": "Array of group values.", "schema": { - "$ref": "#/definitions/CredentialsEmail" + "type": "array", + "items": { + "$ref": "#/definitions/UserAttributeGroupValue" + } } }, "400": { @@ -28741,18 +29048,24 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -28763,31 +29076,17 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/user_db_connections": { + "get": { "tags": [ - "User" + "Connection" ], - "operationId": "create_user_credentials_email", - "summary": "Create Email/Password Credential", - "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "all_user_db_connections", + "summary": "Get All User DB Connections", + "description": "### Get All User DB Connections\n\nReturns a list of user DB connections.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "Email/Password Credential", - "required": true, - "schema": { - "$ref": "#/definitions/CredentialsEmail" - } - }, { "name": "fields", "in": "query", @@ -28798,9 +29097,12 @@ ], "responses": { "200": { - "description": "Email/Password Credential", + "description": "User DB Connections", "schema": { - "$ref": "#/definitions/CredentialsEmail" + "type": "array", + "items": { + "$ref": "#/definitions/UserDbConnection" + } } }, "400": { @@ -28809,30 +29111,12 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "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": { @@ -28840,47 +29124,42 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, + } + }, + "/user_db_connections/{user_db_connection_id}": { "patch": { "tags": [ - "User" + "Connection" ], - "operationId": "update_user_credentials_email", - "summary": "Update Email/Password Credential", - "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "update_user_db_connection", + "summary": "Update User DB Connection", + "description": "### Update User DB Connection\n\nUpdates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper).\n", "parameters": [ { - "name": "user_id", + "name": "user_db_connection_id", "in": "path", - "description": "Id of user", + "description": "Id of user DB connection", "required": true, "type": "string" }, { "name": "body", "in": "body", - "description": "Email/Password Credential", + "description": "User DB Connection", "required": true, "schema": { - "$ref": "#/definitions/CredentialsEmail" + "$ref": "#/definitions/UserDbConnection" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { "200": { - "description": "Email/Password Credential", + "description": "User DB Connection", "schema": { - "$ref": "#/definitions/CredentialsEmail" + "$ref": "#/definitions/UserDbConnection" } }, "400": { @@ -28914,38 +29193,29 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true }, "delete": { "tags": [ - "User" + "Connection" ], - "operationId": "delete_user_credentials_email", - "summary": "Delete Email/Password Credential", - "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "delete_user_db_connection", + "summary": "Delete User DB Connection", + "description": "### Delete User DB Connection\n\nDeletes an existing user DB connection.\n", "parameters": [ { - "name": "user_id", + "name": "user_db_connection_id", "in": "path", - "description": "Id of user", + "description": "Id of user DB connection", "required": true, "type": "string" } ], "responses": { "204": { - "description": "Successfully deleted.", - "schema": { - "type": "string" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } + "description": "Successfully deleted." }, "403": { "description": "Permission Denied", @@ -28966,40 +29236,36 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_totp": { + "/user_login_lockouts": { "get": { "tags": [ - "User" + "Auth" ], - "operationId": "user_credentials_totp", - "summary": "Get Two-Factor Credential", - "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "all_user_login_lockouts", + "summary": "Get All User Login Lockouts", + "description": "### Get currently locked-out users.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "type": "string" - }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Include only these fields in the response", "required": false, "type": "string" } ], "responses": { "200": { - "description": "Two-Factor Credential", + "description": "User Login Lockout", "schema": { - "$ref": "#/definitions/CredentialsTotp" + "type": "array", + "items": { + "$ref": "#/definitions/UserLoginLockout" + } } }, "400": { @@ -29008,12 +29274,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -29030,44 +29290,109 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/user_login_lockouts/search": { + "get": { "tags": [ - "User" + "Auth" ], - "operationId": "create_user_credentials_totp", - "summary": "Create Two-Factor Credential", - "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "search_user_login_lockouts", + "summary": "Search User Login Lockouts", + "description": "### Search currently locked-out users.\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, "type": "string" }, { - "name": "body", - "in": "body", - "description": "Two-Factor Credential", + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", "required": false, - "schema": { - "$ref": "#/definitions/CredentialsTotp" - } + "type": "integer", + "format": "int64", + "x-looker-deprecated": true }, { - "name": "fields", + "name": "per_page", "in": "query", - "description": "Requested fields.", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "auth_type", + "in": "query", + "description": "Auth type user is locked out for (email, ldap, totp, api)", + "required": false, + "type": "string" + }, + { + "name": "full_name", + "in": "query", + "description": "Match name", + "required": false, + "type": "string" + }, + { + "name": "email", + "in": "query", + "description": "Match email", + "required": false, + "type": "string" + }, + { + "name": "remote_id", + "in": "query", + "description": "Match remote LDAP ID", "required": false, "type": "string" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Two-Factor Credential", + "description": "User Login Lockout", "schema": { - "$ref": "#/definitions/CredentialsTotp" + "type": "array", + "items": { + "$ref": "#/definitions/UserLoginLockout" + } } }, "400": { @@ -29076,30 +29401,12 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "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": { @@ -29110,19 +29417,21 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/user_login_lockout/{key}": { "delete": { "tags": [ - "User" + "Auth" ], - "operationId": "delete_user_credentials_totp", - "summary": "Delete Two-Factor Credential", - "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "delete_user_login_lockout", + "summary": "Delete User Login Lockout", + "description": "### Removes login lockout for the associated user.\n", "parameters": [ { - "name": "user_id", + "name": "key", "in": "path", - "description": "Id of user", + "description": "The key associated with the locked user", "required": true, "type": "string" } @@ -29140,12 +29449,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -29164,22 +29467,15 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_ldap": { + "/user": { "get": { "tags": [ "User" ], - "operationId": "user_credentials_ldap", - "summary": "Get LDAP Credential", - "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "me", + "summary": "Get Current User", + "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "type": "string" - }, { "name": "fields", "in": "query", @@ -29190,21 +29486,9 @@ ], "responses": { "200": { - "description": "LDAP Credential", - "schema": { - "$ref": "#/definitions/CredentialsLDAP" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Error" - } - }, - "403": { - "description": "Permission Denied", + "description": "Current user.", "schema": { - "$ref": "#/definitions/Error" + "$ref": "#/definitions/User" } }, "404": { @@ -29223,28 +29507,85 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/users": { + "get": { "tags": [ "User" ], - "operationId": "delete_user_credentials_ldap", - "summary": "Delete LDAP Credential", - "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "all_users", + "summary": "Get All Users", + "description": "### Get information about all users.\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, "type": "string" + }, + { + "name": "ids", + "in": "query", + "description": "Optional list of ids to get specific users.", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "All users.", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/User" + } } }, "400": { @@ -29253,12 +29594,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -29275,23 +29610,23 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_google": { - "get": { + }, + "post": { "tags": [ "User" ], - "operationId": "user_credentials_google", - "summary": "Get Google Auth Credential", - "description": "### Google authentication login information for the specified user.", + "operationId": "create_user", + "summary": "Create User", + "description": "### Create a user with the specified information.\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "type": "string" + "name": "body", + "in": "body", + "description": "User", + "required": false, + "schema": { + "$ref": "#/definitions/User" + } }, { "name": "fields", @@ -29303,9 +29638,9 @@ ], "responses": { "200": { - "description": "Google Auth Credential", + "description": "Created User", "schema": { - "$ref": "#/definitions/CredentialsGoogle" + "$ref": "#/definitions/User" } }, "400": { @@ -29314,18 +29649,24 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "schema": { "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -29336,28 +29677,165 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/users/search": { + "get": { "tags": [ "User" ], - "operationId": "delete_user_credentials_google", - "summary": "Delete Google Auth Credential", - "description": "### Google authentication login information for the specified user.", + "operationId": "search_users", + "summary": "Search Users", + "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "type": "string" + }, + { + "name": "id", + "in": "query", + "description": "Match User Id.", + "required": false, + "type": "string" + }, + { + "name": "first_name", + "in": "query", + "description": "Match First name.", + "required": false, + "type": "string" + }, + { + "name": "last_name", + "in": "query", + "description": "Match Last name.", + "required": false, + "type": "string" + }, + { + "name": "full_name", + "in": "query", + "description": "Match Full name (First Last).", + "required": false, + "type": "string" + }, + { + "name": "verified_looker_employee", + "in": "query", + "description": "Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details.", + "required": false, + "type": "boolean" + }, + { + "name": "embed_user", + "in": "query", + "description": "Search for only embed users", + "required": false, + "type": "boolean" + }, + { + "name": "email", + "in": "query", + "description": "Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details.", + "required": false, + "type": "string" + }, + { + "name": "is_disabled", + "in": "query", + "description": "Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details.", + "required": false, + "type": "boolean" + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "type": "boolean" + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Search for users who have access to this content_metadata item", + "required": false, + "type": "string" + }, + { + "name": "group_id", + "in": "query", + "description": "Search for users who are direct members of this group", + "required": false, "type": "string" + }, + { + "name": "can_manage_api3_creds", + "in": "query", + "description": "Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance.", + "required": false, + "type": "boolean" + }, + { + "name": "is_service_account", + "in": "query", + "description": "Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details.", + "required": false, + "type": "boolean" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Matching users.", "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/definitions/User" + } } }, "400": { @@ -29366,12 +29844,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -29390,35 +29862,121 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_saml": { + "/users/search/names/{pattern}": { "get": { "tags": [ "User" ], - "operationId": "user_credentials_saml", - "summary": "Get Saml Auth Credential", - "description": "### Saml authentication login information for the specified user.", + "operationId": "search_users_names", + "summary": "Search User Names", + "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", "parameters": [ { - "name": "user_id", + "name": "pattern", "in": "path", - "description": "Id of user", + "description": "Pattern to match", "required": true, "type": "string" }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Include only these fields in the response", + "required": false, + "type": "string" + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "type": "integer", + "format": "int64", + "x-looker-deprecated": true + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "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, + "type": "integer", + "format": "int64" + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by", "required": false, "type": "string" + }, + { + "name": "id", + "in": "query", + "description": "Match User Id", + "required": false, + "type": "string" + }, + { + "name": "first_name", + "in": "query", + "description": "Match First name", + "required": false, + "type": "string" + }, + { + "name": "last_name", + "in": "query", + "description": "Match Last name", + "required": false, + "type": "string" + }, + { + "name": "verified_looker_employee", + "in": "query", + "description": "Match Verified Looker employee", + "required": false, + "type": "boolean" + }, + { + "name": "email", + "in": "query", + "description": "Match Email Address", + "required": false, + "type": "string" + }, + { + "name": "is_disabled", + "in": "query", + "description": "Include or exclude disabled accounts in the results", + "required": false, + "type": "boolean" } ], "responses": { "200": { - "description": "Saml Auth Credential", + "description": "Matching users.", "schema": { - "$ref": "#/definitions/CredentialsSaml" + "type": "array", + "items": { + "$ref": "#/definitions/User" + } } }, "400": { @@ -29427,12 +29985,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -29449,14 +30001,16 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/users/{user_id}": { + "get": { "tags": [ "User" ], - "operationId": "delete_user_credentials_saml", - "summary": "Delete Saml Auth Credential", - "description": "### Saml authentication login information for the specified user.", + "operationId": "user", + "summary": "Get User by Id", + "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", "parameters": [ { "name": "user_id", @@ -29464,13 +30018,20 @@ "description": "Id of user", "required": true, "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Specified user.", "schema": { - "type": "string" + "$ref": "#/definitions/User" } }, "400": { @@ -29479,12 +30040,6 @@ "$ref": "#/definitions/Error" } }, - "403": { - "description": "Permission Denied", - "schema": { - "$ref": "#/definitions/Error" - } - }, "404": { "description": "Not Found", "schema": { @@ -29501,16 +30056,14 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_oidc": { - "get": { + }, + "patch": { "tags": [ "User" ], - "operationId": "user_credentials_oidc", - "summary": "Get OIDC Auth Credential", - "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", + "operationId": "update_user", + "summary": "Update User", + "description": "### Update information about the user with a specific id.\n", "parameters": [ { "name": "user_id", @@ -29519,6 +30072,15 @@ "required": true, "type": "string" }, + { + "name": "body", + "in": "body", + "description": "User", + "required": true, + "schema": { + "$ref": "#/definitions/User" + } + }, { "name": "fields", "in": "query", @@ -29529,9 +30091,9 @@ ], "responses": { "200": { - "description": "OIDC Auth Credential", + "description": "New state for specified user.", "schema": { - "$ref": "#/definitions/CredentialsOIDC" + "$ref": "#/definitions/User" } }, "400": { @@ -29552,6 +30114,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -29567,9 +30135,9 @@ "tags": [ "User" ], - "operationId": "delete_user_credentials_oidc", - "summary": "Delete OIDC Auth Credential", - "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", + "operationId": "delete_user", + "summary": "Delete User", + "description": "### Delete the user with a specific id.\n\n**This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them.\n\nDeletion will have the following impact:\n* Their reports, Looks and dashboards will be moved to Trash.\n* Any public URLs owned by them will no longer work.\n* Schedules created by the users or that use their content will be deleted.\n* Alerts owned by the users will be deleted.\n\nThe user cannot delete themselves.\nThe last administrator user cannot be deleted.\n\nDeleting Service Accounts via this endpoint is deprecated and can be blocked in future versions.\nPlease use the dedicated `delete_service_account` endpoint.\n", "parameters": [ { "name": "user_id", @@ -29581,7 +30149,7 @@ ], "responses": { "204": { - "description": "Successfully deleted.", + "description": "User successfully deleted.", "schema": { "type": "string" } @@ -29616,26 +30184,26 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_api3/{credentials_api3_id}": { + "/users/credential/{credential_type}/{credential_id}": { "get": { "tags": [ "User" ], - "operationId": "user_credentials_api3", - "summary": "Get API Credential", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "user_for_credential", + "summary": "Get User by Credential Id", + "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "user_id", + "name": "credential_type", "in": "path", - "description": "Id of user", + "description": "Type name of credential", "required": true, "type": "string" }, { - "name": "credentials_api3_id", + "name": "credential_id", "in": "path", - "description": "Id of API Credential", + "description": "Id of credential", "required": true, "type": "string" }, @@ -29649,9 +30217,9 @@ ], "responses": { "200": { - "description": "API Credential", + "description": "Specified user.", "schema": { - "$ref": "#/definitions/CredentialsApi3" + "$ref": "#/definitions/User" } }, "400": { @@ -29682,51 +30250,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/users/service_accounts/{user_id}": { + "delete": { "tags": [ "User" ], - "operationId": "update_user_credentials_api3", - "summary": "Update API Credential", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "delete_service_account", + "summary": "Delete Service Account", + "description": "### Delete the service account with a specific id.\n\n**This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them.\n\nDeletion will have the following impact:\n* Their reports, Looks and dashboards will be moved to Trash.\n* Any public URLs owned by them will no longer work.\n* Schedules created by the service account or that use their content will be deleted.\n* Alerts owned by the service account will be deleted.\n\nThe service account cannot delete itself.\n", "parameters": [ { "name": "user_id", "in": "path", - "description": "Id of user", - "required": true, - "type": "string" - }, - { - "name": "credentials_api3_id", - "in": "path", - "description": "Id of API Credential", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "description": "API Credential", + "description": "Id of service account user", "required": true, - "schema": { - "$ref": "#/definitions/CredentialsApi3" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, "type": "string" } ], "responses": { - "200": { - "description": "API Credential", + "204": { + "description": "Service Account successfully deleted.", "schema": { - "$ref": "#/definitions/CredentialsApi3" + "type": "string" } }, "400": { @@ -29747,12 +30294,6 @@ "$ref": "#/definitions/Error" } }, - "422": { - "description": "Validation Error", - "schema": { - "$ref": "#/definitions/ValidationError" - } - }, "429": { "description": "Too Many Requests", "schema": { @@ -29760,38 +30301,47 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "alpha", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "delete": { + "patch": { "tags": [ "User" ], - "operationId": "delete_user_credentials_api3", - "summary": "Delete API Credential", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "update_service_account", + "summary": "Update Service Account", + "description": "### Update information for a specific service account. This action is restricted to Looker admins.\n\nThis endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead.\n", "parameters": [ { "name": "user_id", "in": "path", - "description": "Id of user", + "description": "Id of service account", "required": true, "type": "string" }, { - "name": "credentials_api3_id", - "in": "path", - "description": "Id of API Credential", + "name": "body", + "in": "body", + "description": "Service Account", "required": true, + "schema": { + "$ref": "#/definitions/ServiceAccount" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "type": "string" } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "New state for specified service account.", "schema": { - "type": "string" + "$ref": "#/definitions/ServiceAccount" } }, "400": { @@ -29812,6 +30362,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -29819,19 +30375,19 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "alpha", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_api3": { + "/users/{user_id}/credentials_ldap": { "get": { "tags": [ "User" ], - "operationId": "all_user_credentials_api3s", - "summary": "Get All API Credentials", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "user_credentials_ldap", + "summary": "Get LDAP Credential", + "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -29850,12 +30406,9 @@ ], "responses": { "200": { - "description": "API Credential", + "description": "LDAP Credential", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialsApi3" - } + "$ref": "#/definitions/CredentialsLDAP" } }, "400": { @@ -29887,13 +30440,13 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "delete": { "tags": [ "User" ], - "operationId": "create_user_credentials_api3", - "summary": "Create API Credential", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "delete_user_credentials_ldap", + "summary": "Delete LDAP Credential", + "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -29901,20 +30454,13 @@ "description": "Id of user", "required": true, "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" } ], "responses": { - "200": { - "description": "API Credential", + "204": { + "description": "Successfully deleted.", "schema": { - "$ref": "#/definitions/CreateCredentialsApi3" + "type": "string" } }, "400": { @@ -29935,18 +30481,6 @@ "$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": { @@ -29959,14 +30493,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_embed/{credentials_embed_id}": { + "/users/{user_id}/credentials_oidc": { "get": { "tags": [ "User" ], - "operationId": "user_credentials_embed", - "summary": "Get Embedding Credential", - "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", + "operationId": "user_credentials_oidc", + "summary": "Get OIDC Auth Credential", + "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", "parameters": [ { "name": "user_id", @@ -29975,13 +30509,6 @@ "required": true, "type": "string" }, - { - "name": "credentials_embed_id", - "in": "path", - "description": "Id of Embedding Credential", - "required": true, - "type": "string" - }, { "name": "fields", "in": "query", @@ -29992,9 +30519,9 @@ ], "responses": { "200": { - "description": "Embedding Credential", + "description": "OIDC Auth Credential", "schema": { - "$ref": "#/definitions/CredentialsEmbed" + "$ref": "#/definitions/CredentialsOIDC" } }, "400": { @@ -30030,9 +30557,9 @@ "tags": [ "User" ], - "operationId": "delete_user_credentials_embed", - "summary": "Delete Embedding Credential", - "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", + "operationId": "delete_user_credentials_oidc", + "summary": "Delete OIDC Auth Credential", + "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", "parameters": [ { "name": "user_id", @@ -30040,13 +30567,6 @@ "description": "Id of user", "required": true, "type": "string" - }, - { - "name": "credentials_embed_id", - "in": "path", - "description": "Id of Embedding Credential", - "required": true, - "type": "string" } ], "responses": { @@ -30086,14 +30606,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_embed": { + "/users/{user_id}/credentials_api3/{credentials_api3_id}": { "get": { "tags": [ "User" ], - "operationId": "all_user_credentials_embeds", - "summary": "Get All Embedding Credentials", - "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", + "operationId": "user_credentials_api3", + "summary": "Get API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -30102,6 +30622,13 @@ "required": true, "type": "string" }, + { + "name": "credentials_api3_id", + "in": "path", + "description": "Id of API Credential", + "required": true, + "type": "string" + }, { "name": "fields", "in": "query", @@ -30112,12 +30639,9 @@ ], "responses": { "200": { - "description": "Embedding Credential", + "description": "API Credential", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/CredentialsEmbed" - } + "$ref": "#/definitions/CredentialsApi3" } }, "400": { @@ -30148,16 +30672,14 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_looker_openid": { - "get": { + }, + "patch": { "tags": [ "User" ], - "operationId": "user_credentials_looker_openid", - "summary": "Get Looker OpenId Credential", - "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "update_user_credentials_api3", + "summary": "Update API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -30166,6 +30688,22 @@ "required": true, "type": "string" }, + { + "name": "credentials_api3_id", + "in": "path", + "description": "Id of API Credential", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "description": "API Credential", + "required": true, + "schema": { + "$ref": "#/definitions/CredentialsApi3" + } + }, { "name": "fields", "in": "query", @@ -30176,9 +30714,9 @@ ], "responses": { "200": { - "description": "Looker OpenId Credential", + "description": "API Credential", "schema": { - "$ref": "#/definitions/CredentialsLookerOpenid" + "$ref": "#/definitions/CredentialsApi3" } }, "400": { @@ -30199,6 +30737,12 @@ "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -30214,9 +30758,9 @@ "tags": [ "User" ], - "operationId": "delete_user_credentials_looker_openid", - "summary": "Delete Looker OpenId Credential", - "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "delete_user_credentials_api3", + "summary": "Delete API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -30224,6 +30768,13 @@ "description": "Id of user", "required": true, "type": "string" + }, + { + "name": "credentials_api3_id", + "in": "path", + "description": "Id of API Credential", + "required": true, + "type": "string" } ], "responses": { @@ -30263,14 +30814,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/sessions/{session_id}": { + "/users/{user_id}/credentials_api3": { "get": { "tags": [ "User" ], - "operationId": "user_session", - "summary": "Get Web Login Session", - "description": "### Web login session for the specified user.", + "operationId": "all_user_credentials_api3s", + "summary": "Get All API Credentials", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -30280,9 +30831,64 @@ "type": "string" }, { - "name": "session_id", + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "API Credential", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/CredentialsApi3" + } + } + }, + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "post": { + "tags": [ + "User" + ], + "operationId": "create_user_credentials_api3", + "summary": "Create API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "parameters": [ + { + "name": "user_id", "in": "path", - "description": "Id of Web Login Session", + "description": "Id of user", "required": true, "type": "string" }, @@ -30296,9 +30902,89 @@ ], "responses": { "200": { - "description": "Web Login Session", + "description": "API Credential", "schema": { - "$ref": "#/definitions/Session" + "$ref": "#/definitions/CreateCredentialsApi3" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "403": { + "description": "Permission Denied", + "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 + } + }, + "/users/{user_id}/credentials_embed/{credentials_embed_id}": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_credentials_embed", + "summary": "Get Embedding Credential", + "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "type": "string" + }, + { + "name": "credentials_embed_id", + "in": "path", + "description": "Id of Embedding Credential", + "required": true, + "type": "string" + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Embedding Credential", + "schema": { + "$ref": "#/definitions/CredentialsEmbed" } }, "400": { @@ -30334,9 +31020,9 @@ "tags": [ "User" ], - "operationId": "delete_user_session", - "summary": "Delete Web Login Session", - "description": "### Web login session for the specified user.", + "operationId": "delete_user_credentials_embed", + "summary": "Delete Embedding Credential", + "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", "parameters": [ { "name": "user_id", @@ -30346,9 +31032,9 @@ "type": "string" }, { - "name": "session_id", + "name": "credentials_embed_id", "in": "path", - "description": "Id of Web Login Session", + "description": "Id of Embedding Credential", "required": true, "type": "string" } @@ -30390,14 +31076,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/sessions": { + "/users/{user_id}/credentials_embed": { "get": { "tags": [ "User" ], - "operationId": "all_user_sessions", - "summary": "Get All Web Login Sessions", - "description": "### Web login session for the specified user.", + "operationId": "all_user_credentials_embeds", + "summary": "Get All Embedding Credentials", + "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", "parameters": [ { "name": "user_id", @@ -30416,11 +31102,11 @@ ], "responses": { "200": { - "description": "Web Login Session", + "description": "Embedding Credential", "schema": { "type": "array", "items": { - "$ref": "#/definitions/Session" + "$ref": "#/definitions/CredentialsEmbed" } } }, @@ -30454,14 +31140,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_email/password_reset": { - "post": { + "/users/{user_id}/sessions/{session_id}": { + "get": { "tags": [ "User" ], - "operationId": "create_user_credentials_email_password_reset", - "summary": "Create Password Reset Token", - "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "user_session", + "summary": "Get Web Login Session", + "description": "### Web login session for the specified user.", "parameters": [ { "name": "user_id", @@ -30471,11 +31157,131 @@ "type": "string" }, { - "name": "expires", + "name": "session_id", + "in": "path", + "description": "Id of Web Login Session", + "required": true, + "type": "string" + }, + { + "name": "fields", "in": "query", - "description": "Expiring token.", + "description": "Requested fields.", "required": false, - "type": "boolean" + "type": "string" + } + ], + "responses": { + "200": { + "description": "Web Login Session", + "schema": { + "$ref": "#/definitions/Session" + } + }, + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_session", + "summary": "Delete Web Login Session", + "description": "### Web login session for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "type": "string" + }, + { + "name": "session_id", + "in": "path", + "description": "Id of Web Login Session", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "schema": { + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/users/{user_id}/sessions": { + "get": { + "tags": [ + "User" + ], + "operationId": "all_user_sessions", + "summary": "Get All Web Login Sessions", + "description": "### Web login session for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "type": "string" }, { "name": "fields", @@ -30487,9 +31293,12 @@ ], "responses": { "200": { - "description": "email/password credential", + "description": "Web Login Session", "schema": { - "$ref": "#/definitions/CredentialsEmail" + "type": "array", + "items": { + "$ref": "#/definitions/Session" + } } }, "400": { @@ -30876,67 +31685,6 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_email/send_password_reset": { - "post": { - "tags": [ - "User" - ], - "operationId": "send_user_credentials_email_password_reset", - "summary": "Send Password Reset Token", - "description": "### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", - "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "type": "string" - } - ], - "responses": { - "200": { - "description": "email/password credential", - "schema": { - "$ref": "#/definitions/CredentialsEmail" - } - }, - "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": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, "/users/{user_id}/update_emails": { "post": { "tags": [ @@ -31998,6 +32746,23 @@ }, "x-looker-status": "stable" }, + "AgentLookml": { + "properties": { + "agent_id": { + "type": "string", + "readOnly": true, + "description": "Id of Agent", + "x-looker-nullable": true + }, + "lookml": { + "type": "string", + "readOnly": true, + "description": "lookml of UDD Agent", + "x-looker-nullable": true + } + }, + "x-looker-status": "beta" + }, "Agent": { "properties": { "can": { @@ -32137,6 +32902,25 @@ "$ref": "#/definitions/WorkflowParams", "description": "Workflow parameters", "x-looker-nullable": true + }, + "is_lookml": { + "type": "boolean", + "readOnly": true, + "description": "Whether the agent is defined in LookML", + "x-looker-nullable": false + }, + "lookml_agent_id": { + "type": "string", + "readOnly": true, + "description": "LookML Agent ID", + "x-looker-nullable": true + }, + "lookml_edit_uri": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "URI to edit the LookML definition of this agent", + "x-looker-nullable": true } }, "x-looker-status": "beta" @@ -32162,6 +32946,16 @@ "type": "string", "description": "Agent instructions", "x-looker-nullable": false + }, + "show_analytical_details": { + "type": "boolean", + "description": "Show analytical details in preview", + "x-looker-nullable": true + }, + "show_debug": { + "type": "boolean", + "description": "Show debug info in preview", + "x-looker-nullable": true } }, "x-looker-status": "beta" @@ -33412,6 +34206,21 @@ "description": "Git target URL of the CI run", "x-looker-nullable": true }, + "dbt_cloud_git_branch_name": { + "type": "string", + "description": "Git branch name in dbt Cloud", + "x-looker-nullable": true + }, + "dbt_cloud_git_commit_ref": { + "type": "string", + "description": "Git commit ref in dbt Cloud", + "x-looker-nullable": true + }, + "dbt_cloud_git_repository_name": { + "type": "string", + "description": "Git repository name in dbt Cloud", + "x-looker-nullable": true + }, "created_at": { "type": "string", "format": "date-time", @@ -33475,9 +34284,19 @@ "readOnly": true, "description": "User attributes for the CI run", "x-looker-nullable": true + }, + "project_imports": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "readOnly": true, + "description": "Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run", + "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIGenericError": { "properties": { @@ -33507,7 +34326,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIRunResult": { "properties": { @@ -33551,13 +34370,23 @@ "description": "Errors that occurred when attempting LookML validation", "x-looker-nullable": true }, + "style_result": { + "$ref": "#/definitions/CIStyleValidatorResult", + "description": "Results of the style validation", + "x-looker-nullable": true + }, + "style_error": { + "$ref": "#/definitions/CIGenericError", + "description": "Errors that occurred when attempting style validation", + "x-looker-nullable": true + }, "generic_error": { "$ref": "#/definitions/CIGenericError", "description": "Errors that occurred when attempting validation", "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorResult": { "properties": { @@ -33580,7 +34409,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorTestedExplore": { "properties": { @@ -33632,7 +34461,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorTestSuccess": { "properties": { @@ -33662,7 +34491,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorErrorItem": { "properties": { @@ -33677,7 +34506,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorTestError": { "properties": { @@ -33712,7 +34541,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIContentValidatorResult": { "properties": { @@ -33740,7 +34569,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIContentValidatorTestedExplore": { "properties": { @@ -33779,7 +34608,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIContentValidatorErrorItem": { "properties": { @@ -33794,7 +34623,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIContentValidatorContentError": { "properties": { @@ -33869,7 +34698,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CILookMLValidatorResult": { "properties": { @@ -33898,7 +34727,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CILookMLValidatorErrorItem": { "properties": { @@ -33913,7 +34742,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CILookMLValidatorError": { "properties": { @@ -33983,7 +34812,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CISqlValidatorResult": { "properties": { @@ -34011,7 +34840,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CISqlValidatorTestedExplore": { "properties": { @@ -34050,7 +34879,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CISqlValidatorErrorItem": { "properties": { @@ -34065,7 +34894,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CISqlValidatorError": { "properties": { @@ -34130,7 +34959,177 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" + }, + "CIStyleValidatorResult": { + "properties": { + "name": { + "type": "string", + "description": "Name of the validator (style)", + "x-looker-nullable": false + }, + "incremental": { + "type": "boolean", + "description": "Whether the validation was incremental", + "x-looker-nullable": true + }, + "status": { + "type": "string", + "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", + "x-looker-nullable": false + }, + "error_count": { + "type": "integer", + "format": "int64", + "description": "Total number of failed style validations", + "x-looker-nullable": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/definitions/CIStyleValidatorErrorItem" + }, + "description": "Details of the LookML that failed style validation", + "x-looker-nullable": false + } + }, + "x-looker-status": "stable" + }, + "CIStyleValidatorErrorItem": { + "properties": { + "style_error": { + "$ref": "#/definitions/CIStyleValidatorError", + "description": "Details of the LookML that failed style validation", + "x-looker-nullable": true + }, + "generic_error": { + "$ref": "#/definitions/CIGenericError", + "description": "Error that occurred when attempting to run validation", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable" + }, + "CIStyleValidatorError": { + "properties": { + "type": { + "type": "string", + "description": "A URI reference that identifies the problem type", + "x-looker-nullable": false + }, + "title": { + "type": "string", + "description": "Overview of the error", + "x-looker-nullable": false + }, + "detail": { + "type": "string", + "description": "Detail of the error", + "x-looker-nullable": false + }, + "status": { + "type": "string", + "description": "The HTTP status code for the problem", + "x-looker-nullable": true + }, + "instance": { + "type": "string", + "description": "URI reference that identifies the specific occurrence of the problem", + "x-looker-nullable": true + }, + "model": { + "type": "string", + "description": "LookML model that contains the error", + "x-looker-nullable": true + }, + "explore": { + "type": "string", + "description": "LookML Explore that contains the error", + "x-looker-nullable": true + }, + "field_name": { + "type": "string", + "description": "LookML field that caused the error", + "x-looker-nullable": true + }, + "message": { + "type": "string", + "description": "Message returned by the style validator", + "x-looker-nullable": true + }, + "severity": { + "type": "string", + "description": "Severity of the error (warning, error, fatal, info, success)", + "x-looker-nullable": true + }, + "line_number": { + "type": "integer", + "format": "int64", + "description": "Line number of the error in the LookML file", + "x-looker-nullable": true + }, + "character": { + "type": "integer", + "format": "int64", + "description": "Character offset of the error in the LookML file", + "x-looker-nullable": true + }, + "lookml_url": { + "type": "string", + "description": "URL to the LookML that caused the error", + "x-looker-nullable": true + }, + "file_path": { + "type": "string", + "description": "IDE folder path to the LookML file that caused the error", + "x-looker-nullable": true + }, + "rule_name": { + "type": "string", + "description": "Name of the style rule", + "x-looker-nullable": true + }, + "entity_type": { + "type": "string", + "description": "Type of LookML entity evaluated", + "x-looker-nullable": true + }, + "entity_name": { + "type": "string", + "description": "Name of LookML entity evaluated", + "x-looker-nullable": true + }, + "is_incremental": { + "type": "boolean", + "description": "Whether the error was newly introduced", + "x-looker-nullable": true + }, + "error_id": { + "type": "string", + "description": "Deterministic fingerprint of the violation", + "x-looker-nullable": true + }, + "documentation_url": { + "type": "string", + "description": "URL to documentation for the style rule", + "x-looker-nullable": true + }, + "context": { + "type": "array", + "items": { + "type": "string" + }, + "description": "LookML source code snippet lines surrounding the error", + "x-looker-nullable": true + }, + "context_line_number": { + "type": "integer", + "format": "int64", + "description": "Line number where the context code snippet begins", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable" }, "CIRunUserAttribute": { "properties": { @@ -34151,7 +35150,7 @@ "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "UserAttributeOverride": { "properties": { @@ -34166,7 +35165,7 @@ "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CreateContinuousIntegrationRunRequest": { "properties": { @@ -34192,9 +35191,18 @@ }, "description": "User attributes to override for the CI run.", "x-looker-nullable": true + }, + "project_imports": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "Map of upstream project names to commit SHAs or git configurations to pin for the CI run.", + "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ColorStop": { "properties": { @@ -34590,6 +35598,12 @@ "readOnly": true, "description": "Name of the parent folder of the content", "x-looker-nullable": true + }, + "parent_project_name": { + "type": "string", + "readOnly": true, + "description": "Name of the parent project of the content", + "x-looker-nullable": true } }, "x-looker-status": "beta" @@ -35450,44 +36464,6 @@ }, "x-looker-status": "beta" }, - "CreateCIRunRequest": { - "properties": { - "suite_id": { - "type": "string", - "description": "ID of the CI suite", - "x-looker-nullable": false - }, - "branch": { - "type": "string", - "description": "Branch that the CI run should validate. Omit to test production.", - "x-looker-nullable": true - }, - "commit": { - "type": "string", - "format": "uri-reference", - "description": "Commit that the CI run should validate. Omit to test production.", - "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "CreateCIRunResponse": { - "properties": { - "run_id": { - "type": "string", - "readOnly": true, - "description": "ID of the CI run", - "x-looker-nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running)", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, "CreateEmbedUserRequest": { "properties": { "external_user_id": { @@ -36414,6 +37390,47 @@ "type": "boolean", "description": "Whether to modernize visualizations on this dashboard", "x-looker-nullable": true + }, + "show_dashboard_header": { + "type": "boolean", + "description": "Toggle to show dashboard header. Defaults to true.", + "x-looker-nullable": true + }, + "show_title": { + "type": "boolean", + "description": "Toggle to show dashboard title. Defaults to true.", + "x-looker-nullable": true + }, + "show_filters_bar": { + "type": "boolean", + "description": "Toggle to show filters bar. Defaults to true.", + "x-looker-nullable": true + }, + "show_filters_toggle": { + "type": "boolean", + "description": "Toggle to show filters toggle button. Defaults to true.", + "x-looker-nullable": true + }, + "show_reload_data_icon": { + "type": "boolean", + "description": "Toggle to show reload data icon/button. Defaults to true.", + "x-looker-nullable": true + }, + "show_dashboard_menu": { + "type": "boolean", + "description": "Toggle to show dashboard actions menu. Defaults to true.", + "x-looker-nullable": true + }, + "show_last_updated_indicator": { + "type": "boolean", + "description": "Toggle to show last updated indicator. Defaults to true.", + "x-looker-nullable": true + }, + "background_opacity": { + "type": "number", + "format": "float", + "description": "Background image opacity (0.0 to 1.0)", + "x-looker-nullable": true } }, "x-looker-status": "stable" @@ -36451,6 +37468,11 @@ "format": "int64", "description": "Columns limit", "x-looker-nullable": true + }, + "append_excel_metadata": { + "type": "boolean", + "description": "Append Excel metadata", + "x-looker-nullable": true } }, "x-looker-status": "stable" @@ -36487,6 +37509,12 @@ "description": "Id of Dashboard Layout", "x-looker-nullable": true }, + "group_id": { + "type": "string", + "readOnly": true, + "description": "ID of the group to place this element under in the layout", + "x-looker-nullable": true + }, "edit_uri": { "type": "string", "format": "uri-reference", @@ -36645,6 +37673,20 @@ "readOnly": true, "description": "Certification metadata", "x-looker-nullable": true + }, + "image_id": { + "type": "string", + "description": "ID of Dashboard Image", + "x-looker-nullable": true + }, + "images": { + "type": "array", + "items": { + "$ref": "#/definitions/Image" + }, + "readOnly": true, + "description": "Images", + "x-looker-nullable": true } }, "x-looker-status": "stable" @@ -36950,6 +37992,11 @@ "format": "int64", "description": "Height (granular layout)", "x-looker-nullable": true + }, + "group_id": { + "type": "string", + "description": "Id of parent Dashboard Layout Component group", + "x-looker-nullable": true } }, "x-looker-status": "stable" @@ -37381,6 +38428,11 @@ "description": "Relative URL of the dashboard", "x-looker-nullable": true }, + "layout_granularity": { + "type": "string", + "description": "The layout granularity to apply to this dashboard (ie: default or granular)", + "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.", @@ -37675,6 +38727,11 @@ "readOnly": true, "description": "True if PDTs are enabled on this connection", "x-looker-nullable": false + }, + "project_id": { + "type": "string", + "description": "ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified.", + "x-looker-nullable": true } }, "x-looker-status": "stable" @@ -37716,6 +38773,11 @@ "description": "True if PDTs are enabled on this connection", "x-looker-nullable": false }, + "project_id": { + "type": "string", + "description": "ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified.", + "x-looker-nullable": true + }, "named_driver_version_requested": { "type": "string", "description": "Requested JDBC driver version name", @@ -37754,6 +38816,11 @@ "description": "Whether or not the password is present", "x-looker-nullable": false }, + "service_account_auth_enabled": { + "type": "boolean", + "description": "Whether Service Account OAuth authentication is enabled for this connection", + "x-looker-nullable": false + }, "uses_oauth": { "type": "boolean", "readOnly": true, @@ -37783,6 +38850,11 @@ "description": "(Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect).", "x-looker-nullable": true }, + "user_attr_certificate": { + "type": "string", + "description": "The name of the user attribute containing the connection certificate.", + "x-looker-nullable": true + }, "file_type": { "type": "string", "x-looker-write-only": true, @@ -38394,6 +39466,12 @@ "description": "Disable this connection. This will prevent any queries from running on this connection.", "x-looker-nullable": false }, + "query_holding_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Disable query holding for this connection.", + "x-looker-nullable": false + }, "disable_context_comment": { "type": "boolean", "readOnly": true, @@ -38501,6 +39579,12 @@ "readOnly": true, "description": "Has support for connection pooling", "x-looker-nullable": false + }, + "user_attribute_certificate": { + "type": "boolean", + "readOnly": true, + "description": "Has user attribute certificate support", + "x-looker-nullable": false } }, "x-looker-status": "stable" @@ -38679,6 +39763,12 @@ "description": "Is embed content management enabled for this Looker", "x-looker-nullable": false }, + "embed_vis_modernization_default": { + "type": "boolean", + "readOnly": true, + "description": "Default net new visualizations in embedded context to Modern theme", + "x-looker-nullable": false + }, "strict_sameorigin_for_login": { "type": "boolean", "description": "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.", @@ -40414,148 +41504,6 @@ }, "x-looker-status": "stable" }, - "GitDiagnosticIssue": { - "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": "string", - "readOnly": true, - "description": "Unique ID of the diagnostic issue.", - "x-looker-nullable": false - }, - "report_id": { - "type": "string", - "readOnly": true, - "description": "Parent diagnostic report ID.", - "x-looker-nullable": true - }, - "project_id": { - "type": "string", - "readOnly": true, - "description": "Target Looker Project ID.", - "x-looker-nullable": true - }, - "project_type": { - "type": "string", - "readOnly": true, - "description": "Environment scope (developer/production).", - "x-looker-nullable": true - }, - "issue_type": { - "type": "string", - "readOnly": true, - "description": "Git diagnostic issue category.", - "x-looker-nullable": true - }, - "issue_version": { - "type": "string", - "readOnly": true, - "description": "Version schema.", - "x-looker-nullable": true - }, - "state": { - "type": "string", - "readOnly": true, - "description": "Current execution status.", - "x-looker-nullable": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Creation timestamp.", - "x-looker-nullable": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Last update timestamp.", - "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "GitDiagnosticReport": { - "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": "string", - "readOnly": true, - "description": "Unique ID of the git diagnostic report.", - "x-looker-nullable": false - }, - "project_id": { - "type": "string", - "readOnly": true, - "description": "Target Looker Project ID.", - "x-looker-nullable": true - }, - "user_id": { - "type": "string", - "readOnly": true, - "description": "ID of the user initiating the diagnosis.", - "x-looker-nullable": true - }, - "state": { - "type": "string", - "readOnly": true, - "description": "Raw lifecycle state.", - "x-looker-nullable": true - }, - "status": { - "type": "string", - "readOnly": true, - "description": "Status derived from state.", - "x-looker-nullable": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Creation time.", - "x-looker-nullable": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Update time.", - "x-looker-nullable": true - }, - "project_type": { - "type": "string", - "description": "Project structure type.", - "x-looker-nullable": true - }, - "issues": { - "type": "array", - "items": { - "$ref": "#/definitions/GitDiagnosticIssue" - }, - "readOnly": true, - "description": "Diagnostic issues associated with this report.", - "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, "GitStatus": { "properties": { "action": { @@ -40625,6 +41573,7 @@ }, "is_active": { "type": "boolean", + "readOnly": true, "description": "Whether this golden question should be utilized by the agent", "x-looker-nullable": false }, @@ -40706,6 +41655,21 @@ "readOnly": true, "description": "Client ID of the associated Looker Query", "x-looker-nullable": true + }, + "pivots": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Pivots of the associated Looker Query", + "x-looker-nullable": true + }, + "dynamic_fields": { + "type": "string", + "readOnly": true, + "description": "Dynamic fields of the associated Looker Query", + "x-looker-nullable": true } }, "x-looker-status": "beta" @@ -40942,6 +41906,63 @@ }, "x-looker-status": "stable" }, + "Image": { + "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": "string", + "readOnly": true, + "description": "Unique Id", + "x-looker-nullable": false + }, + "file_name": { + "type": "string", + "readOnly": true, + "description": "Original file name", + "x-looker-nullable": true + }, + "format": { + "type": "string", + "readOnly": true, + "description": "Image format (e.g. PNG, JPG)", + "x-looker-nullable": true + }, + "label": { + "type": "string", + "description": "Accessibility label", + "x-looker-nullable": true + }, + "url": { + "type": "string", + "readOnly": true, + "description": "URL of the image", + "x-looker-nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Creation timestamp", + "x-looker-nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Update timestamp", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable" + }, "ImportedProject": { "properties": { "name": { @@ -44914,6 +45935,11 @@ "description": "Returns all explores for the given model from the source.", "x-looker-nullable": false }, + "get_field_value_suggestions": { + "$ref": "#/definitions/McpToolSetting", + "description": "Retrieves distinct value suggestions for a field.", + "x-looker-nullable": false + }, "get_filters": { "$ref": "#/definitions/McpToolSetting", "description": "Returns all the filters from a given explore in a given model in the source.", @@ -45043,6 +46069,16 @@ "$ref": "#/definitions/McpToolSetting", "description": "Generates boilerplate LookML views directly from the database schema.", "x-looker-nullable": false + }, + "render_visualization": { + "$ref": "#/definitions/McpToolSetting", + "description": "Renders an interactive data visualization for a Looker query using the MCP Apps protocol.", + "x-looker-nullable": false + }, + "render_dashboard": { + "$ref": "#/definitions/McpToolSetting", + "description": "Renders an interactive Looker dashboard using the MCP Apps protocol.", + "x-looker-nullable": false } }, "x-looker-status": "stable" @@ -45308,7 +46344,16 @@ }, "redirect_uri": { "type": "string", - "description": "The uri with which this application will receive an auth code by browser redirect.", + "x-looker-deprecated": true, + "description": "(DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead)", + "x-looker-nullable": false + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The authorized uris for which this application will receive an auth code by browser redirect.", "x-looker-nullable": false }, "display_name": { @@ -45821,7 +46866,7 @@ }, "x-looker-status": "stable" }, - "ProjectFile": { + "ProjectCISuite": { "properties": { "can": { "type": "object", @@ -45835,1145 +46880,537 @@ "id": { "type": "string", "readOnly": true, - "description": "An opaque token uniquely identifying a file within a project. Avoid parsing or decomposing the text of this token. This token is stable within a Looker release but may change between Looker releases", - "x-looker-nullable": false - }, - "path": { - "type": "string", - "readOnly": true, - "description": "Path, file name, and extension of the file relative to the project root directory", + "description": "ID of the CI suite", "x-looker-nullable": true }, - "title": { + "name": { "type": "string", - "readOnly": true, - "description": "Display name", + "description": "Name of the CI suite", "x-looker-nullable": true }, - "type": { + "project_id": { "type": "string", "readOnly": true, - "description": "File type: model, view, etc", + "description": "ID of the LookML project", "x-looker-nullable": true }, - "extension": { + "created_at": { "type": "string", + "format": "date-time", "readOnly": true, - "description": "The extension of the file: .view.lkml, .model.lkml, etc", + "description": "Time and date that the CI suite was created", "x-looker-nullable": true }, - "mime_type": { + "updated_at": { "type": "string", + "format": "date-time", "readOnly": true, - "description": "File mime type", + "description": "Time and date that the CI suite was updated", "x-looker-nullable": true }, - "editable": { + "schedule_trigger_is_enabled": { "type": "boolean", - "readOnly": true, - "description": "State of editability for the file.", - "x-looker-nullable": false - }, - "git_status": { - "$ref": "#/definitions/GitStatus", - "readOnly": true, - "description": "Status of the file according to git", + "description": "Whether the CI suite schedule trigger is active", "x-looker-nullable": true - } - }, - "x-looker-status": "stable" - }, - "Project": { - "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": { + "schedule_trigger_crontab": { "type": "string", - "readOnly": true, - "description": "Project Id", - "x-looker-nullable": false - }, - "name": { - "type": "string", - "description": "Project display name", - "x-looker-nullable": false - }, - "uses_git": { - "type": "boolean", - "readOnly": true, - "description": "If true the project is configured with a git repository", - "x-looker-nullable": false - }, - "is_git_dev_locked": { - "type": "boolean", - "readOnly": true, - "description": "If true, the project git repository is locked.", - "x-looker-nullable": false - }, - "git_remote_url": { - "type": "string", - "description": "Git remote repository url", + "description": "Crontab that the CI suite is scheduled to run", "x-looker-nullable": true }, - "git_username": { + "schedule_trigger_timezone": { "type": "string", - "description": "Git username for HTTPS authentication. (For production only, if using user attributes.)", + "description": "Timezone for the CI suite schedule", "x-looker-nullable": true }, - "git_password": { - "type": "string", - "x-looker-write-only": true, - "description": "(Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.)", - "x-looker-nullable": true - }, - "git_production_branch_name": { - "type": "string", - "description": "Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher.", - "x-looker-nullable": false - }, - "use_git_cookie_auth": { + "alerting_enabled": { "type": "boolean", - "description": "If true, the project uses a git cookie for authentication.", - "x-looker-nullable": false - }, - "git_username_user_attribute": { - "type": "string", - "description": "User attribute name for username in per-user HTTPS authentication.", + "description": "Whether alerting is enabled for the CI suite", "x-looker-nullable": true }, - "git_password_user_attribute": { - "type": "string", - "description": "User attribute name for password in per-user HTTPS authentication.", + "alert_email_addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Email addresses to send alerts to", "x-looker-nullable": true }, - "git_service_name": { - "type": "string", - "description": "Name of the git service provider", + "alert_on_failed_status": { + "type": "boolean", + "description": "Whether to alert on failed status", "x-looker-nullable": true }, - "git_application_server_http_port": { - "type": "integer", - "format": "int64", - "description": "Port that HTTP(S) application server is running on (for PRs, file browsing, etc.)", + "alert_on_error_status": { + "type": "boolean", + "description": "Whether to alert on error status", "x-looker-nullable": true }, - "git_application_server_http_scheme": { - "type": "string", - "description": "Scheme that is running on application server (for PRs, file browsing, etc.)", + "alert_on_passed_status": { + "type": "boolean", + "description": "Whether to alert on passed status", "x-looker-nullable": true }, - "deploy_secret": { - "type": "string", - "x-looker-write-only": true, - "description": "(Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated.", + "alert_on_cancelled_status": { + "type": "boolean", + "description": "Whether to alert on cancelled status", "x-looker-nullable": true }, - "unset_deploy_secret": { + "change_request_trigger_is_enabled": { "type": "boolean", - "x-looker-write-only": true, - "description": "(Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint.", - "x-looker-nullable": false + "description": "Whether the CI suite change request trigger is active", + "x-looker-nullable": true }, - "pull_request_mode": { + "change_request_trigger_hook_id": { "type": "string", - "x-looker-values": [ - "off", - "links", - "recommended", - "required" - ], - "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", - "x-looker-nullable": false - }, - "validation_required": { - "type": "boolean", - "description": "Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository", - "x-looker-nullable": false - }, - "git_release_mgmt_enabled": { - "type": "boolean", - "description": "If true, advanced git release management is enabled for this project", - "x-looker-nullable": false - }, - "allow_warnings": { - "type": "boolean", - "description": "Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false).", - "x-looker-nullable": false - }, - "is_example": { - "type": "boolean", - "readOnly": true, - "description": "If true the project is an example project and cannot be modified", - "x-looker-nullable": false - }, - "has_production_counterpart": { - "type": "boolean", "readOnly": true, - "description": "If true the project has been pushed to production.", - "x-looker-nullable": false - }, - "dependency_status": { - "type": "string", - "description": "Status of dependencies in your manifest & lockfile", + "description": "ID of the hook that triggers the CI Suite to run", "x-looker-nullable": true - } - }, - "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": { + "change_request_trigger_target_branch": { "type": "string", - "readOnly": true, - "description": "Error message if the deploy failed", + "description": "Git branch that should be compared against when the CI suite is run, used when the run is incremental", "x-looker-nullable": true }, - "commit_sha": { + "guid": { "type": "string", "readOnly": true, - "description": "Commit SHA of the deployment", + "description": "GUID of the CI suite", "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "ProjectRun": { - "properties": { - "run": { - "$ref": "#/definitions/Run", - "readOnly": true, - "description": "Continuous Integration run results", + }, + "dbt_cloud_trigger_is_enabled": { + "type": "boolean", + "description": "Whether the CI suite dbt Cloud trigger is active", "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "Run": { - "properties": { - "run_id": { - "type": "string", - "readOnly": true, - "description": "ID of the CI run", - "x-looker-nullable": false }, - "created_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Time and date that the CI run was initiated", - "x-looker-nullable": false + "dbt_cloud_trigger_job_id": { + "type": "integer", + "format": "int64", + "description": "Job ID of the dbt Cloud job", + "x-looker-nullable": true }, - "started_at": { + "dbt_cloud_trigger_user_attribute_id": { "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Time and date that the CI run began executing", + "description": "User Attribute ID used for schema substitution", "x-looker-nullable": true }, - "finished_at": { + "dbt_cloud_webhook_id": { "type": "string", - "format": "date-time", "readOnly": true, - "description": "Time and date that the CI run completed", + "description": "Webhook ID registered in dbt Cloud", "x-looker-nullable": true }, - "status_url": { + "webhook_secret": { "type": "string", - "format": "uri-reference", - "readOnly": true, - "description": "Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite", + "x-looker-write-only": true, + "description": "(Write-Only) Webhook secret used to authenticate incoming webhook requests", "x-looker-nullable": true }, - "status": { - "type": "string", + "has_webhook_secret": { + "type": "boolean", "readOnly": true, - "description": "Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running)", + "description": "Whether the CI suite has a webhook secret configured", "x-looker-nullable": false }, - "git_service": { - "type": "string", - "readOnly": true, - "description": "Git service for CI run (e.g. GitHub)", + "assert_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether assert validation is enabled for the CI suite", "x-looker-nullable": true }, - "git_state": { - "$ref": "#/definitions/CIGitState", - "readOnly": true, - "description": "Git state information for the CI run", + "assert_validator_config_concurrency": { + "type": "integer", + "format": "int64", + "description": "Number of tests that should run concurrently during assert validation", "x-looker-nullable": true }, - "result": { - "$ref": "#/definitions/RunResult", - "readOnly": true, - "description": "Results of the CI run", + "assert_validator_config_selectors": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Explores that assert validation should run for (model_name/explore_name)", "x-looker-nullable": true }, - "schedule": { - "$ref": "#/definitions/CIScheduleTrigger", - "readOnly": true, - "description": "Schedule for CI run", + "assert_validator_config_exclusions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Explores that should be excluded from assert validation (model_name/explore_name)", "x-looker-nullable": true }, - "target_branch": { - "type": "string", - "readOnly": true, - "description": "Git branch that the CI run compares against during validation, used for incremental runs", + "content_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether content validation is enabled for the CI suite", "x-looker-nullable": true }, - "title": { - "type": "string", - "readOnly": true, - "description": "Name of the CI suite", - "x-looker-nullable": false - }, - "trigger": { - "type": "string", - "readOnly": true, - "description": "Trigger for CI run (unknown, manual, schedule, change_request)", - "x-looker-nullable": false - }, - "change_request": { - "$ref": "#/definitions/CIChangeRequest", - "readOnly": true, - "description": "Details of the change request, if the CI run was triggered by a change request", + "content_validator_config_exclude_personal": { + "type": "boolean", + "description": "Whether content validation should ignore personal folders", "x-looker-nullable": true }, - "suite_id": { - "type": "string", - "readOnly": true, - "description": "ID of the CI suite", - "x-looker-nullable": false - }, - "username": { - "type": "string", - "readOnly": true, - "description": "Username of the user who triggered the CI run, if the CI run was manually triggered", + "content_validator_config_incremental": { + "type": "boolean", + "description": "Whether content should validate incrementally", "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "CIGitState": { - "properties": { - "branch": { - "type": "string", - "readOnly": true, - "description": "Git branch that the CI run validates", + }, + "content_validator_config_exclude_folders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Folders whose content should not be validated", "x-looker-nullable": true }, - "repository": { - "type": "string", - "readOnly": true, - "description": "Git repository that contains the Git branch being validated", + "content_validator_config_include_folders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Folders whose content should be validated", "x-looker-nullable": true }, - "commit_ref": { - "type": "string", - "readOnly": true, - "description": "Git commit that the CI run validates", + "content_validator_config_selectors": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Explores whose content should be validated (model_name/explore_name)", "x-looker-nullable": true }, - "target": { - "type": "string", - "readOnly": true, - "description": "For incremental runs, the Git branch that the CI run compares against during validation", + "content_validator_config_exclusions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Explores that should be excluded from content validation (model_name/explore_name)", "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "CIScheduleTrigger": { - "properties": { - "enabled": { - "type": "boolean", - "readOnly": true, - "description": "Whether the CI run schedule is active", - "x-looker-nullable": false }, - "day": { - "type": "string", - "readOnly": true, - "description": "For scheduled runs, day of the week that the CI run is scheduled", + "lookml_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether LookML validation is enabled for the CI suite", "x-looker-nullable": true }, - "hour": { + "lookml_validator_config_severity": { "type": "string", - "readOnly": true, - "description": "For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled", + "description": "Severity of the error that the LookML validator should report (warning, error, fatal, info, success)", "x-looker-nullable": true }, - "frequency": { - "type": "string", - "readOnly": true, - "description": "For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly)", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "CIChangeRequest": { - "properties": { - "change_request_number": { + "lookml_validator_config_timeout": { "type": "integer", "format": "int64", - "readOnly": true, - "description": "Numeric identifier of the change request", - "x-looker-nullable": false - }, - "change_request_url": { - "type": "string", - "format": "uri-reference", - "readOnly": true, - "description": "URL of the change request", - "x-looker-nullable": false - }, - "change_request_name": { - "type": "string", - "readOnly": true, - "description": "Name of the change request", - "x-looker-nullable": false - }, - "change_request_commits_url": { - "type": "string", - "format": "uri-reference", - "readOnly": true, - "description": "For PR-triggered CI runs, the URL to the change request commit that triggered the run.", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "GenericError": { - "properties": { - "type": { - "type": "string", - "readOnly": true, - "description": "A URI reference that identifies the problem type", - "x-looker-nullable": false - }, - "title": { - "type": "string", - "readOnly": true, - "description": "Overview of the error", - "x-looker-nullable": false - }, - "detail": { - "type": "string", - "readOnly": true, - "description": "Detail of the error", - "x-looker-nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "The HTTP status code for the problem", - "x-looker-nullable": true - }, - "instance": { - "type": "string", - "readOnly": true, - "description": "URI reference that identifies the specific occurrence of the problem", - "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "RunResult": { - "properties": { - "sql_result": { - "$ref": "#/definitions/SqlValidatorResult", - "readOnly": true, - "description": "Results of the SQL validation", - "x-looker-nullable": true - }, - "sql_error": { - "$ref": "#/definitions/GenericError", - "readOnly": true, - "description": "Errors that occurred when attempting SQL validation", + "description": "Amount of time after which LookML Validation should stop running", "x-looker-nullable": true }, - "assert_result": { - "$ref": "#/definitions/AssertValidatorResult", - "readOnly": true, - "description": "Results of the assert validation", + "style_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether LookML Style Validator is enabled for the CI suite", "x-looker-nullable": true }, - "assert_error": { - "$ref": "#/definitions/GenericError", - "readOnly": true, - "description": "Errors that occurred when attempting assert validation", + "style_validator_config_incremental": { + "type": "boolean", + "description": "Whether LookML Style Validator should run incrementally on changed LookML files only", "x-looker-nullable": true }, - "content_result": { - "$ref": "#/definitions/ContentValidatorResult", - "readOnly": true, - "description": "Results of the content validation", + "sql_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether SQL validation is enabled for the CI suite", "x-looker-nullable": true }, - "content_error": { - "$ref": "#/definitions/GenericError", - "readOnly": true, - "description": "Errors that occurred when attempting content validation", + "sql_validator_config_fail_fast": { + "type": "boolean", + "description": "Whether SQL validation should stop after the first failure", "x-looker-nullable": true }, - "lookml_result": { - "$ref": "#/definitions/LookMLValidatorResult", - "readOnly": true, - "description": "Results of the LookML validation", + "sql_validator_config_incremental": { + "type": "boolean", + "description": "Whether SQL should validate incrementally", "x-looker-nullable": true }, - "lookml_error": { - "$ref": "#/definitions/GenericError", - "readOnly": true, - "description": "Errors that occurred when attempting LookML validation", + "sql_validator_config_ignore_hidden": { + "type": "boolean", + "description": "Whether SQL validation should ignore hidden fields", "x-looker-nullable": true }, - "generic_error": { - "$ref": "#/definitions/GenericError", - "readOnly": true, - "description": "Errors that occurred when attempting validation", + "sql_validator_config_query_concurrency": { + "type": "integer", + "format": "int64", + "description": "Number of queries that should run concurrently during SQL validation", "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorResult": { - "properties": { - "name": { - "type": "string", - "readOnly": true, - "description": "Name of the validator (assert)", - "x-looker-nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", - "x-looker-nullable": false }, - "results": { - "type": "array", - "items": { - "$ref": "#/definitions/AssertValidatorTestedExplore" - }, - "readOnly": true, - "description": "Results of the validation", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorTestedExplore": { - "properties": { - "error_count": { + "sql_validator_config_chunk_size": { "type": "integer", "format": "int64", - "readOnly": true, - "description": "Total number of failed data tests", + "description": "The max number of rows that should be returned for each query", "x-looker-nullable": true }, - "errors": { + "sql_validator_config_selectors": { "type": "array", "items": { - "$ref": "#/definitions/AssertValidatorErrorItem" + "type": "string" }, - "readOnly": true, - "description": "Details of data tests that failed validation", - "x-looker-nullable": false - }, - "success_count": { - "type": "string", - "readOnly": true, - "description": "Total number of successful data tests", - "x-looker-nullable": false + "description": "Explores whose sql should be validated (model_name/explore_name)", + "x-looker-nullable": true }, - "successes": { + "sql_validator_config_exclusions": { "type": "array", "items": { - "$ref": "#/definitions/AssertValidatorTestSuccess" + "type": "string" }, - "readOnly": true, - "description": "Details of data tests that passed validation", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorTestSuccess": { - "properties": { - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that contains the data test", - "x-looker-nullable": false - }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that is used as the explore_source for the data test", - "x-looker-nullable": false - }, - "test_name": { - "type": "string", - "readOnly": true, - "description": "Name of the data test", - "x-looker-nullable": false - }, - "explore_url": { - "type": "string", - "readOnly": true, - "description": "URL to the Explore", - "x-looker-nullable": false - }, - "lookml_url": { - "type": "string", - "readOnly": true, - "description": "URL to the LookML file where the data test is defined", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorErrorItem": { - "properties": { - "assert_error": { - "$ref": "#/definitions/AssertValidatorTestError", - "readOnly": true, - "description": "Details of the data tests that failed validation", + "description": "Explores that should be excluded from SQL validation (model_name/explore_name)", "x-looker-nullable": true }, - "generic_error": { - "$ref": "#/definitions/GenericError", - "readOnly": true, - "description": "Error that occurred when attempting to run validation", - "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorTestError": { - "properties": { - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that contains the data test", - "x-looker-nullable": false - }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that is used as the explore_source for the data test", - "x-looker-nullable": false - }, - "test_name": { - "type": "string", - "readOnly": true, - "description": "Name of the data test", - "x-looker-nullable": false - }, - "explore_url": { - "type": "string", - "readOnly": true, - "description": "URL to the Explore", - "x-looker-nullable": false - }, - "lookml_url": { - "type": "string", - "readOnly": true, - "description": "URL to the LookML file where the data test is defined", - "x-looker-nullable": false - }, - "message": { - "type": "string", - "readOnly": true, - "description": "Message returned by the data test", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "ContentValidatorResult": { - "properties": { - "name": { - "type": "string", - "readOnly": true, - "description": "Name of the validator (content)", - "x-looker-nullable": false - }, - "incremental": { + "upstream_trigger_is_enabled": { "type": "boolean", - "readOnly": true, - "description": "Whether the validation was incremental", - "x-looker-nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", - "x-looker-nullable": false - }, - "result": { - "type": "array", - "items": { - "$ref": "#/definitions/ContentValidatorTestedExplore" - }, - "readOnly": true, - "description": "Results of the content validation", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "ContentValidatorTestedExplore": { - "properties": { - "error_count": { - "type": "integer", - "format": "int64", - "readOnly": true, - "description": "Total number of failed content validations", + "description": "Whether the CI suite upstream project imports trigger is active", "x-looker-nullable": true }, - "errors": { + "upstream_projects": { "type": "array", "items": { - "$ref": "#/definitions/ContentValidatorErrorItem" + "type": "string" }, - "readOnly": true, - "description": "Details of the content that failed validation", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "ContentValidatorErrorItem": { - "properties": { - "content_error": { - "$ref": "#/definitions/ContentValidatorContentError", - "readOnly": true, - "description": "Details of the content that failed validation", - "x-looker-nullable": true - }, - "generic_error": { - "$ref": "#/definitions/GenericError", - "readOnly": true, - "description": "Error that occurred when attempting to run validation", + "description": "Names of upstream projects subscribed for pull request triggers", "x-looker-nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, - "ContentValidatorContentError": { + "ProjectFile": { "properties": { - "type": { - "type": "string", - "readOnly": true, - "description": "A URI reference that identifies the problem type", - "x-looker-nullable": false - }, - "title": { - "type": "string", - "readOnly": true, - "description": "Overview of the error", - "x-looker-nullable": false - }, - "detail": { - "type": "string", - "readOnly": true, - "description": "Detail of the error", - "x-looker-nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "The HTTP status code for the problem", - "x-looker-nullable": true - }, - "instance": { - "type": "string", - "readOnly": true, - "description": "URI reference that identifies the specific occurrence of the problem", - "x-looker-nullable": true - }, - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that contains the error", - "x-looker-nullable": true - }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that contains the error", - "x-looker-nullable": true - }, - "field_name": { - "type": "string", + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, "readOnly": true, - "description": "LookML field that caused the error", + "description": "Operations the current user is able to perform on this object", "x-looker-nullable": false }, - "content_type": { + "id": { "type": "string", "readOnly": true, - "description": "Type of the content (dashboard, look)", + "description": "An opaque token uniquely identifying a file within a project. Avoid parsing or decomposing the text of this token. This token is stable within a Looker release but may change between Looker releases", "x-looker-nullable": false }, - "folder": { + "path": { "type": "string", "readOnly": true, - "description": "Folder of the content", + "description": "Path, file name, and extension of the file relative to the project root directory", "x-looker-nullable": true }, - "url": { + "title": { "type": "string", "readOnly": true, - "description": "URL of the content", - "x-looker-nullable": false + "description": "Display name", + "x-looker-nullable": true }, - "tile_type": { + "type": { "type": "string", "readOnly": true, - "description": "Type of the tile (dashboard_element, dashboard_filter)", + "description": "File type: model, view, etc", "x-looker-nullable": true }, - "tile_title": { + "extension": { "type": "string", "readOnly": true, - "description": "Title of the tile", + "description": "The extension of the file: .view.lkml, .model.lkml, etc", "x-looker-nullable": true }, - "message": { - "type": "string", - "readOnly": true, - "description": "Message returned by the content validator", - "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "LookMLValidatorResult": { - "properties": { - "name": { + "mime_type": { "type": "string", "readOnly": true, - "description": "Name of the validator (lookml)", - "x-looker-nullable": false + "description": "File mime type", + "x-looker-nullable": true }, - "status": { - "type": "string", + "editable": { + "type": "boolean", "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", + "description": "State of editability for the file.", "x-looker-nullable": false }, - "error_count": { - "type": "integer", - "format": "int64", + "git_status": { + "$ref": "#/definitions/GitStatus", "readOnly": true, - "description": "Total number of failed LookML validations", + "description": "Status of the file according to git", "x-looker-nullable": true - }, - "errors": { - "type": "array", - "items": { - "$ref": "#/definitions/LookMLValidatorErrorItem" - }, - "readOnly": true, - "description": "Details of the LookML that failed validation", - "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, - "LookMLValidatorErrorItem": { + "Project": { "properties": { - "lookml_error": { - "$ref": "#/definitions/LookMLValidatorError", + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, "readOnly": true, - "description": "Details of the LookML that failed validation", - "x-looker-nullable": true + "description": "Operations the current user is able to perform on this object", + "x-looker-nullable": false }, - "generic_error": { - "$ref": "#/definitions/GenericError", - "readOnly": true, - "description": "Error that occurred when attempting to run validation", - "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "LookMLValidatorError": { - "properties": { - "type": { + "id": { "type": "string", "readOnly": true, - "description": "A URI reference that identifies the problem type", + "description": "Project Id", "x-looker-nullable": false }, - "title": { + "name": { "type": "string", + "description": "Project display name", + "x-looker-nullable": false + }, + "uses_git": { + "type": "boolean", "readOnly": true, - "description": "Overview of the error", + "description": "If true the project is configured with a git repository", "x-looker-nullable": false }, - "detail": { - "type": "string", + "is_git_dev_locked": { + "type": "boolean", "readOnly": true, - "description": "Detail of the error", + "description": "If true, the project git repository is locked.", "x-looker-nullable": false }, - "status": { + "git_remote_url": { "type": "string", - "readOnly": true, - "description": "The HTTP status code for the problem", + "description": "Git remote repository url", "x-looker-nullable": true }, - "instance": { + "git_username": { "type": "string", - "readOnly": true, - "description": "URI reference that identifies the specific occurrence of the problem", + "description": "Git username for HTTPS authentication. (For production only, if using user attributes.)", "x-looker-nullable": true }, - "model": { + "git_password": { "type": "string", - "readOnly": true, - "description": "LookML model that contains the error", + "x-looker-write-only": true, + "description": "(Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.)", "x-looker-nullable": true }, - "explore": { + "git_production_branch_name": { "type": "string", - "readOnly": true, - "description": "LookML Explore that contains the error", - "x-looker-nullable": true + "description": "Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher.", + "x-looker-nullable": false }, - "field_name": { + "use_git_cookie_auth": { + "type": "boolean", + "description": "If true, the project uses a git cookie for authentication.", + "x-looker-nullable": false + }, + "git_username_user_attribute": { "type": "string", - "readOnly": true, - "description": "LookML field that caused the error", + "description": "User attribute name for username in per-user HTTPS authentication.", "x-looker-nullable": true }, - "message": { + "git_password_user_attribute": { "type": "string", - "readOnly": true, - "description": "Message returned by the LookML validator", + "description": "User attribute name for password in per-user HTTPS authentication.", "x-looker-nullable": true }, - "severity": { + "git_service_name": { "type": "string", - "readOnly": true, - "description": "Severity of the error (warning, error, fatal, info, success)", + "description": "Name of the git service provider", "x-looker-nullable": true }, - "line_number": { - "type": "string", - "readOnly": true, - "description": "Line number of the error in the LookML file", + "git_application_server_http_port": { + "type": "integer", + "format": "int64", + "description": "Port that HTTP(S) application server is running on (for PRs, file browsing, etc.)", "x-looker-nullable": true }, - "lookml_url": { + "git_application_server_http_scheme": { "type": "string", - "readOnly": true, - "description": "URL to the LookML that caused the error", + "description": "Scheme that is running on application server (for PRs, file browsing, etc.)", "x-looker-nullable": true }, - "file_path": { + "deploy_secret": { "type": "string", - "readOnly": true, - "description": "IDE folder path to the LookML file that caused the error", + "x-looker-write-only": true, + "description": "(Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated.", "x-looker-nullable": true - } - }, - "x-looker-status": "beta" - }, - "SqlValidatorResult": { - "properties": { - "name": { - "type": "string", - "readOnly": true, - "description": "Name of the validator (sql)", - "x-looker-nullable": false }, - "incremental": { + "unset_deploy_secret": { "type": "boolean", - "readOnly": true, - "description": "Whether the validation was incremental", + "x-looker-write-only": true, + "description": "(Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint.", "x-looker-nullable": false }, - "status": { + "pull_request_mode": { "type": "string", - "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", + "x-looker-values": [ + "off", + "links", + "recommended", + "required" + ], + "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", "x-looker-nullable": false }, - "result": { - "type": "array", - "items": { - "$ref": "#/definitions/SqlValidatorTestedExplore" - }, - "readOnly": true, - "description": "The results of tested Explores", + "validation_required": { + "type": "boolean", + "description": "Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository", "x-looker-nullable": false - } - }, - "x-looker-status": "beta" - }, - "SqlValidatorTestedExplore": { - "properties": { - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that was tested", + }, + "git_release_mgmt_enabled": { + "type": "boolean", + "description": "If true, advanced git release management is enabled for this project", "x-looker-nullable": false }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that was tested", + "allow_warnings": { + "type": "boolean", + "description": "Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false).", "x-looker-nullable": false }, - "status": { - "type": "string", + "is_example": { + "type": "boolean", "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", + "description": "If true the project is an example project and cannot be modified", "x-looker-nullable": false }, - "skip_reason": { - "type": "string", + "has_production_counterpart": { + "type": "boolean", "readOnly": true, - "description": "Reason the validation was skipped", - "x-looker-nullable": true + "description": "If true the project has been pushed to production.", + "x-looker-nullable": false }, - "error_count": { - "type": "integer", - "format": "int64", - "readOnly": true, - "description": "Total number of failed validations", + "dependency_status": { + "type": "string", + "description": "Status of dependencies in your manifest & lockfile", "x-looker-nullable": true - }, - "errors": { - "type": "array", - "items": { - "$ref": "#/definitions/SqlValidatorErrorItem" - }, - "readOnly": true, - "description": "Details of the LookML that failed SQL validation", - "x-looker-nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, - "SqlValidatorErrorItem": { + "AsyncDeployResponse": { "properties": { - "sql_error": { - "$ref": "#/definitions/SqlValidatorError", - "readOnly": true, - "description": "Details of the LookML that failed validation", - "x-looker-nullable": true - }, - "generic_error": { - "$ref": "#/definitions/GenericError", + "status": { + "type": "string", "readOnly": true, - "description": "Error that occurred when attempting to run validation", - "x-looker-nullable": true + "description": "Status of the async deploy request (e.g., 'queued')", + "x-looker-nullable": false } }, "x-looker-status": "beta" }, - "SqlValidatorError": { + "DeployStatusResponse": { "properties": { - "type": { - "type": "string", - "readOnly": true, - "description": "A URI reference that identifies the problem type", - "x-looker-nullable": false - }, - "title": { - "type": "string", - "readOnly": true, - "description": "Overview of the error", - "x-looker-nullable": false - }, - "detail": { - "type": "string", - "readOnly": true, - "description": "Detail of the error", - "x-looker-nullable": false - }, "status": { "type": "string", "readOnly": true, - "description": "The HTTP status code for the problem", - "x-looker-nullable": true - }, - "instance": { - "type": "string", - "readOnly": true, - "description": "URI reference that identifies the specific occurrence of the problem", - "x-looker-nullable": true - }, - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that contains the Explore that failed SQL validation", - "x-looker-nullable": false - }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that failed SQL validation", - "x-looker-nullable": false - }, - "message": { - "type": "string", - "readOnly": true, - "description": "Message returned by the SQL validation", + "description": "Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED')", "x-looker-nullable": false }, - "explore_url": { - "type": "string", - "readOnly": true, - "description": "URL to the Explore", - "x-looker-nullable": true - }, - "lookml_url": { - "type": "string", - "readOnly": true, - "description": "URL to the LookML that caused the error", - "x-looker-nullable": true - }, - "dimension": { + "error": { "type": "string", "readOnly": true, - "description": "LookML dimension that caused the error", + "description": "Error message if the deploy failed", "x-looker-nullable": true }, - "line_number": { + "commit_sha": { "type": "string", "readOnly": true, - "description": "Line of the error in the LookML file", + "description": "Commit SHA of the deployment", "x-looker-nullable": true } }, @@ -48650,6 +49087,11 @@ "description": "(Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password.", "x-looker-nullable": true }, + "include_filters": { + "type": "boolean", + "description": "Whether or not to include filters context", + "x-looker-nullable": false + }, "message": { "type": "string", "description": "Optional message to be included in scheduled emails", @@ -48814,182 +49256,192 @@ "description": "Whether or not to add page breaks between tabs", "x-looker-nullable": false }, - "tab_ids": { - "type": "array", - "items": { - "type": "string" - }, - "description": "IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards)", - "x-looker-nullable": true - }, - "inline_table_width": { - "type": "integer", - "format": "int64", - "description": "The pixel width at which we render the inline table visualizations", - "x-looker-nullable": true - }, - "query_id": { - "type": "string", - "description": "Query id", - "x-looker-nullable": true - } - }, - "x-looker-status": "stable" - }, - "ScheduledPlan": { - "properties": { - "name": { - "type": "string", - "description": "Name of this scheduled plan", - "x-looker-nullable": true - }, - "user_id": { - "type": "string", - "description": "User Id which owns this scheduled plan", - "x-looker-nullable": true - }, - "run_as_recipient": { - "type": "boolean", - "description": "Whether schedule is run as recipient (only applicable for email recipients)", - "x-looker-nullable": false - }, - "enabled": { - "type": "boolean", - "description": "Whether the ScheduledPlan is enabled", - "x-looker-nullable": false - }, - "look_id": { - "type": "string", - "description": "Id of a look", - "x-looker-nullable": true - }, - "dashboard_id": { - "type": "string", - "description": "Id of a dashboard", - "x-looker-nullable": true - }, - "lookml_dashboard_id": { - "type": "string", - "description": "Id of a LookML dashboard", - "x-looker-nullable": true - }, - "filters_string": { - "type": "string", - "description": "Query string to run look or dashboard with", - "x-looker-nullable": true - }, - "dashboard_filters": { - "type": "string", - "x-looker-deprecated": true, - "description": "(DEPRECATED) Alias for filters_string field", - "x-looker-nullable": true - }, - "require_results": { - "type": "boolean", - "description": "Delivery should occur if running the dashboard or look returns results", - "x-looker-nullable": false - }, - "require_no_results": { - "type": "boolean", - "description": "Delivery should occur if the dashboard look does not return results", - "x-looker-nullable": false - }, - "require_change": { - "type": "boolean", - "description": "Delivery should occur if data have changed since the last run", - "x-looker-nullable": false - }, - "send_all_results": { - "type": "boolean", - "description": "Will run an unlimited query and send all results.", - "x-looker-nullable": false - }, - "crontab": { - "type": "string", - "description": "Vixie-Style crontab specification when to run", - "x-looker-nullable": true - }, - "datagroup": { - "type": "string", - "description": "Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string)", - "x-looker-nullable": true - }, - "timezone": { - "type": "string", - "description": "Timezone for interpreting the specified crontab (default is Looker instance timezone)", - "x-looker-nullable": true - }, - "scheduled_plan_destination": { - "type": "array", - "items": { - "$ref": "#/definitions/ScheduledPlanDestination" - }, - "description": "Scheduled plan destinations", - "x-looker-nullable": true - }, - "run_once": { - "type": "boolean", - "description": "Whether the plan in question should only be run once (usually for testing)", - "x-looker-nullable": false - }, - "include_links": { - "type": "boolean", - "description": "Whether links back to Looker should be included in this ScheduledPlan", - "x-looker-nullable": false - }, - "include_dashboard_summary": { - "type": "boolean", - "description": "Whether to include a dashboard summary in the scheduled email", - "x-looker-nullable": false - }, - "custom_url_base": { - "type": "string", - "description": "Custom url domain for the scheduled entity", - "x-looker-nullable": true - }, - "custom_url_params": { - "type": "string", - "description": "Custom url path and parameters for the scheduled entity", - "x-looker-nullable": true - }, - "custom_url_label": { - "type": "string", - "description": "Custom url label for the scheduled entity", - "x-looker-nullable": true - }, - "show_custom_url": { - "type": "boolean", - "description": "Whether to show custom link back instead of standard looker link", - "x-looker-nullable": false - }, - "pdf_paper_size": { - "type": "string", - "description": "The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".", - "x-looker-nullable": true - }, - "pdf_landscape": { - "type": "boolean", - "description": "Whether the PDF should be formatted for landscape orientation", - "x-looker-nullable": false - }, - "embed": { - "type": "boolean", - "description": "Whether this schedule is in an embed context or not", - "x-looker-nullable": false - }, - "color_theme": { - "type": "string", - "description": "Color scheme of the dashboard if applicable", - "x-looker-nullable": true - }, - "long_tables": { - "type": "boolean", - "description": "Whether or not to expand table vis to full length", - "x-looker-nullable": false - }, - "pdf_page_breaks": { + "include_filters": { + "type": "boolean", + "description": "Whether or not to include filters context", + "x-looker-nullable": false + }, + "tab_ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards)", + "x-looker-nullable": true + }, + "inline_table_width": { + "type": "integer", + "format": "int64", + "description": "The pixel width at which we render the inline table visualizations", + "x-looker-nullable": true + }, + "query_id": { + "type": "string", + "description": "Query id", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable" + }, + "ScheduledPlan": { + "properties": { + "name": { + "type": "string", + "description": "Name of this scheduled plan", + "x-looker-nullable": true + }, + "user_id": { + "type": "string", + "description": "User Id which owns this scheduled plan", + "x-looker-nullable": true + }, + "run_as_recipient": { + "type": "boolean", + "description": "Whether schedule is run as recipient (only applicable for email recipients)", + "x-looker-nullable": false + }, + "enabled": { + "type": "boolean", + "description": "Whether the ScheduledPlan is enabled", + "x-looker-nullable": false + }, + "look_id": { + "type": "string", + "description": "Id of a look", + "x-looker-nullable": true + }, + "dashboard_id": { + "type": "string", + "description": "Id of a dashboard", + "x-looker-nullable": true + }, + "lookml_dashboard_id": { + "type": "string", + "description": "Id of a LookML dashboard", + "x-looker-nullable": true + }, + "filters_string": { + "type": "string", + "description": "Query string to run look or dashboard with", + "x-looker-nullable": true + }, + "dashboard_filters": { + "type": "string", + "x-looker-deprecated": true, + "description": "(DEPRECATED) Alias for filters_string field", + "x-looker-nullable": true + }, + "require_results": { + "type": "boolean", + "description": "Delivery should occur if running the dashboard or look returns results", + "x-looker-nullable": false + }, + "require_no_results": { + "type": "boolean", + "description": "Delivery should occur if the dashboard look does not return results", + "x-looker-nullable": false + }, + "require_change": { + "type": "boolean", + "description": "Delivery should occur if data have changed since the last run", + "x-looker-nullable": false + }, + "send_all_results": { + "type": "boolean", + "description": "Will run an unlimited query and send all results.", + "x-looker-nullable": false + }, + "crontab": { + "type": "string", + "description": "Vixie-Style crontab specification when to run", + "x-looker-nullable": true + }, + "datagroup": { + "type": "string", + "description": "Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string)", + "x-looker-nullable": true + }, + "timezone": { + "type": "string", + "description": "Timezone for interpreting the specified crontab (default is Looker instance timezone)", + "x-looker-nullable": true + }, + "scheduled_plan_destination": { + "type": "array", + "items": { + "$ref": "#/definitions/ScheduledPlanDestination" + }, + "description": "Scheduled plan destinations", + "x-looker-nullable": true + }, + "run_once": { + "type": "boolean", + "description": "Whether the plan in question should only be run once (usually for testing)", + "x-looker-nullable": false + }, + "include_links": { + "type": "boolean", + "description": "Whether links back to Looker should be included in this ScheduledPlan", + "x-looker-nullable": false + }, + "include_dashboard_summary": { + "type": "boolean", + "description": "Whether to include a dashboard summary in the scheduled email", + "x-looker-nullable": false + }, + "custom_url_base": { + "type": "string", + "description": "Custom url domain for the scheduled entity", + "x-looker-nullable": true + }, + "custom_url_params": { + "type": "string", + "description": "Custom url path and parameters for the scheduled entity", + "x-looker-nullable": true + }, + "custom_url_label": { + "type": "string", + "description": "Custom url label for the scheduled entity", + "x-looker-nullable": true + }, + "show_custom_url": { + "type": "boolean", + "description": "Whether to show custom link back instead of standard looker link", + "x-looker-nullable": false + }, + "pdf_paper_size": { + "type": "string", + "description": "The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".", + "x-looker-nullable": true + }, + "pdf_landscape": { + "type": "boolean", + "description": "Whether the PDF should be formatted for landscape orientation", + "x-looker-nullable": false + }, + "embed": { + "type": "boolean", + "description": "Whether this schedule is in an embed context or not", + "x-looker-nullable": false + }, + "color_theme": { + "type": "string", + "description": "Color scheme of the dashboard if applicable", + "x-looker-nullable": true + }, + "long_tables": { + "type": "boolean", + "description": "Whether or not to expand table vis to full length", + "x-looker-nullable": false + }, + "pdf_page_breaks": { + "type": "boolean", + "description": "Whether or not to add page breaks between tabs", + "x-looker-nullable": false + }, + "include_filters": { "type": "boolean", - "description": "Whether or not to add page breaks between tabs", + "description": "Whether or not to include filters context", "x-looker-nullable": false }, "tab_ids": { @@ -49037,6 +49489,12 @@ "description": "Title", "x-looker-nullable": true }, + "content_title": { + "type": "string", + "readOnly": true, + "description": "Title of the underlying content (Dashboard, Look, LookML Dashboard, or Explore) associated with this ScheduledPlan", + "x-looker-nullable": true + }, "user": { "$ref": "#/definitions/UserPublic", "readOnly": true, @@ -49057,6 +49515,12 @@ "description": "When the ScheduledPlan was last run", "x-looker-nullable": true }, + "last_run_status": { + "type": "string", + "readOnly": true, + "description": "Status of the last run for this ScheduledPlan", + "x-looker-nullable": true + }, "can": { "type": "object", "additionalProperties": { @@ -49783,6 +50247,11 @@ "description": "(DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value.", "x-looker-nullable": false }, + "embed_vis_modernization_default": { + "type": "boolean", + "description": "Default net new visualizations in embedded context to Modern theme", + "x-looker-nullable": false + }, "embed_enabled": { "type": "boolean", "readOnly": true, @@ -50489,6 +50958,22 @@ "description": "Default background color", "x-looker-nullable": false }, + "background_image_url": { + "type": "string", + "description": "URL for background image", + "x-looker-nullable": true + }, + "background_image_id": { + "type": "string", + "description": "Optional. ID of theme background image.", + "x-looker-nullable": true + }, + "background_opacity": { + "type": "number", + "format": "float", + "description": "Background image opacity (0.0 to 1.0).", + "x-looker-nullable": true + }, "base_font_size": { "type": "string", "description": "Base font size for scaling fonts (only supported by legacy dashboards)", @@ -50808,7 +51293,7 @@ }, "type": { "type": "string", - "description": "Type of user attribute (\"string\", \"number\", \"datetime\", \"yesno\", \"zipcode\", \"advanced_filter_string\", \"advanced_filter_number\")", + "description": "Type of user attribute (\"string\", \"number\", \"datetime\", \"yesno\", \"zipcode\", \"advanced_filter_string\", \"advanced_filter_number\", \"file\")", "x-looker-nullable": true }, "default_value": { @@ -50991,6 +51476,107 @@ }, "x-looker-status": "stable" }, + "UserDbConnection": { + "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": "string", + "readOnly": true, + "description": "ID of the connection", + "x-looker-nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of the connection (must match virtual namespace pattern)", + "x-looker-nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the user who owns the connection", + "x-looker-nullable": true + }, + "dialect": { + "type": "string", + "readOnly": true, + "description": "Database dialect name", + "x-looker-nullable": true + }, + "auth_type": { + "type": "string", + "readOnly": true, + "description": "Authentication type (oauth, service_account, password)", + "x-looker-nullable": true + }, + "host": { + "type": "string", + "readOnly": true, + "description": "Host name/address of server", + "x-looker-nullable": true + }, + "port": { + "type": "string", + "readOnly": true, + "description": "Port number on server", + "x-looker-nullable": true + }, + "database": { + "type": "string", + "readOnly": true, + "description": "Database name", + "x-looker-nullable": true + }, + "schema": { + "type": "string", + "readOnly": true, + "description": "Schema name", + "x-looker-nullable": true + }, + "jdbc_additional_params": { + "type": "string", + "readOnly": true, + "description": "Additional JDBC parameters", + "x-looker-nullable": true + }, + "oauth_application_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "OAuth application ID (if auth_type is oauth)", + "x-looker-nullable": true + }, + "enabled": { + "type": "boolean", + "description": "Whether this connection is enabled", + "x-looker-nullable": false + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "When the connection was created", + "x-looker-nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "When the connection was last updated", + "x-looker-nullable": true + } + }, + "x-looker-status": "beta" + }, "UserEmailOnly": { "properties": { "email": { diff --git a/spec/Looker.4.0.oas.json b/spec/Looker.4.0.oas.json index 3a20d208c..4e1ddfb98 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.12", - "x-looker-release-version": "26.12.3", + "version": "4.0.26.18", + "x-looker-release-version": "26.18.1", "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": { @@ -164,7 +164,7 @@ ], "operationId": "create_query_task", "summary": "Run Query Async", - "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n", + "description": "### Create an async query task\n\nCreates a query task (job) to run a previously created query asynchronously. Returns a Query Task ID.\n\nUse [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task.\nAfter the query task status reaches \"Complete\", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query.\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n", "parameters": [ { "name": "limit", @@ -850,7 +850,7 @@ ], "operationId": "run_query", "summary": "Run Query", - "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "description": "### Run a saved query.\n\nThis runs a previously saved query. You can use this on a query that was generated in the Looker UI\nor one that you have explicitly created using the API. You can also use a query 'id' from a saved 'Look'.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n\n\n", "parameters": [ { "name": "query_id", @@ -1146,7 +1146,7 @@ ], "operationId": "run_inline_query", "summary": "Run Inline Query", - "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "description": "### Run the query that is specified inline in the posted body.\n\nThis allows running a query as defined in json in the posted body. This combines\nthe two actions of posting & running a query into one step.\n\nHere is an example body in json:\n```\n{\n \"model\":\"thelook\",\n \"view\":\"inventory_items\",\n \"fields\":[\"category.name\",\"inventory_items.days_in_inventory_tier\",\"products.count\"],\n \"filters\":{\"category.name\":\"socks\"},\n \"sorts\":[\"products.count desc 0\"],\n \"limit\":\"500\",\n \"query_timezone\":\"America/Los_Angeles\"\n}\n```\n\nWhen using the Ruby SDK this would be passed as a Ruby hash like:\n```\n{\n :model=>\"thelook\",\n :view=>\"inventory_items\",\n :fields=>\n [\"category.name\",\n \"inventory_items.days_in_inventory_tier\",\n \"products.count\"],\n :filters=>{:\"category.name\"=>\"socks\"},\n :sorts=>[\"products.count desc 0\"],\n :limit=>\"500\",\n :query_timezone=>\"America/Los_Angeles\",\n}\n```\n\nThis will return the result of running the query in the format specified by the 'result_format' parameter.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n\n\n", "parameters": [ { "name": "result_format", @@ -1444,7 +1444,7 @@ ], "operationId": "run_url_encoded_query", "summary": "Run Url Encoded Query", - "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/4.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n fields: \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n sorts: \"products.count desc 0\",\n limit: \"500\",\n query_timezone: \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "description": "### Run an URL encoded query.\n\nThis requires the caller to encode the specifiers for the query into the URL query part using\nLooker-specific syntax as explained below.\n\nGenerally, you would want to use one of the methods that takes the parameters as json in the POST body\nfor creating and/or running queries. This method exists for cases where one really needs to encode the\nparameters into the URL of a single 'GET' request. This matches the way that the Looker UI formats\n'explore' URLs etc.\n\nThe parameters here are very similar to the json body formatting except that the filter syntax is\ntricky. Unfortunately, this format makes this method not currently callable via the 'Try it out!' button\nin this documentation page. But, this is callable when creating URLs manually or when using the Looker SDK.\n\nHere is an example inline query URL:\n\n```\nhttps://looker.mycompany.com:19999/api/4.0/queries/models/thelook/views/inventory_items/run/json?fields=category.name,inventory_items.days_in_inventory_tier,products.count&f[category.name]=socks&sorts=products.count+desc+0&limit=500&query_timezone=America/Los_Angeles\n```\n\nWhen invoking this endpoint with the Ruby SDK, pass the query parameter parts as a hash. The hash to match the above would look like:\n\n```ruby\nquery_params =\n{\n fields: \"category.name,inventory_items.days_in_inventory_tier,products.count\",\n :\"f[category.name]\" => \"socks\",\n sorts: \"products.count desc 0\",\n limit: \"500\",\n query_timezone: \"America/Los_Angeles\"\n}\nresponse = ruby_sdk.run_url_encoded_query('thelook','inventory_items','json', query_params)\n\n```\n\nAgain, it is generally easier to use the variant of this method that passes the full query in the POST body.\nThis method is available for cases where other alternatives won't fit the need.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n\n\n", "parameters": [ { "name": "model_name", @@ -2339,6 +2339,72 @@ } } }, + "/agents/lookml/{agent_id}": { + "get": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "agent_lookml", + "summary": "Get LookML of a UDD Agent", + "description": "### Get LookML of a UDD Agent\n\nReturns the LookML representation of a user-defined (UDD) agent.\n", + "parameters": [ + { + "name": "agent_id", + "in": "path", + "description": "Id of agent", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "lookml of agent", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentLookml" + } + } + } + }, + "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 + } + }, "/alerts/{alert_id}/follow": { "post": { "tags": [ @@ -4028,14 +4094,14 @@ } } }, - "/projects/{project_id}/ci/runs/{run_id}": { + "/projects/{project_id}/continuous_integration/runs/search": { "get": { "tags": [ "Project" ], - "operationId": "get_ci_run", - "summary": "Fetch Continuous Integration run", - "description": "### Fetches a CI Run.\n\nThis endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead.\n", + "operationId": "search_continuous_integration_runs", + "summary": "Search Continuous Integration runs", + "description": "### Search Continuous Integration Runs for a project.\n\nReturns an array of Continuous Integration Run objects that match the specified search criteria.\n", "parameters": [ { "name": "project_id", @@ -4047,18 +4113,74 @@ } }, { - "name": "run_id", - "in": "path", - "description": "Run Id", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "schema": { "type": "string" } }, { - "name": "fields", + "name": "suite_id", "in": "query", - "description": "Requested fields", + "description": "Filter by suite id. Can be a comma-separated list of ids.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Filter by status. Can be a comma-separated list of statuses.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "query", + "description": "Filter by user id. Can be a comma-separated list of ids.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "trigger_type", + "in": "query", + "description": "Filter by trigger type. Can be a comma-separated list of types.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (min 1, max 100, default 50, used with offset)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning. (used with limit)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at", "required": false, "schema": { "type": "string" @@ -4067,11 +4189,14 @@ ], "responses": { "200": { - "description": "CI Run", + "description": "Continuous Integration Runs", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectRun" + "type": "array", + "items": { + "$ref": "#/components/schemas/CIRun" + } } } } @@ -4107,20 +4232,19 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects/{project_id}/ci/run": { - "post": { + "/projects/{project_id}/continuous_integration/suites": { + "get": { "tags": [ "Project" ], - "operationId": "create_ci_run", - "summary": "Create a Continuous Integration run", - "description": "### Creates a CI Run.\n\nThis endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead.\n", + "operationId": "get_continuous_integration_suites", + "summary": "Fetch Multiple Continuous Integration Suites for Project", + "description": "### Fetches Multiple CI Suite Configurations for Project.\n\n", "parameters": [ { "name": "project_id", @@ -4139,15 +4263,48 @@ "schema": { "type": "string" } + }, + { + "name": "limit", + "in": "query", + "description": "Number of suites to return (min 1, max 100, default 50)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Row offset at which to fetch suites", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "created_at", + "in": "query", + "description": "Time at which to fetch suites", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } } ], "responses": { "200": { - "description": "CI Run", + "description": "Continuous Integration Suite", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCIRunResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectCISuite" + } } } } @@ -4172,26 +4329,6 @@ } } }, - "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": { @@ -4203,31 +4340,17 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateCIRunRequest" - } - } - }, - "description": "Options for creating a CI run", - "required": true - } - } - }, - "/projects/{project_id}/continuous_integration/runs": { + "x-looker-rate-limited": true + }, "post": { "tags": [ "Project" ], - "operationId": "create_continuous_integration_run", - "summary": "Create and queue a Continuous Integration run", - "description": "### Creates and queues a Continuous Integration Run.\n\n", + "operationId": "create_continuous_integration_suite", + "summary": "Create a Continuous Integration Suite for Project", + "description": "### Fetches a CI Suite Configuration.\n\n", "parameters": [ { "name": "project_id", @@ -4250,18 +4373,15 @@ ], "responses": { "200": { - "description": "Continuous Integration run info", + "description": "Continuous Integration Suite", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CIRun" + "$ref": "#/components/schemas/ProjectCISuite" } } } }, - "201": { - "description": "Created" - }, "400": { "description": "Bad Request", "content": { @@ -4313,30 +4433,30 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateContinuousIntegrationRunRequest" + "$ref": "#/components/schemas/ProjectCISuite" } } }, - "description": "Options for creating a Continuous Integration run", + "description": "Options for creating a Continuous Integration suite", "required": true } } }, - "/projects/{project_id}/continuous_integration/runs/{run_id}": { + "/projects/{project_id}/continuous_integration/suites/{suite_id}": { "get": { "tags": [ "Project" ], - "operationId": "get_continuous_integration_run", - "summary": "Get a Continuous Integration run", - "description": "### Gets a Continuous Integration run.\n\n", + "operationId": "get_continuous_integration_suite", + "summary": "Fetch Continuous Integration Suite for Project", + "description": "### Fetches a CI Suite Configuration.\n\n", "parameters": [ { "name": "project_id", @@ -4348,9 +4468,9 @@ } }, { - "name": "run_id", + "name": "suite_id", "in": "path", - "description": "Run Id", + "description": "Suite Id", "required": true, "schema": { "type": "string" @@ -4368,11 +4488,11 @@ ], "responses": { "200": { - "description": "Continuous Integration run info", + "description": "Continuous Integration Suite", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CIRun" + "$ref": "#/components/schemas/ProjectCISuite" } } } @@ -4408,26 +4528,53 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/cloud_storage": { - "get": { + }, + "delete": { "tags": [ - "Config" + "Project" + ], + "operationId": "delete_continuous_integration_suite", + "summary": "Delete Continuous Integration suite", + "description": "### Deletes a Continuous Integration Suite.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "suite_id", + "in": "path", + "description": "Suite Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "cloud_storage_configuration", - "summary": "Get Cloud Storage", - "description": "Get the current Cloud Storage Configuration.\n", "responses": { - "200": { - "description": "Current Cloud Storage Configuration", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BackupConfiguration" + "type": "string" } } } @@ -4469,18 +4616,47 @@ }, "patch": { "tags": [ - "Config" + "Project" + ], + "operationId": "update_continuous_integration_suite", + "summary": "Update a Continuous Integration suite", + "description": "### Updates a Continuous Integration Suite.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "suite_id", + "in": "path", + "description": "Suite Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "update_cloud_storage_configuration", - "summary": "Update Cloud Storage", - "description": "Update the current Cloud Storage Configuration.\n", "responses": { "200": { - "description": "New state for specified model set.", + "description": "Continuous Integration Suite", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BackupConfiguration" + "$ref": "#/components/schemas/ProjectCISuite" } } } @@ -4533,28 +4709,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BackupConfiguration" + "$ref": "#/components/schemas/ProjectCISuite" } } }, - "description": "Options for Cloud Storage Configuration", + "description": "Options for updating a Continuous Integration suite", "required": true } } }, - "/color_collections": { - "get": { + "/projects/{project_id}/continuous_integration/runs": { + "post": { "tags": [ - "ColorCollection" + "Project" ], - "operationId": "all_color_collections", - "summary": "Get all Color Collections", - "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "create_continuous_integration_run", + "summary": "Create and queue a Continuous Integration run", + "description": "### Creates and queues a Continuous Integration Run.\n\n", "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "schema": { "type": "string" @@ -4563,18 +4748,18 @@ ], "responses": { "200": { - "description": "ColorCollections", + "description": "Continuous Integration run info", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ColorCollection" - } + "$ref": "#/components/schemas/CIRun" } } } }, + "201": { + "description": "Created" + }, "400": { "description": "Bad Request", "content": { @@ -4595,6 +4780,26 @@ } } }, + "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": { @@ -4608,38 +4813,80 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateContinuousIntegrationRunRequest" + } + } + }, + "description": "Options for creating a Continuous Integration run", + "required": true + } + } + }, + "/projects/{project_id}/continuous_integration/runs/{run_id}/duplicate": { "post": { "tags": [ - "ColorCollection" + "Project" + ], + "operationId": "duplicate_continuous_integration_run", + "summary": "Duplicate and queue a Continuous Integration run", + "description": "### Duplicates and queues a Continuous Integration Run.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "in": "path", + "description": "Run ID to duplicate and re-run", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_color_collection", - "summary": "Create ColorCollection", - "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "responses": { "200": { - "description": "ColorCollection", + "description": "Duplicate Continuous Integration Run", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ColorCollection" + "$ref": "#/components/schemas/CIRun" } } } }, - "400": { - "description": "Bad Request", + "201": { + "description": "Continuous Integration run info", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/CIRun" } } } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -4691,33 +4938,40 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ColorCollection" - } - } - }, - "description": "ColorCollection", - "required": true - } + "x-looker-rate-limited": true } }, - "/color_collections/custom": { + "/projects/{project_id}/continuous_integration/runs/{run_id}": { "get": { "tags": [ - "ColorCollection" + "Project" ], - "operationId": "color_collections_custom", - "summary": "Get all Custom Color Collections", - "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "get_continuous_integration_run", + "summary": "Get a Continuous Integration run", + "description": "### Gets a Continuous Integration run.\n\n", "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "in": "path", + "description": "Run Id", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "schema": { "type": "string" @@ -4726,14 +4980,11 @@ ], "responses": { "200": { - "description": "ColorCollections", + "description": "Continuous Integration run info", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ColorCollection" - } + "$ref": "#/components/schemas/CIRun" } } } @@ -4772,37 +5023,41 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/color_collections/standard": { - "get": { + }, + "delete": { "tags": [ - "ColorCollection" + "Project" ], - "operationId": "color_collections_standard", - "summary": "Get all Standard Color Collections", - "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "cancel_continuous_integration_run", + "summary": "Cancel a Continuous Integration run", + "description": "### Cancels a Continuous Integration Run.\n\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "run_id", + "in": "path", + "description": "Run Id", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "ColorCollections", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ColorCollection" - } + "type": "string" } } } @@ -4827,6 +5082,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -4843,32 +5108,21 @@ "x-looker-rate-limited": true } }, - "/color_collections/default": { - "put": { + "/cloud_storage": { + "get": { "tags": [ - "ColorCollection" - ], - "operationId": "set_default_color_collection", - "summary": "Set Default Color Collection", - "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", - "parameters": [ - { - "name": "collection_id", - "in": "query", - "description": "ID of color collection to set as default", - "required": true, - "schema": { - "type": "string" - } - } + "Config" ], + "operationId": "cloud_storage_configuration", + "summary": "Get Cloud Storage", + "description": "Get the current Cloud Storage Configuration.\n", "responses": { "200": { - "description": "ColorCollection", + "description": "Current Cloud Storage Configuration", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ColorCollection" + "$ref": "#/components/schemas/BackupConfiguration" } } } @@ -4893,16 +5147,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -4918,20 +5162,20 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "get": { + "patch": { "tags": [ - "ColorCollection" + "Config" ], - "operationId": "default_color_collection", - "summary": "Get Default Color Collection", - "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", + "operationId": "update_cloud_storage_configuration", + "summary": "Update Cloud Storage", + "description": "Update the current Cloud Storage Configuration.\n", "responses": { "200": { - "description": "ColorCollection", + "description": "New state for specified model set.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ColorCollection" + "$ref": "#/components/schemas/BackupConfiguration" } } } @@ -4956,6 +5200,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -4969,27 +5223,29 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackupConfiguration" + } + } + }, + "description": "Options for Cloud Storage Configuration", + "required": true + } } }, - "/color_collections/{collection_id}": { + "/color_collections": { "get": { "tags": [ "ColorCollection" ], - "operationId": "color_collection", - "summary": "Get Color Collection by ID", - "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "all_color_collections", + "summary": "Get all Color Collections", + "description": "### Get an array of all existing Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "Id of Color Collection", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -5002,11 +5258,14 @@ ], "responses": { "200": { - "description": "ColorCollection", + "description": "ColorCollections", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ColorCollection" + "type": "array", + "items": { + "$ref": "#/components/schemas/ColorCollection" + } } } } @@ -5046,24 +5305,13 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ "ColorCollection" ], - "operationId": "update_color_collection", - "summary": "Update Custom Color collection", - "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", - "parameters": [ - { - "name": "collection_id", - "in": "path", - "description": "Id of Custom Color Collection", - "required": true, - "schema": { - "type": "string" - } - } - ], + "operationId": "create_color_collection", + "summary": "Create ColorCollection", + "description": "### Create a custom color collection with the specified information\n\nCreates a new custom color collection object, returning the details, including the created id.\n\n**Update** an existing color collection with [Update Color Collection](#!/ColorCollection/update_color_collection)\n\n**Permanently delete** an existing custom color collection with [Delete Color Collection](#!/ColorCollection/delete_color_collection)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "responses": { "200": { "description": "ColorCollection", @@ -5105,6 +5353,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -5140,20 +5398,22 @@ "description": "ColorCollection", "required": true } - }, - "delete": { + } + }, + "/color_collections/custom": { + "get": { "tags": [ "ColorCollection" ], - "operationId": "delete_color_collection", - "summary": "Delete ColorCollection", - "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "operationId": "color_collections_custom", + "summary": "Get all Custom Color Collections", + "description": "### Get an array of all existing **Custom** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "parameters": [ { - "name": "collection_id", - "in": "path", - "description": "Id of Color Collection", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } @@ -5161,14 +5421,14 @@ ], "responses": { "200": { - "description": "Success" - }, - "204": { - "description": "Successfully deleted.", + "description": "ColorCollections", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/ColorCollection" + } } } } @@ -5183,16 +5443,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -5219,56 +5469,501 @@ "x-looker-rate-limited": true } }, - "/content_favorite/search": { + "/color_collections/standard": { "get": { "tags": [ - "Content" + "ColorCollection" ], - "operationId": "search_content_favorites", - "summary": "Search Favorite Contents", - "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "color_collections_standard", + "summary": "Get all Standard Color Collections", + "description": "### Get an array of all existing **Standard** Color Collections\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", "parameters": [ { - "name": "id", + "name": "fields", "in": "query", - "description": "Match content favorite id(s)", + "description": "Requested fields.", "required": false, "schema": { "type": "string" } - }, - { - "name": "user_id", - "in": "query", - "description": "Match user id(s). To create a list of multiple ids, use commas as separators", - "required": false, - "schema": { - "type": "string" + } + ], + "responses": { + "200": { + "description": "ColorCollections", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } } }, - { - "name": "content_metadata_id", - "in": "query", - "description": "Match content metadata id(s). To create a list of multiple ids, use commas as separators", - "required": false, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "dashboard_id", - "in": "query", - "description": "Match dashboard id(s). To create a list of multiple ids, use commas as separators", - "required": false, - "schema": { - "type": "string" + "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 + } + }, + "/color_collections/default": { + "put": { + "tags": [ + "ColorCollection" + ], + "operationId": "set_default_color_collection", + "summary": "Set Default Color Collection", + "description": "### Set the global default Color Collection by ID\n\nReturns the new specified default Color Collection object.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ { - "name": "look_id", + "name": "collection_id", "in": "query", - "description": "Match look id(s). To create a list of multiple ids, use commas as separators", - "required": false, + "description": "ID of color collection to set as default", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "default_color_collection", + "summary": "Get Default Color Collection", + "description": "### Get the default color collection\n\nUse this to retrieve the default Color Collection.\n\nSet the default color collection with [ColorCollection](#!/ColorCollection/set_default_color_collection)\n", + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "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 + } + }, + "/color_collections/{collection_id}": { + "get": { + "tags": [ + "ColorCollection" + ], + "operationId": "color_collection", + "summary": "Get Color Collection by ID", + "description": "### Get a Color Collection by ID\n\nUse this to retrieve a specific Color Collection.\nGet a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection)\n\nGet all **standard** color collections with [ColorCollection](#!/ColorCollection/color_collections_standard)\n\nGet all **custom** color collections with [ColorCollection](#!/ColorCollection/color_collections_custom)\n\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Color Collection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "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 + }, + "patch": { + "tags": [ + "ColorCollection" + ], + "operationId": "update_color_collection", + "summary": "Update Custom Color collection", + "description": "### Update a custom color collection by id.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Custom Color Collection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ColorCollection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColorCollection" + } + } + } + }, + "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" + } + } + } + }, + "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": { + "$ref": "#/components/schemas/ColorCollection" + } + } + }, + "description": "ColorCollection", + "required": true + } + }, + "delete": { + "tags": [ + "ColorCollection" + ], + "operationId": "delete_color_collection", + "summary": "Delete ColorCollection", + "description": "### Delete a custom color collection by id\n\nThis operation permanently deletes the identified **Custom** color collection.\n\n**Standard** color collections cannot be deleted\n\nBecause multiple color collections can have the same label, they must be deleted by ID, not name.\n**Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors.\n\n", + "parameters": [ + { + "name": "collection_id", + "in": "path", + "description": "Id of Color Collection", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/content_favorite/search": { + "get": { + "tags": [ + "Content" + ], + "operationId": "search_content_favorites", + "summary": "Search Favorite Contents", + "description": "### Search Favorite Content\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "id", + "in": "query", + "description": "Match content favorite id(s)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "query", + "description": "Match user id(s). To create a list of multiple ids, use commas as separators", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Match content metadata id(s). To create a list of multiple ids, use commas as separators", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "dashboard_id", + "in": "query", + "description": "Match dashboard id(s). To create a list of multiple ids, use commas as separators", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "look_id", + "in": "query", + "description": "Match look id(s). To create a list of multiple ids, use commas as separators", + "required": false, "schema": { "type": "string" } @@ -7343,6 +8038,93 @@ } } }, + "/conversations/{conversation_id}/messages/{user_message_id}/responses": { + "get": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "get_conversation_message_responses", + "summary": "Get Agent Responses for User Message", + "description": "### Get Agent Responses for User Message\n\nGet all agent response messages generated for a specific user prompt.\n\nAn agent response often consists of multiple message blocks (such as text explanations,\nvisualizations, and follow-up suggestions). This endpoint returns all response messages\nfollowing the specified user message up to the next user prompt.\n\n", + "parameters": [ + { + "name": "conversation_id", + "in": "path", + "description": "Conversation ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "user_message_id", + "in": "path", + "description": "User Conversation Message ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "agent response messages", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConversationMessage" + } + } + } + } + }, + "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 + } + }, "/conversations/search": { "get": { "tags": [ @@ -7978,21 +8760,41 @@ "x-looker-rate-limited": true } }, - "/custom_welcome_email": { + "/users/{user_id}/credentials_email": { "get": { "tags": [ - "Config" + "User" + ], + "operationId": "user_credentials_email", + "summary": "Get Email/Password Credential", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "custom_welcome_email", - "summary": "Get Custom Welcome Email", - "description": "### Get the current status and content of custom welcome emails\n", "responses": { "200": { - "description": "Custom Welcome Email", + "description": "Email/Password Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomWelcomeEmail" + "$ref": "#/components/schemas/CredentialsEmail" } } } @@ -8007,6 +8809,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -8028,36 +8840,44 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "Config" + "User" ], - "operationId": "update_custom_welcome_email", - "summary": "Update Custom Welcome Email Content", - "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", + "operationId": "create_user_credentials_email", + "summary": "Create Email/Password Credential", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { - "name": "send_test_welcome_email", + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", "in": "query", - "description": "If true a test email with the content from the request will be sent to the current user after saving", + "description": "Requested fields.", "required": false, "schema": { - "type": "boolean" + "type": "string" } } ], "responses": { "200": { - "description": "Custom Welcome Email", + "description": "Email/Password Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomWelcomeEmail" + "$ref": "#/components/schemas/CredentialsEmail" } } } @@ -8072,6 +8892,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -8082,12 +8912,12 @@ } } }, - "422": { - "description": "Validation Error", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -8103,38 +8933,55 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomWelcomeEmail" + "$ref": "#/components/schemas/CredentialsEmail" } } }, - "description": "Custom Welcome Email setting and value to save", + "description": "Email/Password Credential", "required": true } - } - }, - "/custom_welcome_email_test": { - "put": { + }, + "patch": { "tags": [ - "Config" + "User" + ], + "operationId": "update_user_credentials_email", + "summary": "Update Email/Password Credential", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "update_custom_welcome_email_test", - "summary": "Send a test welcome email to the currently logged in user with the supplied content ", - "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", "responses": { "200": { - "description": "Send Test Welcome Email", + "description": "Email/Password Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WelcomeEmailTest" + "$ref": "#/components/schemas/CredentialsEmail" } } } @@ -8149,8 +8996,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -8159,12 +9006,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -8187,44 +9034,39 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WelcomeEmailTest" + "$ref": "#/components/schemas/CredentialsEmail" } } }, - "description": "Subject, header, and Body of the email to be sent.", + "description": "Email/Password Credential", "required": true } - } - }, - "/dashboards": { - "get": { + }, + "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "all_dashboards", - "summary": "Get All Dashboards", - "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", + "operationId": "delete_user_credentials_email", + "summary": "Delete Email/Password Credential", + "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "dashboards", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DashboardBase" - } + "type": "string" } } } @@ -8239,6 +9081,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -8263,21 +9115,52 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/users/{user_id}/credentials_email/password_reset": { "post": { "tags": [ - "Dashboard" + "User" + ], + "operationId": "create_user_credentials_email_password_reset", + "summary": "Create Password Reset Token", + "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "expires", + "in": "query", + "description": "Expiring token.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_dashboard", - "summary": "Create Dashboard", - "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title` and `space_id` are required fields.\n`Space_id` must contain the id of an existing space.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", "responses": { "200": { - "description": "Dashboard", + "description": "email/password credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "$ref": "#/components/schemas/CredentialsEmail" } } } @@ -8292,8 +9175,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -8302,8 +9185,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -8312,16 +9195,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -8335,133 +9208,23 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dashboard" - } - } - }, - "description": "Dashboard", - "required": true - } + "x-looker-rate-limited": true } }, - "/dashboards/search": { - "get": { + "/users/{user_id}/credentials_email/send_password_reset": { + "post": { "tags": [ - "Dashboard" + "User" ], - "operationId": "search_dashboards", - "summary": "Search Dashboards", - "description": "### Search Dashboards\n\nReturns an array of **user-defined dashboard** objects that match the specified search criteria.\nNote, [search_dashboards()](#!/Dashboard/search_dashboards) does not return LookML dashboard objects.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", + "operationId": "send_user_credentials_email_password_reset", + "summary": "Send Password Reset Token", + "description": "### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ - { - "name": "id", - "in": "query", - "description": "Match dashboard id.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "slug", - "in": "query", - "description": "Match dashboard slug.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "title", - "in": "query", - "description": "Match Dashboard title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "description", - "in": "query", - "description": "Match Dashboard description.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "content_favorite_id", - "in": "query", - "description": "Filter on a content favorite id.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "folder_id", - "in": "query", - "description": "Filter on a particular folder.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "deleted", - "in": "query", - "description": "Filter on dashboards deleted status.", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "user_id", - "in": "query", - "description": "Filter on dashboards created by a particular user.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "view_count", - "in": "query", - "description": "Filter on a particular value of view_count", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "content_metadata_id", - "in": "query", - "description": "Filter on a content favorite id.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "curate", - "in": "query", - "description": "Exclude items that exist only in personal spaces other than the users", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "last_viewed_at", - "in": "query", - "description": "Select dashboards based on when they were last viewed", - "required": false, + "in": "path", + "description": "Id of user", + "required": true, "schema": { "type": "string" } @@ -8474,87 +9237,15 @@ "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": "One or more fields to sort by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :view_count, :favorite_count, :slug, :content_favorite_id, :content_metadata_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :certification_status]", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "not_owned_by", - "in": "query", - "description": "Filter out the dashboards owned by the user passed at the :user_id params", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "dashboards", + "description": "email/password credential", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Dashboard" - } + "$ref": "#/components/schemas/CredentialsEmail" } } } @@ -8569,6 +9260,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -8595,66 +9296,57 @@ "x-looker-rate-limited": true } }, - "/dashboards/{lookml_dashboard_id}/import/{space_id}": { - "post": { + "/users/{user_id}/credentials_google": { + "get": { "tags": [ - "Dashboard" + "User" ], - "operationId": "import_lookml_dashboard", - "summary": "Import LookML Dashboard", - "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", + "operationId": "user_credentials_google", + "summary": "Get Google Auth Credential", + "description": "### Google authentication login information for the specified user.\n", "parameters": [ { - "name": "lookml_dashboard_id", - "in": "path", - "description": "Id of LookML dashboard", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "space_id", + "name": "user_id", "in": "path", - "description": "Id of space to import the dashboard to", + "description": "Id of user", "required": true, "schema": { "type": "string" } }, { - "name": "raw_locale", + "name": "fields", "in": "query", - "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", + "description": "Requested fields.", "required": false, "schema": { - "type": "boolean" + "type": "string" } } ], "responses": { "200": { - "description": "Dashboard", + "description": "Google Auth Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "$ref": "#/components/schemas/CredentialsGoogle" } } } }, - "201": { - "description": "dashboard", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "$ref": "#/components/schemas/Error" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -8673,8 +9365,52 @@ } } }, - "409": { - "description": "Resource Already Exists", + "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 + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_credentials_google", + "summary": "Delete Google Auth Credential", + "description": "### Delete Google authentication login information for the specified user.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -8683,12 +9419,22 @@ } } }, - "422": { - "description": "Validation Error", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" } } } @@ -8706,73 +9452,44 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dashboard" - } - } - }, - "description": "Dashboard", - "required": false - } + "x-looker-rate-limited": true } }, - "/dashboards/{lookml_dashboard_id}/sync": { - "patch": { + "/users/{user_id}/credentials_looker_openid": { + "get": { "tags": [ - "Dashboard" + "User" ], - "operationId": "sync_lookml_dashboard", - "summary": "Sync LookML Dashboard", - "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nIf the dashboard_ids parameter is specified, only the dashboards with the specified ids will be updated.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", + "operationId": "user_credentials_looker_openid", + "summary": "Get Looker OpenId Credential", + "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "lookml_dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of LookML dashboard, in the form 'model::dashboardname'", + "description": "Id of user", "required": true, "schema": { "type": "string" } }, { - "name": "raw_locale", - "in": "query", - "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "dashboard_ids", + "name": "fields", "in": "query", - "description": "An array of UDD dashboard IDs to sync. If not specified, all UDD dashboards will be synced.", + "description": "Requested fields.", "required": false, - "style": "simple", - "explode": false, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } } ], "responses": { "200": { - "description": "Ids of all the dashboards that were updated by this operation", + "description": "Looker OpenId Credential", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } + "$ref": "#/components/schemas/CredentialsLookerOpenid" } } } @@ -8787,8 +9504,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -8797,12 +9514,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -8821,21 +9538,19 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/{dashboard_id}": { + }, "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "delete_dashboard", - "summary": "Delete Dashboard", - "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", + "operationId": "delete_user_credentials_looker_openid", + "summary": "Delete Looker OpenId Credential", + "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "schema": { "type": "string" @@ -8863,8 +9578,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -8873,8 +9588,8 @@ } } }, - "405": { - "description": "Resource Can't Be Modified", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -8897,32 +9612,43 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/users/{user_id}/credentials_saml": { + "get": { "tags": [ - "Dashboard" + "User" ], - "operationId": "update_dashboard", - "summary": "Update Dashboard", - "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", + "operationId": "user_credentials_saml", + "summary": "Get Saml Auth Credential", + "description": "### Saml authentication login information for the specified user.\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Dashboard", + "description": "Saml Auth Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "$ref": "#/components/schemas/CredentialsSaml" } } } @@ -8937,8 +9663,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -8947,22 +9673,12 @@ } } }, - "405": { - "description": "Resource Can't Be Modified", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -8980,53 +9696,33 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dashboard" - } - } - }, - "description": "Dashboard", - "required": true - } + "x-looker-rate-limited": true }, - "get": { + "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "dashboard", - "summary": "Get Dashboard", - "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", + "operationId": "delete_user_credentials_saml", + "summary": "Delete Saml Auth Credential", + "description": "### Delete Saml authentication login information for the specified user.\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { - "200": { - "description": "Dashboard", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "type": "string" } } } @@ -9041,6 +9737,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -9067,32 +9773,41 @@ "x-looker-rate-limited": true } }, - "/dashboards/aggregate_table_lookml/{dashboard_id}": { + "/users/{user_id}/credentials_totp": { "get": { "tags": [ - "Dashboard" + "User" ], - "operationId": "dashboard_aggregate_table_lookml", - "summary": "Get Aggregate Table LookML for a dashboard", - "description": "### Get Aggregate Table LookML for Each Query on a Dashboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", + "operationId": "user_credentials_totp", + "summary": "Get Two-Factor Credential", + "description": "### Get two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "JSON for Aggregate Table LookML", + "description": "Two-Factor Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardAggregateTableLookml" + "$ref": "#/components/schemas/CredentialsTotp" } } } @@ -9107,6 +9822,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -9131,40 +9856,20 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/lookml/search": { - "get": { + }, + "post": { "tags": [ - "Dashboard" + "User" ], - "operationId": "search_lookml_dashboards", - "summary": "Search LookML Dashboards", - "description": "### Search LookML Dashboards\n\nReturns an array of **LookML Dashboard** objects that match the specified search criteria.\nNote, this only returns LookML Dashboards in production.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml)\n", + "operationId": "create_user_credentials_totp", + "summary": "Create Two-Factor Credential", + "description": "### Create two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "folder_id", - "in": "query", - "description": "Filter on a particular folder.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "title", - "in": "query", - "description": "Match LookML Dashboard title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "content_favorite_id", - "in": "query", - "description": "Filter on a content favorite id.", - "required": false, + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, "schema": { "type": "string" } @@ -9177,44 +9882,15 @@ "schema": { "type": "string" } - }, - { - "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": "One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "dashboards", + "description": "Two-Factor Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLookml" + "$ref": "#/components/schemas/CredentialsTotp" } } } @@ -9229,6 +9905,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -9239,6 +9925,26 @@ } } }, + "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": { @@ -9252,22 +9958,31 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/dashboards/lookml/{dashboard_id}": { - "get": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsTotp" + } + } + }, + "description": "Two-Factor Credential", + "required": false + } + }, + "delete": { "tags": [ - "Dashboard" + "User" ], - "operationId": "dashboard_lookml", - "summary": "Get lookml of a UDD", - "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", + "operationId": "delete_user_credentials_totp", + "summary": "Delete Two-Factor Credential", + "description": "### Delete two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "dashboard_id", + "name": "user_id", "in": "path", - "description": "Id of dashboard", + "description": "Id of user", "required": true, "schema": { "type": "string" @@ -9275,12 +9990,12 @@ } ], "responses": { - "200": { - "description": "json of dashboard", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLookml" + "type": "string" } } } @@ -9295,6 +10010,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -9321,51 +10046,21 @@ "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}/move": { - "patch": { + "/custom_welcome_email": { + "get": { "tags": [ - "Dashboard" - ], - "operationId": "move_dashboard", - "summary": "Move Dashboard", - "description": "### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", - "parameters": [ - { - "name": "dashboard_id", - "in": "path", - "description": "Dashboard id to move.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "folder_id", - "in": "query", - "description": "Folder id to move to.", - "required": true, - "schema": { - "type": "string" - } - } + "Config" ], + "operationId": "custom_welcome_email", + "summary": "Get Custom Welcome Email", + "description": "### Get the current status and content of custom welcome emails\n", "responses": { "200": { - "description": "Dashboard", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dashboard" - } - } - } - }, - "201": { - "description": "dashboard", + "description": "Custom Welcome Email", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "$ref": "#/components/schemas/CustomWelcomeEmail" } } } @@ -9390,16 +10085,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -9411,26 +10096,36 @@ } } }, - "x-looker-status": "stable", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/lookml": { - "post": { + }, + "patch": { "tags": [ - "Dashboard" + "Config" + ], + "operationId": "update_custom_welcome_email", + "summary": "Update Custom Welcome Email Content", + "description": "Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user.\n", + "parameters": [ + { + "name": "send_test_welcome_email", + "in": "query", + "description": "If true a test email with the content from the request will be sent to the current user after saving", + "required": false, + "schema": { + "type": "boolean" + } + } ], - "operationId": "import_dashboard_from_lookml", - "summary": "Import Dashboard from LookML", - "description": "### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard.\n\nIf a dashboard exists with the YAML-defined \"preferred_slug\", the new dashboard will overwrite it. Otherwise, a new\ndashboard will be created. Note that when a dashboard is overwritten, alerts will not be maintained.\n\nIf a folder_id is specified: new dashboards will be placed in that folder, and overwritten dashboards will be moved to it\nIf the folder_id isn't specified: new dashboards will be placed in the caller's personal folder, and overwritten dashboards\nwill remain where they were\n\nLookML must contain valid LookML YAML code. It's recommended to use the LookML format returned\nfrom [dashboard_lookml()](#!/Dashboard/dashboard_lookml) as the input LookML (newlines replaced with \n).\n\nNote that the created dashboard is not linked to any LookML Dashboard,\ni.e. [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard) will not update dashboards created by this method.\n", "responses": { "200": { - "description": "dashboard", + "description": "Custom Welcome Email", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "$ref": "#/components/schemas/CustomWelcomeEmail" } } } @@ -9455,16 +10150,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -9486,37 +10171,38 @@ } } }, - "x-looker-status": "stable", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLookml" + "$ref": "#/components/schemas/CustomWelcomeEmail" } } }, - "description": "DashboardLookML", + "description": "Custom Welcome Email setting and value to save", "required": true } } }, - "/dashboards/from_lookml": { - "post": { + "/custom_welcome_email_test": { + "put": { "tags": [ - "Dashboard" + "Config" ], - "operationId": "create_dashboard_from_lookml", - "summary": "Create Dashboard from LookML", - "description": "# DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml)\n", + "operationId": "update_custom_welcome_email_test", + "summary": "Send a test welcome email to the currently logged in user with the supplied content ", + "description": "Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user.\n", "responses": { "200": { - "description": "dashboard", + "description": "Send Test Welcome Email", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "$ref": "#/components/schemas/WelcomeEmailTest" } } } @@ -9541,16 +10227,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -9579,37 +10255,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLookml" + "$ref": "#/components/schemas/WelcomeEmailTest" } } }, - "description": "DashboardLookML", + "description": "Subject, header, and Body of the email to be sent.", "required": true } } }, - "/dashboards/{dashboard_id}/copy": { - "post": { + "/dashboards": { + "get": { "tags": [ "Dashboard" ], - "operationId": "copy_dashboard", - "summary": "Copy Dashboard", - "description": "### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n", + "operationId": "all_dashboards", + "summary": "Get All Dashboards", + "description": "### Get information about all active dashboards.\n\nReturns an array of **abbreviated dashboard objects**. Dashboards marked as deleted are excluded from this list.\n\nGet the **full details** of a specific dashboard by id with [dashboard()](#!/Dashboard/dashboard)\n\nFind **deleted dashboards** with [search_dashboards()](#!/Dashboard/search_dashboards)\n", "parameters": [ { - "name": "dashboard_id", - "in": "path", - "description": "Dashboard id to copy.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "folder_id", + "name": "fields", "in": "query", - "description": "Folder id to copy to.", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -9618,21 +10285,14 @@ ], "responses": { "200": { - "description": "Dashboard", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dashboard" - } - } - } - }, - "201": { - "description": "dashboard", + "description": "dashboards", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Dashboard" + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardBase" + } } } } @@ -9657,26 +10317,6 @@ } } }, - "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": { @@ -9691,30 +10331,17 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboards/{dashboard_id}/certification": { - "patch": { + }, + "post": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_certification", - "summary": "Update Dashboard Certification", - "description": "### Update dashboard certification\n", - "parameters": [ - { - "name": "dashboard_id", - "in": "path", - "description": "Dashboard id to update certification.", - "required": true, - "schema": { - "type": "string" - } - } - ], + "operationId": "create_dashboard", + "summary": "Create Dashboard", + "description": "### Create a new dashboard\n\nCreates a new dashboard object and returns the details of the newly created dashboard.\n\n`Title` and `space_id` are required fields.\n`Space_id` must contain the id of an existing space.\nA dashboard's `title` must be unique within the space in which it resides.\n\nIf you receive a 422 error response when creating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n\nYou can **update** an existing dashboard with [update_dashboard()](#!/Dashboard/update_dashboard)\n\nYou can **permanently delete** an existing dashboard with [delete_dashboard()](#!/Dashboard/delete_dashboard)\n", "responses": { "200": { - "description": "dashboards", + "description": "Dashboard", "content": { "application/json": { "schema": { @@ -9743,6 +10370,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -9764,154 +10401,139 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Certification" + "$ref": "#/components/schemas/Dashboard" } } }, - "description": "Certification Data", + "description": "Dashboard", "required": true } } }, - "/dashboards/lookml/{dashboard_id}/certification": { - "patch": { + "/dashboards/search": { + "get": { "tags": [ "Dashboard" ], - "operationId": "update_lookml_certification", - "summary": "Update LookML Dashboard Certification", - "description": "### Update LookML dashboard certification\n", + "operationId": "search_dashboards", + "summary": "Search Dashboards", + "description": "### Search Dashboards\n\nReturns an array of **user-defined dashboard** objects that match the specified search criteria.\nNote, [search_dashboards()](#!/Dashboard/search_dashboards) does not return LookML dashboard objects.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single dashboard** by id with [dashboard()](#!/Dashboard/dashboard)\n", "parameters": [ { - "name": "dashboard_id", - "in": "path", - "description": "LookML Dashboard id to update certification.", - "required": true, + "name": "id", + "in": "query", + "description": "Match dashboard id.", + "required": false, "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "dashboards", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Dashboard" - } - } - } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "slug", + "in": "query", + "description": "Match dashboard slug.", + "required": false, + "schema": { + "type": "string" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "title", + "in": "query", + "description": "Match Dashboard title.", + "required": false, + "schema": { + "type": "string" } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } + { + "name": "description", + "in": "query", + "description": "Match Dashboard description.", + "required": false, + "schema": { + "type": "string" } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "content_favorite_id", + "in": "query", + "description": "Filter on a content favorite id.", + "required": false, + "schema": { + "type": "string" } - } - }, - "x-looker-status": "beta", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Certification" - } + }, + { + "name": "folder_id", + "in": "query", + "description": "Filter on a particular folder.", + "required": false, + "schema": { + "type": "string" } }, - "description": "Certification Data", - "required": true - } - } - }, - "/dashboard_elements/search": { - "get": { - "tags": [ - "Dashboard" - ], - "operationId": "search_dashboard_elements", - "summary": "Search Dashboard Elements", - "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", - "parameters": [ { - "name": "dashboard_id", + "name": "deleted", "in": "query", - "description": "Select elements that refer to a given dashboard id", + "description": "Filter on dashboards deleted status.", "required": false, "schema": { "type": "string" } }, { - "name": "look_id", + "name": "user_id", "in": "query", - "description": "Select elements that refer to a given look id", + "description": "Filter on dashboards created by a particular user.", "required": false, "schema": { "type": "string" } }, { - "name": "title", + "name": "view_count", "in": "query", - "description": "Match the title of element", + "description": "Filter on a particular value of view_count", "required": false, "schema": { "type": "string" } }, { - "name": "deleted", + "name": "content_metadata_id", "in": "query", - "description": "Select soft-deleted dashboard elements", + "description": "Filter on a content favorite id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "curate", + "in": "query", + "description": "Exclude items that exist only in personal spaces other than the users", "required": false, "schema": { "type": "boolean" } }, + { + "name": "last_viewed_at", + "in": "query", + "description": "Select dashboards based on when they were last viewed", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -9921,6 +10543,57 @@ "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": "One or more fields to sort by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :view_count, :favorite_count, :slug, :content_favorite_id, :content_metadata_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :certification_status]", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "filter_or", "in": "query", @@ -9931,24 +10604,24 @@ } }, { - "name": "sorts", + "name": "not_owned_by", "in": "query", - "description": "Fields to sort by. Sortable fields: [:look_id, :dashboard_id, :deleted, :title]", + "description": "Filter out the dashboards owned by the user passed at the :user_id params", "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { "200": { - "description": "Dashboard elements", + "description": "dashboards", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DashboardElement" + "$ref": "#/components/schemas/Dashboard" } } } @@ -9990,57 +10663,66 @@ "x-looker-rate-limited": true } }, - "/dashboard_elements/{dashboard_element_id}": { - "get": { + "/dashboards/{lookml_dashboard_id}/import/{space_id}": { + "post": { "tags": [ "Dashboard" ], - "operationId": "dashboard_element", - "summary": "Get DashboardElement", - "description": "### Get information about the dashboard element with a specific id.", + "operationId": "import_lookml_dashboard", + "summary": "Import LookML Dashboard", + "description": "### Import a LookML dashboard to a space as a UDD\nCreates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard\nand places it in the space specified. The created UDD will have a lookml_link_id which links to the original LookML dashboard.\n\nTo give the imported dashboard specify a (e.g. title: \"my title\") in the body of your request, otherwise the imported\ndashboard will have the same title as the original LookML dashboard.\n\nFor this operation to succeed the user must have permission to see the LookML dashboard in question, and have permission to\ncreate content in the space the dashboard is being imported to.\n\n**Sync** a linked UDD with [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard)\n**Unlink** a linked UDD by setting lookml_link_id to null with [update_dashboard()](#!/Dashboard/update_dashboard)\n", "parameters": [ { - "name": "dashboard_element_id", + "name": "lookml_dashboard_id", "in": "path", - "description": "Id of dashboard element", + "description": "Id of LookML dashboard", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "space_id", + "in": "path", + "description": "Id of space to import the dashboard to", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "raw_locale", "in": "query", - "description": "Requested fields.", + "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { "200": { - "description": "DashboardElement", + "description": "Dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardElement" + "$ref": "#/components/schemas/Dashboard" } } } }, - "400": { - "description": "Bad Request", + "201": { + "description": "dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/Dashboard" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -10049,8 +10731,8 @@ } } }, - "429": { - "description": "Too Many Requests", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -10058,43 +10740,9 @@ } } } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "delete": { - "tags": [ - "Dashboard" - ], - "operationId": "delete_dashboard_element", - "summary": "Delete DashboardElement", - "description": "### Delete a dashboard element with a specific id.", - "parameters": [ - { - "name": "dashboard_element_id", - "in": "path", - "description": "Id of dashboard element", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Successfully deleted.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } }, - "400": { - "description": "Bad Request", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -10103,12 +10751,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -10126,42 +10774,73 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + }, + "description": "Dashboard", + "required": false + } + } + }, + "/dashboards/{lookml_dashboard_id}/sync": { "patch": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_element", - "summary": "Update DashboardElement", - "description": "### Update the dashboard element with a specific id.", + "operationId": "sync_lookml_dashboard", + "summary": "Sync LookML Dashboard", + "description": "### Update all linked dashboards to match the specified LookML dashboard.\n\nAny UDD (a dashboard which exists in the Looker database rather than as a LookML file) which has a `lookml_link_id`\nproperty value referring to a LookML dashboard's id (model::dashboardname) will be updated so that it matches the current state of the LookML dashboard.\n\nIf the dashboard_ids parameter is specified, only the dashboards with the specified ids will be updated.\n\nFor this operation to succeed the user must have permission to view the LookML dashboard, and only linked dashboards\nthat the user has permission to update will be synced.\n\nTo **link** or **unlink** a UDD set the `lookml_link_id` property with [update_dashboard()](#!/Dashboard/update_dashboard)\n", "parameters": [ { - "name": "dashboard_element_id", + "name": "lookml_dashboard_id", "in": "path", - "description": "Id of dashboard element", + "description": "Id of LookML dashboard, in the form 'model::dashboardname'", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "raw_locale", "in": "query", - "description": "Requested fields.", + "description": "If true, and this dashboard is localized, export it with the raw keys, not localized.", "required": false, "schema": { - "type": "string" + "type": "boolean" + } + }, + { + "name": "dashboard_ids", + "in": "query", + "description": "An array of UDD dashboard IDs to sync. If not specified, all UDD dashboards will be synced.", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "DashboardElement", + "description": "Ids of all the dashboards that were updated by this operation", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardElement" + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } } } } @@ -10209,28 +10888,17 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardElement" - } - } - }, - "description": "DashboardElement", - "required": true - } + "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}/dashboard_elements": { - "get": { + "/dashboards/{dashboard_id}": { + "delete": { "tags": [ "Dashboard" ], - "operationId": "dashboard_dashboard_elements", - "summary": "Get All DashboardElements", - "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", + "operationId": "delete_dashboard", + "summary": "Delete Dashboard", + "description": "### Delete the dashboard with the specified id\n\nPermanently **deletes** a dashboard. (The dashboard cannot be recovered after this operation.)\n\n\"Soft\" delete or hide a dashboard by setting its `deleted` status to `True` with [update_dashboard()](#!/Dashboard/update_dashboard).\n\nNote: When a dashboard is deleted in the UI, it is soft deleted. Use this API call to permanently remove it, if desired.\n", "parameters": [ { "name": "dashboard_id", @@ -10240,27 +10908,15 @@ "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { - "200": { - "description": "DashboardElement", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DashboardElement" - } + "type": "string" } } } @@ -10285,6 +10941,16 @@ } } }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -10299,43 +10965,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboard_elements": { - "post": { + }, + "patch": { "tags": [ "Dashboard" ], - "operationId": "create_dashboard_element", - "summary": "Create DashboardElement", - "description": "### Create a dashboard element on the dashboard with a specific id.", + "operationId": "update_dashboard", + "summary": "Update Dashboard", + "description": "### Update a dashboard\n\nYou can use this function to change the string and integer properties of\na dashboard. Nested objects such as filters, dashboard elements, or dashboard layout components\ncannot be modified by this function - use the update functions for the respective\nnested object types (like [update_dashboard_filter()](#!/Dashboard/update_dashboard_filter) to change a filter)\nto modify nested objects referenced by a dashboard.\n\nIf you receive a 422 error response when updating a dashboard, be sure to look at the\nresponse body for information about exactly which fields are missing or contain invalid data.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, "schema": { "type": "string" } - }, - { - "name": "apply_filters", - "in": "query", - "description": "Apply relevant filters on dashboard to this tile", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "DashboardElement", + "description": "Dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardElement" + "$ref": "#/components/schemas/Dashboard" } } } @@ -10360,8 +11015,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "405": { + "description": "Resource Can't Be Modified", "content": { "application/json": { "schema": { @@ -10398,28 +11053,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardElement" + "$ref": "#/components/schemas/Dashboard" } } }, - "description": "DashboardElement", + "description": "Dashboard", "required": true } - } - }, - "/dashboard_filters/{dashboard_filter_id}": { + }, "get": { "tags": [ "Dashboard" ], - "operationId": "dashboard_filter", - "summary": "Get Dashboard Filter", - "description": "### Get information about the dashboard filters with a specific id.", + "operationId": "dashboard", + "summary": "Get Dashboard", + "description": "### Get information about a dashboard\n\nReturns the full details of the identified dashboard object\n\nGet a **summary list** of all active dashboards with [all_dashboards()](#!/Dashboard/all_dashboards)\n\nYou can **Search** for dashboards with [search_dashboards()](#!/Dashboard/search_dashboards)\n", "parameters": [ { - "name": "dashboard_filter_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard filters", + "description": "Id of dashboard", "required": true, "schema": { "type": "string" @@ -10437,11 +11090,11 @@ ], "responses": { "200": { - "description": "Dashboard Filter", + "description": "Dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardFilter" + "$ref": "#/components/schemas/Dashboard" } } } @@ -10480,19 +11133,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/dashboards/{dashboard_id}/images/{image_slug}": { + "get": { "tags": [ "Dashboard" ], - "operationId": "delete_dashboard_filter", - "summary": "Delete Dashboard Filter", - "description": "### Delete a dashboard filter with a specific id.", + "operationId": "get_dashboard_image", + "summary": "Get Dashboard Image", + "description": "### Get Dashboard Image\n\nReturns the image content for a dashboard element.\n", "parameters": [ { - "name": "dashboard_filter_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard filter", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "image_slug", + "in": "path", + "description": "Slug of image", "required": true, "schema": { "type": "string" @@ -10500,12 +11164,31 @@ } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Image content", "content": { - "application/json": { + "image/svg+xml": { "schema": { - "type": "string" + "type": "string", + "format": "binary" + } + }, + "image/png": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/jpeg": { + "schema": { + "type": "string", + "format": "binary" + } + }, + "image/gif": { + "schema": { + "type": "string", + "format": "binary" } } } @@ -10513,72 +11196,135 @@ "400": { "description": "Bad Request", "content": { - "application/json": { + "image/svg+xml": { "schema": { "$ref": "#/components/schemas/Error" } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/gif": { "schema": { "$ref": "#/components/schemas/Error" } } } }, - "429": { - "description": "Too Many Requests", + "403": { + "description": "Permission Denied", "content": { - "application/json": { + "image/svg+xml": { "schema": { "$ref": "#/components/schemas/Error" } - } - } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "patch": { + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/gif": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "image/svg+xml": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/gif": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "image/svg+xml": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/gif": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/dashboards/aggregate_table_lookml/{dashboard_id}": { + "get": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_filter", - "summary": "Update Dashboard Filter", - "description": "### Update the dashboard filter with a specific id.", + "operationId": "dashboard_aggregate_table_lookml", + "summary": "Get Aggregate Table LookML for a dashboard", + "description": "### Get Aggregate Table LookML for Each Query on a Dashboard\n\nReturns a JSON object that contains the dashboard id and Aggregate Table lookml\n\n", "parameters": [ { - "name": "dashboard_filter_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard filter", + "description": "Id of dashboard", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Dashboard Filter", + "description": "JSON for Aggregate Table LookML", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardFilter" + "$ref": "#/components/schemas/DashboardAggregateTableLookml" } } } @@ -10603,16 +11349,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -10626,34 +11362,41 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardFilter" - } - } - }, - "description": "Dashboard Filter", - "required": true - } + "x-looker-rate-limited": true } }, - "/dashboards/{dashboard_id}/dashboard_filters": { + "/dashboards/lookml/search": { "get": { "tags": [ "Dashboard" ], - "operationId": "dashboard_dashboard_filters", - "summary": "Get All Dashboard Filters", - "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", + "operationId": "search_lookml_dashboards", + "summary": "Search LookML Dashboards", + "description": "### Search LookML Dashboards\n\nReturns an array of **LookML Dashboard** objects that match the specified search criteria.\nNote, this only returns LookML Dashboards in production.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n**Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title.\n\nThe parameters `limit`, and `offset` are recommended for fetching results in page-size chunks.\n\nGet a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml)\n", "parameters": [ { - "name": "dashboard_id", - "in": "path", - "description": "Id of dashboard", - "required": true, + "name": "folder_id", + "in": "query", + "description": "Filter on a particular folder.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "title", + "in": "query", + "description": "Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "content_favorite_id", + "in": "query", + "description": "Filter on a content favorite id.", + "required": false, "schema": { "type": "string" } @@ -10666,18 +11409,44 @@ "schema": { "type": "string" } + }, + { + "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": "One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Dashboard Filter", + "description": "dashboards", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DashboardFilter" - } + "$ref": "#/components/schemas/DashboardLookml" } } } @@ -10718,20 +11487,20 @@ "x-looker-rate-limited": true } }, - "/dashboard_filters": { - "post": { + "/dashboards/lookml/{dashboard_id}": { + "get": { "tags": [ "Dashboard" ], - "operationId": "create_dashboard_filter", - "summary": "Create Dashboard Filter", - "description": "### Create a dashboard filter on the dashboard with a specific id.", + "operationId": "dashboard_lookml", + "summary": "Get lookml of a UDD", + "description": "### Get lookml of a UDD\n\nReturns a JSON object that contains the dashboard id and the full lookml\n\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, "schema": { "type": "string" } @@ -10739,11 +11508,11 @@ ], "responses": { "200": { - "description": "Dashboard Filter", + "description": "json of dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardFilter" + "$ref": "#/components/schemas/DashboardLookml" } } } @@ -10768,26 +11537,6 @@ } } }, - "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": { @@ -10801,42 +11550,40 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateDashboardFilter" - } - } - }, - "description": "Dashboard Filter", - "required": true - } + "x-looker-rate-limited": true } }, - "/dashboard_layout_components/{dashboard_layout_component_id}": { - "get": { + "/dashboards/{dashboard_id}/move": { + "patch": { "tags": [ "Dashboard" ], - "operationId": "dashboard_layout_component", - "summary": "Get DashboardLayoutComponent", - "description": "### Get information about the dashboard elements with a specific id.", + "operationId": "move_dashboard", + "summary": "Move Dashboard", + "description": "### Move an existing dashboard\n\nMoves a dashboard to a specified folder, and returns the moved dashboard.\n\n`dashboard_id` and `folder_id` are required.\n`dashboard_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", "parameters": [ { - "name": "dashboard_layout_component_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard layout component", + "description": "Dashboard id to move.", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "folder_id", "in": "query", - "description": "Requested fields.", + "description": "Folder id to move to.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "project_name", + "in": "query", + "description": "LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects.", "required": false, "schema": { "type": "string" @@ -10845,11 +11592,21 @@ ], "responses": { "200": { - "description": "DashboardLayoutComponent", + "description": "Dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLayoutComponent" + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "201": { + "description": "dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" } } } @@ -10874,6 +11631,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -10888,41 +11655,23 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/dashboards/lookml": { + "post": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_layout_component", - "summary": "Update DashboardLayoutComponent", - "description": "### Update the dashboard element with a specific id.", - "parameters": [ - { - "name": "dashboard_layout_component_id", - "in": "path", - "description": "Id of dashboard layout component", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } - ], + "operationId": "import_dashboard_from_lookml", + "summary": "Import Dashboard from LookML", + "description": "### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard.\n\nIf a dashboard exists with the YAML-defined \"preferred_slug\", the new dashboard will overwrite it. Otherwise, a new\ndashboard will be created. Note that when a dashboard is overwritten, alerts will not be maintained.\n\nIf a folder_id is specified: new dashboards will be placed in that folder, and overwritten dashboards will be moved to it\nIf the folder_id isn't specified: new dashboards will be placed in the caller's personal folder, and overwritten dashboards\nwill remain where they were\n\nLookML must contain valid LookML YAML code. It's recommended to use the LookML format returned\nfrom [dashboard_lookml()](#!/Dashboard/dashboard_lookml) as the input LookML (newlines replaced with \n).\n\nNote that the created dashboard is not linked to any LookML Dashboard,\ni.e. [sync_lookml_dashboard()](#!/Dashboard/sync_lookml_dashboard) will not update dashboards created by this method.\n", "responses": { "200": { - "description": "DashboardLayoutComponent", + "description": "dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLayoutComponent" + "$ref": "#/components/schemas/Dashboard" } } } @@ -10947,6 +11696,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -10975,53 +11734,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLayoutComponent" + "$ref": "#/components/schemas/DashboardLookml" } } }, - "description": "DashboardLayoutComponent", + "description": "DashboardLookML", "required": true } } }, - "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { - "get": { + "/dashboards/from_lookml": { + "post": { "tags": [ "Dashboard" ], - "operationId": "dashboard_layout_dashboard_layout_components", - "summary": "Get All DashboardLayoutComponents", - "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", - "parameters": [ - { - "name": "dashboard_layout_id", - "in": "path", - "description": "Id of dashboard layout component", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } - ], + "operationId": "create_dashboard_from_lookml", + "summary": "Create Dashboard from LookML", + "description": "# DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml)\n", "responses": { "200": { - "description": "DashboardLayoutComponent", + "description": "dashboard", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DashboardLayoutComponent" - } + "$ref": "#/components/schemas/Dashboard" } } } @@ -11046,6 +11782,26 @@ } } }, + "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": { @@ -11059,31 +11815,42 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLookml" + } + } + }, + "description": "DashboardLookML", + "required": true + } } }, - "/dashboard_layouts/{dashboard_layout_id}": { - "get": { + "/dashboards/{dashboard_id}/copy": { + "post": { "tags": [ "Dashboard" ], - "operationId": "dashboard_layout", - "summary": "Get DashboardLayout", - "description": "### Get information about the dashboard layouts with a specific id.", + "operationId": "copy_dashboard", + "summary": "Copy Dashboard", + "description": "### Copy an existing dashboard\n\nCreates a copy of an existing dashboard, in a specified folder, and returns the copied dashboard.\n\n`dashboard_id` is required, `dashboard_id` and `folder_id` must already exist if specified.\n`folder_id` will default to the existing folder.\n\nIf a dashboard with the same title already exists in the target folder, the copy will have '(copy)'\n or '(copy <# of copies>)' appended.\n", "parameters": [ { - "name": "dashboard_layout_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard layouts", + "description": "Dashboard id to copy.", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "folder_id", "in": "query", - "description": "Requested fields.", + "description": "Folder id to copy to.", "required": false, "schema": { "type": "string" @@ -11092,11 +11859,21 @@ ], "responses": { "200": { - "description": "DashboardLayout", + "description": "Dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLayout" + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "201": { + "description": "dashboard", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" } } } @@ -11121,6 +11898,26 @@ } } }, + "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": { @@ -11135,19 +11932,21 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/dashboards/{dashboard_id}/certification": { + "patch": { "tags": [ "Dashboard" ], - "operationId": "delete_dashboard_layout", - "summary": "Delete DashboardLayout", - "description": "### Delete a dashboard layout with a specific id.", + "operationId": "update_dashboard_certification", + "summary": "Update Dashboard Certification", + "description": "### Update dashboard certification\n", "parameters": [ { - "name": "dashboard_layout_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard layout", + "description": "Dashboard id to update certification.", "required": true, "schema": { "type": "string" @@ -11155,12 +11954,12 @@ } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "dashboards", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Dashboard" } } } @@ -11206,44 +12005,48 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Certification" + } + } + }, + "description": "Certification Data", + "required": true + } + } + }, + "/dashboards/lookml/{dashboard_id}/certification": { "patch": { "tags": [ "Dashboard" ], - "operationId": "update_dashboard_layout", - "summary": "Update DashboardLayout", - "description": "### Update the dashboard layout with a specific id.", + "operationId": "update_lookml_certification", + "summary": "Update LookML Dashboard Certification", + "description": "### Update LookML dashboard certification\n", "parameters": [ { - "name": "dashboard_layout_id", + "name": "dashboard_id", "in": "path", - "description": "Id of dashboard layout", + "description": "LookML Dashboard id to update certification.", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "DashboardLayout", + "description": "dashboards", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLayout" + "$ref": "#/components/schemas/Dashboard" } } } @@ -11289,40 +12092,67 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLayout" + "$ref": "#/components/schemas/Certification" } } }, - "description": "DashboardLayout", + "description": "Certification Data", "required": true } } }, - "/dashboards/{dashboard_id}/dashboard_layouts": { + "/dashboard_elements/search": { "get": { "tags": [ "Dashboard" ], - "operationId": "dashboard_dashboard_layouts", - "summary": "Get All DashboardLayouts", - "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", + "operationId": "search_dashboard_elements", + "summary": "Search Dashboard Elements", + "description": "### Search Dashboard Elements\n\nReturns an **array of DashboardElement objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { "name": "dashboard_id", - "in": "path", - "description": "Id of dashboard", - "required": true, + "in": "query", + "description": "Select elements that refer to a given dashboard id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "look_id", + "in": "query", + "description": "Select elements that refer to a given look id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "title", + "in": "query", + "description": "Match the title of element", + "required": false, "schema": { "type": "string" } }, + { + "name": "deleted", + "in": "query", + "description": "Select soft-deleted dashboard elements", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "fields", "in": "query", @@ -11331,17 +12161,35 @@ "schema": { "type": "string" } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by. Sortable fields: [:look_id, :dashboard_id, :deleted, :title]", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "DashboardLayout", + "description": "Dashboard elements", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DashboardLayout" + "$ref": "#/components/schemas/DashboardElement" } } } @@ -11383,15 +12231,24 @@ "x-looker-rate-limited": true } }, - "/dashboard_layouts": { - "post": { + "/dashboard_elements/{dashboard_element_id}": { + "get": { "tags": [ "Dashboard" ], - "operationId": "create_dashboard_layout", - "summary": "Create DashboardLayout", - "description": "### Create a dashboard layout on the dashboard with a specific id.", + "operationId": "dashboard_element", + "summary": "Get DashboardElement", + "description": "### Get information about the dashboard element with a specific id.", "parameters": [ + { + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -11404,11 +12261,11 @@ ], "responses": { "200": { - "description": "DashboardLayout", + "description": "DashboardElement", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardLayout" + "$ref": "#/components/schemas/DashboardElement" } } } @@ -11433,26 +12290,6 @@ } } }, - "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": { @@ -11466,33 +12303,20 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardLayout" - } - } - }, - "description": "DashboardLayout", - "required": true - } - } - }, - "/dashboard_filter_state/{guid}": { - "get": { + "x-looker-rate-limited": true + }, + "delete": { "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", + "operationId": "delete_dashboard_element", + "summary": "Delete DashboardElement", + "description": "### Delete a dashboard element with a specific id.", "parameters": [ { - "name": "guid", + "name": "dashboard_element_id", "in": "path", - "description": "GUID of the filter state", + "description": "Id of dashboard element", "required": true, "schema": { "type": "string" @@ -11500,8 +12324,8 @@ } ], "responses": { - "200": { - "description": "JSON string of filter state", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { @@ -11544,33 +12368,41 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/dashboard_filter_state": { - "post": { + }, + "patch": { "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" - } - } + "operationId": "update_dashboard_element", + "summary": "Update DashboardElement", + "description": "### Update the dashboard element with a specific id.", + "parameters": [ + { + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element", + "required": true, + "schema": { + "type": "string" } }, - "201": { - "description": "JSON with GUID", + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "DashboardElement", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/DashboardElement" } } } @@ -11595,16 +12427,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -11633,30 +12455,53 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/DashboardElement" } } }, - "description": "JSON string of filter state", + "description": "DashboardElement", "required": true } } }, - "/data_actions": { - "post": { + "/dashboards/{dashboard_id}/dashboard_elements": { + "get": { "tags": [ - "DataAction" + "Dashboard" + ], + "operationId": "dashboard_dashboard_elements", + "summary": "Get All DashboardElements", + "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "perform_data_action", - "summary": "Send a Data Action", - "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", "responses": { "200": { - "description": "Data Action Response", + "description": "DashboardElement", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DataActionResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardElement" + } } } } @@ -11694,35 +12539,44 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataActionRequest" - } - } - }, - "description": "Data Action Request", - "required": true - } + "x-looker-rate-limited": true } }, - "/data_actions/form": { + "/dashboard_elements": { "post": { "tags": [ - "DataAction" + "Dashboard" + ], + "operationId": "create_dashboard_element", + "summary": "Create DashboardElement", + "description": "### Create a dashboard element on the dashboard with a specific id.", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "apply_filters", + "in": "query", + "description": "Apply relevant filters on dashboard to this tile", + "required": false, + "schema": { + "type": "boolean" + } + } ], - "operationId": "fetch_remote_data_action_form", - "summary": "Fetch Remote Data Action Form", - "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", "responses": { "200": { - "description": "Data Action Form", + "description": "DashboardElement", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DataActionForm" + "$ref": "#/components/schemas/DashboardElement" } } } @@ -11747,6 +12601,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -11775,36 +12639,50 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/DashboardElement" } } }, - "description": "Data Action Request", + "description": "DashboardElement", "required": true } } }, - "/datagroups": { + "/dashboard_filters/{dashboard_filter_id}": { "get": { "tags": [ - "Datagroup" + "Dashboard" + ], + "operationId": "dashboard_filter", + "summary": "Get Dashboard Filter", + "description": "### Get information about the dashboard filters with a specific id.", + "parameters": [ + { + "name": "dashboard_filter_id", + "in": "path", + "description": "Id of dashboard filters", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "all_datagroups", - "summary": "Get All Datagroups", - "description": "### Get information about all datagroups.\n", "responses": { "200": { - "description": "Datagroup", + "description": "Dashboard Filter", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Datagroup" - } + "$ref": "#/components/schemas/DashboardFilter" } } } @@ -11843,21 +12721,19 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/datagroups/{datagroup_id}": { - "get": { + }, + "delete": { "tags": [ - "Datagroup" + "Dashboard" ], - "operationId": "datagroup", - "summary": "Get Datagroup", - "description": "### Get information about a datagroup.\n", + "operationId": "delete_dashboard_filter", + "summary": "Delete Dashboard Filter", + "description": "### Delete a dashboard filter with a specific id.", "parameters": [ { - "name": "datagroup_id", + "name": "dashboard_filter_id", "in": "path", - "description": "ID of datagroup.", + "description": "Id of dashboard filter", "required": true, "schema": { "type": "string" @@ -11865,12 +12741,12 @@ } ], "responses": { - "200": { - "description": "Datagroup", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Datagroup" + "type": "string" } } } @@ -11912,29 +12788,38 @@ }, "patch": { "tags": [ - "Datagroup" + "Dashboard" ], - "operationId": "update_datagroup", - "summary": "Update Datagroup", - "description": "### Update a datagroup using the specified params.\n", + "operationId": "update_dashboard_filter", + "summary": "Update Dashboard Filter", + "description": "### Update the dashboard filter with a specific id.", "parameters": [ { - "name": "datagroup_id", + "name": "dashboard_filter_id", "in": "path", - "description": "ID of datagroup.", + "description": "Id of dashboard filter", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Datagroup", + "description": "Dashboard Filter", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Datagroup" + "$ref": "#/components/schemas/DashboardFilter" } } } @@ -11959,16 +12844,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -11997,24 +12872,33 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Datagroup" + "$ref": "#/components/schemas/DashboardFilter" } } }, - "description": "Datagroup", + "description": "Dashboard Filter", "required": true } } }, - "/connections": { + "/dashboards/{dashboard_id}/dashboard_filters": { "get": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "all_connections", - "summary": "Get All Connections", - "description": "### Get information about all connections.\n", + "operationId": "dashboard_dashboard_filters", + "summary": "Get All Dashboard Filters", + "description": "### Get information about all the dashboard filters on a dashboard with a specific id.", "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -12027,13 +12911,13 @@ ], "responses": { "200": { - "description": "Connection", + "description": "Dashboard Filter", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DBConnection" + "$ref": "#/components/schemas/DashboardFilter" } } } @@ -12073,21 +12957,34 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/dashboard_filters": { "post": { "tags": [ - "Connection" + "Dashboard" + ], + "operationId": "create_dashboard_filter", + "summary": "Create Dashboard Filter", + "description": "### Create a dashboard filter on the dashboard with a specific id.", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_connection", - "summary": "Create Connection", - "description": "### Create a connection using the specified configuration.\n", "responses": { "200": { - "description": "Connection", + "description": "Dashboard Filter", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DBConnection" + "$ref": "#/components/schemas/DashboardFilter" } } } @@ -12102,16 +12999,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -12160,28 +13047,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DBConnection" + "$ref": "#/components/schemas/CreateDashboardFilter" } } }, - "description": "Connection", + "description": "Dashboard Filter", "required": true } } }, - "/connections/{connection_name}": { + "/dashboard_layout_components/{dashboard_layout_component_id}": { "get": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "connection", - "summary": "Get Connection", - "description": "### Get information about a connection.\n", + "operationId": "dashboard_layout_component", + "summary": "Get DashboardLayoutComponent", + "description": "### Get information about the dashboard elements with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_component_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layout component", "required": true, "schema": { "type": "string" @@ -12199,11 +13086,11 @@ ], "responses": { "200": { - "description": "Connection", + "description": "DashboardLayoutComponent", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DBConnection" + "$ref": "#/components/schemas/DashboardLayoutComponent" } } } @@ -12245,29 +13132,38 @@ }, "patch": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "update_connection", - "summary": "Update Connection", - "description": "### Update a connection using the specified configuration.\n", + "operationId": "update_dashboard_layout_component", + "summary": "Update DashboardLayoutComponent", + "description": "### Update the dashboard element with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_component_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layout component", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Connection", + "description": "DashboardLayoutComponent", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DBConnection" + "$ref": "#/components/schemas/DashboardLayoutComponent" } } } @@ -12282,16 +13178,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -12302,16 +13188,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -12340,39 +13216,53 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DBConnection" + "$ref": "#/components/schemas/DashboardLayoutComponent" } } }, - "description": "Connection", + "description": "DashboardLayoutComponent", "required": true } - }, - "delete": { + } + }, + "/dashboard_layouts/{dashboard_layout_id}/dashboard_layout_components": { + "get": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "delete_connection", - "summary": "Delete Connection", - "description": "### Delete a connection.\n", + "operationId": "dashboard_layout_dashboard_layout_components", + "summary": "Get All DashboardLayoutComponents", + "description": "### Get information about all the dashboard layout components for a dashboard layout with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layout component", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "DashboardLayoutComponent", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardLayoutComponent" + } } } } @@ -12413,41 +13303,41 @@ "x-looker-rate-limited": true } }, - "/connections/{connection_name}/connection_override/{override_context}": { - "delete": { + "/dashboard_layouts/{dashboard_layout_id}": { + "get": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "delete_connection_override", - "summary": "Delete Connection Override", - "description": "### Delete a connection override.\n", + "operationId": "dashboard_layout", + "summary": "Get DashboardLayout", + "description": "### Get information about the dashboard layouts with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layouts", "required": true, "schema": { "type": "string" } }, { - "name": "override_context", - "in": "path", - "description": "Context of connection override", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "DashboardLayout", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/DashboardLayout" } } } @@ -12472,16 +13362,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -12496,51 +13376,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/connections/{connection_name}/test": { - "put": { + }, + "delete": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "test_connection", - "summary": "Test Connection", - "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", + "operationId": "delete_dashboard_layout", + "summary": "Delete DashboardLayout", + "description": "### Delete a dashboard layout with a specific id.", "parameters": [ { - "name": "connection_name", + "name": "dashboard_layout_id", "in": "path", - "description": "Name of connection", + "description": "Id of dashboard layout", "required": true, "schema": { "type": "string" } - }, - { - "name": "tests", - "in": "query", - "description": "Array of names of tests to run", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], "responses": { - "200": { - "description": "Test results", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DBConnectionTestResult" - } + "type": "string" } } } @@ -12589,42 +13450,41 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/connections/test": { - "put": { + }, + "patch": { "tags": [ - "Connection" + "Dashboard" ], - "operationId": "test_connection_config", - "summary": "Test Connection Configuration", - "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", + "operationId": "update_dashboard_layout", + "summary": "Update DashboardLayout", + "description": "### Update the dashboard layout with a specific id.", "parameters": [ { - "name": "tests", + "name": "dashboard_layout_id", + "in": "path", + "description": "Id of dashboard layout", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", "in": "query", - "description": "Array of names of tests to run", + "description": "Requested fields.", "required": false, - "style": "simple", - "explode": false, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } } ], "responses": { "200": { - "description": "Test results", + "description": "DashboardLayout", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DBConnectionTestResult" - } + "$ref": "#/components/schemas/DashboardLayout" } } } @@ -12677,28 +13537,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DBConnection" + "$ref": "#/components/schemas/DashboardLayout" } } }, - "description": "Connection", + "description": "DashboardLayout", "required": true } } }, - "/projects/{project_id}/manifest/lock_all": { - "post": { + "/dashboards/{dashboard_id}/dashboard_layouts": { + "get": { "tags": [ - "Project" + "Dashboard" ], - "operationId": "lock_all", - "summary": "Lock All", - "description": " ### Generate Lockfile for All LookML Dependencies\n\n Git must have been configured, must be in dev mode and deploy permission required\n\n Install_all is a two step process\n 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref.\n 2. The project will then write out a lockfile including each remote_dependency with its resolved ref.\n\n", + "operationId": "dashboard_dashboard_layouts", + "summary": "Get All DashboardLayouts", + "description": "### Get information about all the dashboard elements on a dashboard with a specific id.", "parameters": [ { - "name": "project_id", + "name": "dashboard_id", "in": "path", - "description": "Id of project", + "description": "Id of dashboard", "required": true, "schema": { "type": "string" @@ -12707,7 +13567,7 @@ { "name": "fields", "in": "query", - "description": "Requested fields", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -12716,18 +13576,18 @@ ], "responses": { "200": { - "description": "Project Dependency Manager", + "description": "DashboardLayout", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardLayout" + } } } } }, - "204": { - "description": "Returns 204 if dependencies successfully installed, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "content": { @@ -12748,16 +13608,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -12774,37 +13624,19 @@ "x-looker-rate-limited": true } }, - "/derived_table/graph/model/{model}": { - "get": { + "/dashboard_layouts": { + "post": { "tags": [ - "DerivedTable" + "Dashboard" ], - "operationId": "graph_derived_tables_for_model", - "summary": "Get Derived Table graph for model", - "description": "### Discover information about derived tables\n", + "operationId": "create_dashboard_layout", + "summary": "Create DashboardLayout", + "description": "### Create a dashboard layout on the dashboard with a specific id.", "parameters": [ { - "name": "model", - "in": "path", - "description": "The name of the Lookml model.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "format", - "in": "query", - "description": "The format of the graph. Valid values are [dot]. Default is `dot`", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "color", + "name": "fields", "in": "query", - "description": "Color denoting the build status of the graph. Grey = not built, green = built, yellow = building, red = error.", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -12813,11 +13645,11 @@ ], "responses": { "200": { - "description": "Derived Table", + "description": "DashboardLayout", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DependencyGraph" + "$ref": "#/components/schemas/DashboardLayout" } } } @@ -12842,6 +13674,26 @@ } } }, + "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": { @@ -12855,53 +13707,46 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardLayout" + } + } + }, + "description": "DashboardLayout", + "required": true + } } }, - "/derived_table/graph/view/{view}": { + "/dashboard_filter_state/{guid}": { "get": { "tags": [ - "DerivedTable" + "Dashboard" ], - "operationId": "graph_derived_tables_for_view", - "summary": "Get subgraph of derived table and dependencies", - "description": "### Get the subgraph representing this derived table and its dependencies.\n", + "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": "view", + "name": "guid", "in": "path", - "description": "The derived table's view name.", + "description": "GUID of the filter state", "required": true, "schema": { "type": "string" } - }, - { - "name": "models", - "in": "query", - "description": "The models where this derived table is defined.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "workspace", - "in": "query", - "description": "The model directory to look in, either `dev` or `production`.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Graph of the derived table component, represented in the DOT language.", + "description": "JSON string of filter state", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DependencyGraph" + "type": "string" } } } @@ -12942,77 +13787,31 @@ "x-looker-rate-limited": true } }, - "/derived_table/{model_name}/{view_name}/start": { - "get": { + "/dashboard_filter_state": { + "post": { "tags": [ - "DerivedTable" - ], - "operationId": "start_pdt_build", - "summary": "Start a PDT materialization", - "description": "Enqueue materialization for a PDT with the given model name and view name", - "parameters": [ - { - "name": "model_name", - "in": "path", - "description": "The model of the PDT to start building.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "view_name", - "in": "path", - "description": "The view name of the PDT to start building.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "force_rebuild", - "in": "query", - "description": "Force rebuild of required dependent PDTs, even if they are already materialized.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "force_full_incremental", - "in": "query", - "description": "Force involved incremental PDTs to fully re-materialize.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "workspace", - "in": "query", - "description": "Workspace in which to materialize selected PDT ('dev' or default 'production').", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "source", - "in": "query", - "description": "The source of this request.", - "required": false, - "schema": { - "type": "string" - } - } + "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": "Derived Table", + "description": "Dashboard Filter State", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MaterializePDT" + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "201": { + "description": "JSON with GUID", + "content": { + "application/json": { + "schema": { + "type": "string" } } } @@ -13037,6 +13836,26 @@ } } }, + "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": { @@ -13050,35 +13869,35 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "description": "JSON string of filter state", + "required": true + } } }, - "/derived_table/{materialization_id}/status": { - "get": { + "/data_actions": { + "post": { "tags": [ - "DerivedTable" - ], - "operationId": "check_pdt_build", - "summary": "Check status of a PDT materialization", - "description": "Check status of PDT materialization", - "parameters": [ - { - "name": "materialization_id", - "in": "path", - "description": "The materialization id to check status for.", - "required": true, - "schema": { - "type": "string" - } - } + "DataAction" ], + "operationId": "perform_data_action", + "summary": "Send a Data Action", + "description": "Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action.", "responses": { "200": { - "description": "Derived Table", + "description": "Data Action Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MaterializePDT" + "$ref": "#/components/schemas/DataActionResponse" } } } @@ -13116,44 +13935,35 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataActionRequest" + } + } + }, + "description": "Data Action Request", + "required": true + } } }, - "/derived_table/{materialization_id}/stop": { - "get": { + "/data_actions/form": { + "post": { "tags": [ - "DerivedTable" - ], - "operationId": "stop_pdt_build", - "summary": "Stop a PDT materialization", - "description": "Stop a PDT materialization", - "parameters": [ - { - "name": "materialization_id", - "in": "path", - "description": "The materialization id to stop.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "source", - "in": "query", - "description": "The source of this request.", - "required": false, - "schema": { - "type": "string" - } - } + "DataAction" ], + "operationId": "fetch_remote_data_action_form", + "summary": "Fetch Remote Data Action Form", + "description": "For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user.", "responses": { "200": { - "description": "Derived Table", + "description": "Data Action Form", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MaterializePDT" + "$ref": "#/components/schemas/DataActionForm" } } } @@ -13178,6 +13988,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -13191,37 +14011,40 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "description": "Data Action Request", + "required": true + } } }, - "/dialect_info": { + "/datagroups": { "get": { "tags": [ - "Connection" - ], - "operationId": "all_dialect_infos", - "summary": "Get All Dialect Infos", - "description": "### Get information about all dialects.\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } + "Datagroup" ], + "operationId": "all_datagroups", + "summary": "Get All Datagroups", + "description": "### Get information about all datagroups.\n", "responses": { "200": { - "description": "Dialect Info", + "description": "Datagroup", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/DialectInfo" + "$ref": "#/components/schemas/Datagroup" } } } @@ -13263,21 +14086,32 @@ "x-looker-rate-limited": true } }, - "/digest_emails_enabled": { + "/datagroups/{datagroup_id}": { "get": { "tags": [ - "Config" + "Datagroup" + ], + "operationId": "datagroup", + "summary": "Get Datagroup", + "description": "### Get information about a datagroup.\n", + "parameters": [ + { + "name": "datagroup_id", + "in": "path", + "description": "ID of datagroup.", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "digest_emails_enabled", - "summary": "Get Digest_emails", - "description": "### Retrieve the value for whether or not digest emails is enabled\n", "responses": { "200": { - "description": "Digest_emails", + "description": "Datagroup", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DigestEmails" + "$ref": "#/components/schemas/Datagroup" } } } @@ -13319,18 +14153,29 @@ }, "patch": { "tags": [ - "Config" + "Datagroup" + ], + "operationId": "update_datagroup", + "summary": "Update Datagroup", + "description": "### Update a datagroup using the specified params.\n", + "parameters": [ + { + "name": "datagroup_id", + "in": "path", + "description": "ID of datagroup.", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "update_digest_emails_enabled", - "summary": "Update Digest_emails", - "description": "### Update the setting for enabling/disabling digest emails\n", "responses": { "200": { - "description": "Digest_emails", + "description": "Datagroup", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DigestEmails" + "$ref": "#/components/schemas/Datagroup" } } } @@ -13355,6 +14200,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -13383,85 +14238,44 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DigestEmails" + "$ref": "#/components/schemas/Datagroup" } } }, - "description": "Digest_emails", + "description": "Datagroup", "required": true } } }, - "/digest_email_send": { - "post": { + "/connections": { + "get": { "tags": [ - "Config" + "Connection" ], - "operationId": "create_digest_email_send", - "summary": "Deliver digest email contents", - "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", - "responses": { - "200": { - "description": "Status of generating and sending the data", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DigestEmailSend" - } - } - } - }, - "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" - } - } + "operationId": "all_connections", + "summary": "Get All Connections", + "description": "### Get information about all connections.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" } } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "none", - "x-looker-rate-limited": true - } - }, - "/public_egress_ip_addresses": { - "get": { - "tags": [ - "Config" ], - "operationId": "public_egress_ip_addresses", - "summary": "Public Egress IP Addresses", - "description": "### Get Egress IP Addresses\n\nReturns the list of public egress IP Addresses for a hosted customer's instance\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Public Egress IP Addresses", + "description": "Connection", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EgressIpAddresses" + "type": "array", + "items": { + "$ref": "#/components/schemas/DBConnection" + } } } } @@ -13476,16 +14290,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -13510,23 +14314,21 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/embed_config/secrets": { + }, "post": { "tags": [ - "Auth" + "Connection" ], - "operationId": "create_embed_secret", - "summary": "Create Embed Secret", - "description": "### Create an embed secret using the specified information.\n\nThe value of the `secret` field will be set by Looker and returned.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "create_connection", + "summary": "Create Connection", + "description": "### Create a connection using the specified configuration.\n", "responses": { "200": { - "description": "embed secret", + "description": "Connection", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedSecret" + "$ref": "#/components/schemas/DBConnection" } } } @@ -13599,41 +14401,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedSecret" + "$ref": "#/components/schemas/DBConnection" } } }, - "description": "embed secret", - "required": false + "description": "Connection", + "required": true } } }, - "/embed_config/secrets/{embed_secret_id}": { - "delete": { + "/connections/{connection_name}": { + "get": { "tags": [ - "Auth" + "Connection" ], - "operationId": "delete_embed_secret", - "summary": "Delete Embed Secret", - "description": "### Delete an embed secret.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "connection", + "summary": "Get Connection", + "description": "### Get information about a connection.\n", "parameters": [ { - "name": "embed_secret_id", + "name": "connection_name", "in": "path", - "description": "Id of Embed Secret", + "description": "Name of connection", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Connection", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/DBConnection" } } } @@ -13648,16 +14459,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -13682,23 +14483,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/embed/sso_url": { - "post": { + }, + "patch": { "tags": [ - "Auth" + "Connection" + ], + "operationId": "update_connection", + "summary": "Update Connection", + "description": "### Update a connection using the specified configuration.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "create_sso_embed_url", - "summary": "Create Signed Embed Url", - "description": "### Create Signed Embed URL\n\nCreates a signed embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to the returned URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed embed URL can only be **used once**. After the URL has been used to request a page from the\nLooker server, it is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this `target_url` is to navigate to the desired Looker page in your web browser and use the \"Get embed URL\" menu option\nto copy it to your clipboard and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (`group_ids` property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the `group_ids` property, or **both** the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the `group_ids`, `models`, and `permissions` properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nembed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nBecause of this, **these parameters are not validated** when the API call is made.\n\nThe [Get Embed Url](https://docs.cloud.google.com/looker/docs/r/get-signed-url) dialog can be used to determine and validate the correct permissions for signing an embed url.\nThis dialog also provides the SDK syntax for the API call to make. Alternatively, you can copy the signed URL into the Embed URI Validator text box\nin `/admin/embed` to diagnose potential problems.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the most recent active signing secret. If there is no active secret for signing embed urls,\na default secret will be created. This default secret is encrypted using HMAC/SHA-256.\n\nThe `embed_domain` parameter is optional. If specified and valid, the domain will be added to the embed domain allowlist if it is missing.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "responses": { "200": { - "description": "Signed Embed URL", + "description": "Connection", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedUrlResponse" + "$ref": "#/components/schemas/DBConnection" } } } @@ -13765,36 +14575,45 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedSsoParams" + "$ref": "#/components/schemas/DBConnection" } } }, - "description": "Signed Embed URL parameters", + "description": "Connection", "required": true } - } - }, - "/embed/token_url/me": { - "post": { + }, + "delete": { "tags": [ - "Auth" + "Connection" + ], + "operationId": "delete_connection", + "summary": "Delete Connection", + "description": "### Delete a connection.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "create_embed_url_as_me", - "summary": "Create Embed URL", - "description": "### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://docs.cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of\nlogging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\n", "responses": { - "200": { - "description": "Embed URL", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedUrlResponse" + "type": "string" } } } @@ -13809,16 +14628,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -13829,26 +14638,6 @@ } } }, - "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": { @@ -13861,47 +14650,45 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EmbedParams" - } - } - }, - "description": "Embed parameters", - "required": true - } + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true } }, - "/embed/sso/validate": { - "get": { + "/connections/{connection_name}/connection_override/{override_context}": { + "delete": { "tags": [ - "Auth" + "Connection" ], - "operationId": "validate_embed_url", - "summary": "Get Embed URL Validation", - "description": "### Validate a Signed Embed URL\n\n", + "operationId": "delete_connection_override", + "summary": "Delete Connection Override", + "description": "### Delete a connection override.\n", "parameters": [ { - "name": "url", - "in": "query", - "description": "URL to validate", - "required": false, + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "override_context", + "in": "path", + "description": "Context of connection override", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "Embed URL Validation", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedUrlResponse" + "type": "string" } } } @@ -13916,16 +14703,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -13957,26 +14734,54 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/embed/cookieless_session/acquire": { - "post": { + "/connections/{connection_name}/test": { + "put": { "tags": [ - "Auth" + "Connection" + ], + "operationId": "test_connection", + "summary": "Test Connection", + "description": "### Test an existing connection.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "tests", + "in": "query", + "description": "Array of names of tests to run", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } ], - "operationId": "acquire_embed_cookieless_session", - "summary": "Create Acquire cookieless embed session", - "description": "### Acquire a cookieless embed session.\n\nThe acquire session endpoint negates the need for signing the embed url and passing it as a parameter\nto the embed login. This endpoint accepts an embed user definition and creates or updates it. This is\nsimilar behavior to the embed SSO login as they both can create and update embed user data.\n\nThe endpoint also accepts an optional `session_reference_token`. If present and the session has not expired\nand the credentials match the credentials for the embed session, a new authentication token will be\ngenerated. This allows the embed session to attach a new embedded IFRAME to the embed session. Note that\nthe session is NOT extended in this scenario. In other words the session_length parameter is ignored.\n\n**IMPORTANT:** If the `session_reference_token` is provided and the session has NOT expired, the embed user\nis NOT updated. This is done for performance reasons and to support the embed SSO usecase where the\nfirst IFRAME created on a page uses a signed url and subsequently created IFRAMEs do not.\n\nIf the `session_reference_token` is provided but the session has expired, the token will be ignored and a\nnew embed session will be created. Note that the embed user definition will be updated in this scenario.\n\nIf the credentials do not match the credentials associated with an existing session_reference_token, a\n404 will be returned.\n\nThe endpoint returns the following:\n- Authentication token - a token that is passed to `/embed/login` endpoint that creates or attaches to the\n embed session. This token can be used once and has a lifetime of 30 seconds.\n- Session reference token - a token that lives for the length of the session. This token is used to\n generate new api and navigation tokens OR create new embed IFRAMEs.\n- Api token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into the\n iframe.\n- Navigation token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into\n the iframe.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "responses": { "200": { - "description": "Embed cookieless acquire session response", + "description": "Test results", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedCookielessSessionAcquireResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DBConnectionTestResult" + } } } } @@ -13991,8 +14796,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -14001,18 +14806,82 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } }, - "409": { - "description": "Resource Already Exists", + "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 + } + }, + "/connections/test": { + "put": { + "tags": [ + "Connection" + ], + "operationId": "test_connection_config", + "summary": "Test Connection Configuration", + "description": "### Test a connection configuration.\n\nNote that a connection's 'dialect' property has a 'connection_tests' property that lists the\nspecific types of tests that the connection supports.\n\nThis API is rate limited.\n\nUnsupported tests in the request will be ignored.\n", + "parameters": [ + { + "name": "tests", + "in": "query", + "description": "Array of names of tests to run", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Test results", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DBConnectionTestResult" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -14043,43 +14912,52 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedCookielessSessionAcquire" + "$ref": "#/components/schemas/DBConnection" } } }, - "description": "Embed user details", + "description": "Connection", "required": true } } }, - "/embed/cookieless_session/{session_reference_token}": { - "delete": { + "/projects/{project_id}/manifest/lock_all": { + "post": { "tags": [ - "Auth" + "Project" ], - "operationId": "delete_embed_cookieless_session", - "summary": "Delete cookieless embed session", - "description": "### Delete cookieless embed session\n\nThis will delete the session associated with the given session reference token. Calling this endpoint will result\nin the session and session reference data being cleared from the system. This endpoint can be used to log an embed\nuser out of the Looker instance.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "operationId": "lock_all", + "summary": "Lock All", + "description": " ### Generate Lockfile for All LookML Dependencies\n\n Git must have been configured, must be in dev mode and deploy permission required\n\n Install_all is a two step process\n 1. For each remote_dependency in a project the dependency manager will resolve any ambiguous ref.\n 2. The project will then write out a lockfile including each remote_dependency with its resolved ref.\n\n", "parameters": [ { - "name": "session_reference_token", + "name": "project_id", "in": "path", - "description": "Embed session reference token", + "description": "Id of project", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Project Dependency Manager", "content": { "application/json": { "schema": { @@ -14088,6 +14966,9 @@ } } }, + "204": { + "description": "Returns 204 if dependencies successfully installed, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "content": { @@ -14098,16 +14979,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -14140,25 +15011,54 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/embed/cookieless_session/generate_tokens": { - "put": { + "/derived_table/graph/model/{model}": { + "get": { "tags": [ - "Auth" + "DerivedTable" + ], + "operationId": "graph_derived_tables_for_model", + "summary": "Get Derived Table graph for model", + "description": "### Discover information about derived tables\n", + "parameters": [ + { + "name": "model", + "in": "path", + "description": "The name of the Lookml model.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "format", + "in": "query", + "description": "The format of the graph. Valid values are [dot]. Default is `dot`", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "color", + "in": "query", + "description": "Color denoting the build status of the graph. Grey = not built, green = built, yellow = building, red = error.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "generate_tokens_for_cookieless_session", - "summary": "Generate tokens for cookieless embed session", - "description": "### Generate api and navigation tokens for a cookieless embed session\n\nThe generate tokens endpoint is used to create new tokens of type:\n- Api token.\n- Navigation token.\nThe generate tokens endpoint should be called every time the Looker client asks for a token (except for the\nfirst time when the tokens returned by the acquire_session endpoint should be used).\n\n#### Embed session expiration handling\n\nThis endpoint does NOT return an error when the embed session expires. This is to simplify processing\nin the caller as errors can happen for non session expiration reasons. Instead the endpoint returns\nthe session time to live in the `session_reference_token_ttl` response property. If this property\ncontains a zero, the embed session has expired.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "responses": { "200": { - "description": "Generated api and navigations tokens for the cookieless embed session.", + "description": "Derived Table", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbedCookielessSessionGenerateTokensResponse" + "$ref": "#/components/schemas/DependencyGraph" } } } @@ -14173,16 +15073,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -14193,16 +15083,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -14215,43 +15095,41 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "none", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EmbedCookielessSessionGenerateTokens" - } - } - }, - "description": "Embed session reference token", - "required": true - } + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true } }, - "/external_oauth_applications": { + "/derived_table/graph/view/{view}": { "get": { "tags": [ - "Connection" + "DerivedTable" ], - "operationId": "all_external_oauth_applications", - "summary": "Get All External OAuth Applications", - "description": "### Get all External OAuth Applications.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "operationId": "graph_derived_tables_for_view", + "summary": "Get subgraph of derived table and dependencies", + "description": "### Get the subgraph representing this derived table and its dependencies.\n", "parameters": [ { - "name": "name", + "name": "view", + "in": "path", + "description": "The derived table's view name.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "models", "in": "query", - "description": "Application name", + "description": "The models where this derived table is defined.", "required": false, "schema": { "type": "string" } }, { - "name": "client_id", + "name": "workspace", "in": "query", - "description": "Application Client ID", + "description": "The model directory to look in, either `dev` or `production`.", "required": false, "schema": { "type": "string" @@ -14260,14 +15138,11 @@ ], "responses": { "200": { - "description": "External OAuth Application", + "description": "Graph of the derived table component, represented in the DOT language.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalOauthApplication" - } + "$ref": "#/components/schemas/DependencyGraph" } } } @@ -14303,24 +15178,82 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/derived_table/{model_name}/{view_name}/start": { + "get": { "tags": [ - "Connection" + "DerivedTable" + ], + "operationId": "start_pdt_build", + "summary": "Start a PDT materialization", + "description": "Enqueue materialization for a PDT with the given model name and view name", + "parameters": [ + { + "name": "model_name", + "in": "path", + "description": "The model of the PDT to start building.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "view_name", + "in": "path", + "description": "The view name of the PDT to start building.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "force_rebuild", + "in": "query", + "description": "Force rebuild of required dependent PDTs, even if they are already materialized.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "force_full_incremental", + "in": "query", + "description": "Force involved incremental PDTs to fully re-materialize.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "workspace", + "in": "query", + "description": "Workspace in which to materialize selected PDT ('dev' or default 'production').", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "source", + "in": "query", + "description": "The source of this request.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_external_oauth_application", - "summary": "Create External OAuth Application", - "description": "### Create an OAuth Application using the specified configuration.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", "responses": { "200": { - "description": "External OAuth Application", + "description": "Derived Table", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExternalOauthApplication" + "$ref": "#/components/schemas/MaterializePDT" } } } @@ -14345,26 +15278,6 @@ } } }, - "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": { @@ -14376,35 +15289,24 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalOauthApplication" - } - } - }, - "description": "External OAuth Application", - "required": true - } + "x-looker-rate-limited": true } }, - "/external_oauth_applications/{client_id}": { - "patch": { + "/derived_table/{materialization_id}/status": { + "get": { "tags": [ - "Connection" + "DerivedTable" ], - "operationId": "update_external_oauth_application", - "summary": "Update External OAuth Application", - "description": "### Update an OAuth Application's client secret.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "operationId": "check_pdt_build", + "summary": "Check status of a PDT materialization", + "description": "Check status of PDT materialization", "parameters": [ { - "name": "client_id", + "name": "materialization_id", "in": "path", - "description": "The client ID of the OAuth App to update", + "description": "The materialization id to check status for.", "required": true, "schema": { "type": "string" @@ -14413,11 +15315,11 @@ ], "responses": { "200": { - "description": "External OAuth Application", + "description": "Derived Table", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExternalOauthApplication" + "$ref": "#/components/schemas/MaterializePDT" } } } @@ -14442,16 +15344,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -14463,46 +15355,46 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalOauthApplication" - } - } - }, - "description": "External OAuth Application", - "required": true - } - }, - "delete": { + "x-looker-rate-limited": true + } + }, + "/derived_table/{materialization_id}/stop": { + "get": { "tags": [ - "Connection" + "DerivedTable" ], - "operationId": "delete_external_oauth_application", - "summary": "Delete External OAuth Application", - "description": "### Delete an OAuth Application.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "operationId": "stop_pdt_build", + "summary": "Stop a PDT materialization", + "description": "Stop a PDT materialization", "parameters": [ { - "name": "client_id", + "name": "materialization_id", "in": "path", - "description": "The client ID of the OAuth App to delete", + "description": "The materialization id to stop.", "required": true, "schema": { "type": "string" } + }, + { + "name": "source", + "in": "query", + "description": "The source of this request.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Derived Table", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/MaterializePDT" } } } @@ -14538,26 +15430,40 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/external_oauth_applications/user_state": { - "post": { + "/dialect_info": { + "get": { "tags": [ "Connection" ], - "operationId": "create_oauth_application_user_state", - "summary": "Create Create OAuth user state.", - "description": "### Create OAuth User state.\n", + "operationId": "all_dialect_infos", + "summary": "Get All Dialect Infos", + "description": "### Get information about all dialects.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { - "description": "Created user state", + "description": "Dialect Info", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateOAuthApplicationUserStateResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DialectInfo" + } } } } @@ -14582,26 +15488,6 @@ } } }, - "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": { @@ -14613,47 +15499,30 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateOAuthApplicationUserStateRequest" - } - } - }, - "description": "Create OAuth user state.", - "required": true - } + "x-looker-rate-limited": true } }, - "/conversational_analytics/chat": { - "post": { + "/digest_emails_enabled": { + "get": { "tags": [ - "ConversationalAnalytics" + "Config" ], - "operationId": "conversational_analytics_chat", - "summary": "Chat", - "description": "## Takes the latest conversation context (ID and a user message) and\n## returns a list of newly generated system messages.\n", + "operationId": "digest_emails_enabled", + "summary": "Get Digest_emails", + "description": "### Retrieve the value for whether or not digest emails is enabled\n", "responses": { "200": { - "description": "A list of message objects generated in response to the user's input.", + "description": "Digest_emails", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChatMessage" - } + "$ref": "#/components/schemas/DigestEmails" } } } }, - "202": { - "description": "Accepted" - }, "400": { "description": "Bad Request", "content": { @@ -14664,8 +15533,51 @@ } } }, - "403": { - "description": "Permission Denied", + "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 + }, + "patch": { + "tags": [ + "Config" + ], + "operationId": "update_digest_emails_enabled", + "summary": "Update Digest_emails", + "description": "### Update the setting for enabling/disabling digest emails\n", + "responses": { + "200": { + "description": "Digest_emails", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DigestEmails" + } + } + } + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -14684,18 +15596,18 @@ } } }, - "429": { - "description": "Too Many Requests", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } }, - "500": { - "description": "Server Error", + "429": { + "description": "Too Many Requests", "content": { "application/json": { "schema": { @@ -14705,51 +15617,37 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConversationalAnalyticsChatRequest" + "$ref": "#/components/schemas/DigestEmails" } } }, - "description": "Conversation context necessary for generating new messages.", + "description": "Digest_emails", "required": true } } }, - "/projects/{project_id}/git_branches": { - "get": { + "/digest_email_send": { + "post": { "tags": [ - "Project" - ], - "operationId": "all_git_branches", - "summary": "Get All Git Branches", - "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - } + "Config" ], + "operationId": "create_digest_email_send", + "summary": "Deliver digest email contents", + "description": "### Trigger the generation of digest email records and send them to Looker's internal system. This does not send\nany actual emails, it generates records containing content which may be of interest for users who have become inactive.\nEmails will be sent at a later time from Looker's internal system if the Digest Emails feature is enabled in settings.", "responses": { "200": { - "description": "Git Branch", + "description": "Status of generating and sending the data", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GitBranch" - } + "$ref": "#/components/schemas/DigestEmailSend" } } } @@ -14786,36 +15684,25 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "none", "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_branch": { + "/public_egress_ip_addresses": { "get": { "tags": [ - "Project" - ], - "operationId": "git_branch", - "summary": "Get Active Git Branch", - "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - } + "Config" ], + "operationId": "public_egress_ip_addresses", + "summary": "Public Egress IP Addresses", + "description": "### Get Egress IP Addresses\n\nReturns the list of public egress IP Addresses for a hosted customer's instance\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Git Branch", + "description": "Public Egress IP Addresses", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitBranch" + "$ref": "#/components/schemas/EgressIpAddresses" } } } @@ -14830,6 +15717,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -14854,32 +15751,23 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/embed_config/secrets": { "post": { "tags": [ - "Project" - ], - "operationId": "create_git_branch", - "summary": "Checkout New Git Branch", - "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "create_embed_secret", + "summary": "Create Embed Secret", + "description": "### Create an embed secret using the specified information.\n\nThe value of the `secret` field will be set by Looker and returned.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "responses": { "200": { - "description": "Git Branch", + "description": "embed secret", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitBranch" + "$ref": "#/components/schemas/EmbedSecret" } } } @@ -14894,6 +15782,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -14942,26 +15840,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitBranch" + "$ref": "#/components/schemas/EmbedSecret" } } }, - "description": "Git Branch", - "required": true + "description": "embed secret", + "required": false } - }, - "put": { + } + }, + "/embed_config/secrets/{embed_secret_id}": { + "delete": { "tags": [ - "Project" + "Auth" ], - "operationId": "update_git_branch", - "summary": "Update Project Git Branch", - "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", + "operationId": "delete_embed_secret", + "summary": "Delete Embed Secret", + "description": "### Delete an embed secret.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "parameters": [ { - "name": "project_id", + "name": "embed_secret_id", "in": "path", - "description": "Project Id", + "description": "Id of Embed Secret", "required": true, "schema": { "type": "string" @@ -14969,12 +15869,12 @@ } ], "responses": { - "200": { - "description": "Git Branch", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitBranch" + "type": "string" } } } @@ -14989,8 +15889,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -14999,12 +15899,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -15022,55 +15922,24 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GitBranch" - } - } - }, - "description": "Git Branch", - "required": true - } + "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_branch/{branch_name}": { - "get": { + "/embed/sso_url": { + "post": { "tags": [ - "Project" - ], - "operationId": "find_git_branch", - "summary": "Find a Git Branch", - "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "branch_name", - "in": "path", - "description": "Branch Name", - "required": true, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "create_sso_embed_url", + "summary": "Create Signed Embed Url", + "description": "### Create Signed Embed URL\n\nCreates a signed embed URL and cryptographically signs it with an embed secret.\nThis signed URL can then be used to instantiate a Looker embed session in a PBL web application.\nDo not make any modifications to the returned URL - any change may invalidate the signature and\ncause the URL to fail to load a Looker embed session.\n\nA signed embed URL can only be **used once**. After the URL has been used to request a page from the\nLooker server, it is invalid. Future requests using the same URL will fail. This is to prevent\n'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker UI page - scheme, hostname, path and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker URL would look like `https:/myname.looker.com/dashboards/56?Date=1%20years`.\nThe best way to obtain this `target_url` is to navigate to the desired Looker page in your web browser and use the \"Get embed URL\" menu option\nto copy it to your clipboard and paste it into the `target_url` property as a quoted string value in this API request.\n\nPermissions for the embed user are defined by the groups in which the embed user is a member (`group_ids` property)\nand the lists of models and permissions assigned to the embed user.\nAt a minimum, you must provide values for either the `group_ids` property, or **both** the models and permissions properties.\nThese properties are additive; an embed user can be a member of certain groups AND be granted access to models and permissions.\n\nThe embed user's access is the union of permissions granted by the `group_ids`, `models`, and `permissions` properties.\n\nThis function does not strictly require all group_ids, user attribute names, or model names to exist at the moment the\nembed url is created. Unknown group_id, user attribute names or model names will be passed through to the output URL.\nBecause of this, **these parameters are not validated** when the API call is made.\n\nThe [Get Embed Url](https://docs.cloud.google.com/looker/docs/r/get-signed-url) dialog can be used to determine and validate the correct permissions for signing an embed url.\nThis dialog also provides the SDK syntax for the API call to make. Alternatively, you can copy the signed URL into the Embed URI Validator text box\nin `/admin/embed` to diagnose potential problems.\n\nThe `secret_id` parameter is optional. If specified, its value must be the id of an active secret defined in the Looker instance.\nif not specified, the URL will be signed using the most recent active signing secret. If there is no active secret for signing embed urls,\na default secret will be created. This default secret is encrypted using HMAC/SHA-256.\n\nThe `embed_domain` parameter is optional. If specified and valid, the domain will be added to the embed domain allowlist if it is missing.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "responses": { "200": { - "description": "Git Branch", + "description": "Signed Embed URL", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitBranch" + "$ref": "#/components/schemas/EmbedUrlResponse" } } } @@ -15085,6 +15954,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -15095,6 +15974,26 @@ } } }, + "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": { @@ -15107,43 +16006,36 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "delete": { - "tags": [ - "Project" - ], - "operationId": "delete_git_branch", - "summary": "Delete a Git Branch", - "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" + "x-looker-activity-type": "none", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbedSsoParams" + } } }, - { - "name": "branch_name", - "in": "path", - "description": "Branch Name", - "required": true, - "schema": { - "type": "string" - } - } + "description": "Signed Embed URL parameters", + "required": true + } + } + }, + "/embed/token_url/me": { + "post": { + "tags": [ + "Auth" ], + "operationId": "create_embed_url_as_me", + "summary": "Create Embed URL", + "description": "### Create an Embed URL\n\nCreates an embed URL that runs as the Looker user making this API call. (\"Embed as me\")\nThis embed URL can then be used to instantiate a Looker embed session in a\n\"Powered by Looker\" (PBL) web application.\n\nThis is similar to Private Embedding (https://docs.cloud.google.com/looker/docs/r/admin/embed/private-embed). Instead of\nlogging into the Web UI to authenticate, the user has already authenticated against the API to be able to\nmake this call. However, unlike Private Embed where the user has access to any other part of the Looker UI,\nthe embed web session created by requesting the EmbedUrlResponse.url in a browser only has access to\ncontent visible under the `/embed` context.\n\nAn embed URL can only be used once, and must be used within 5 minutes of being created. After it\nhas been used to request a page from the Looker server, the URL is invalid. Future requests using\nthe same URL will fail. This is to prevent 'replay attacks'.\n\nThe `target_url` property must be a complete URL of a Looker Embedded UI page - scheme, hostname, path starting with \"/embed\" and query params.\nTo load a dashboard with id 56 and with a filter of `Date=1 years`, the looker Embed URL would look like `https://myname.looker.com/embed/dashboards/56?Date=1%20years`.\nThe best way to obtain this target_url is to navigate to the desired Looker page in your web browser,\ncopy the URL shown in the browser address bar, insert \"/embed\" after the host/port, and paste it into the `target_url` property as a quoted string value in this API request.\n\n#### Security Note\nProtect this signed URL as you would an access token or password credentials - do not write\nit to disk, do not pass it to a third party, and only pass it through a secure HTTPS\nencrypted transport.\n\n\n", "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Embed URL", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/EmbedUrlResponse" } } } @@ -15158,6 +16050,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -15168,6 +16070,26 @@ } } }, + "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": { @@ -15180,25 +16102,47 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-activity-type": "none", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbedParams" + } + } + }, + "description": "Embed parameters", + "required": true + } } }, - "/golden_queries": { - "post": { + "/embed/sso/validate": { + "get": { "tags": [ - "ConversationalAnalytics" + "Auth" + ], + "operationId": "validate_embed_url", + "summary": "Get Embed URL Validation", + "description": "### Validate a Signed Embed URL\n\n", + "parameters": [ + { + "name": "url", + "in": "query", + "description": "URL to validate", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_golden_query", - "summary": "Create Golden Query", - "description": "### Create Golden Query\n\nCreates a golden query.\n", "responses": { "200": { - "description": "Golden Query", + "description": "Embed URL Validation", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GoldenQuery" + "$ref": "#/components/schemas/EmbedUrlResponse" } } } @@ -15213,8 +16157,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -15223,8 +16167,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -15254,49 +16198,26 @@ } } }, - "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 - } + "x-looker-status": "alpha", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true } }, - "/golden_queries/{golden_query_id}": { - "patch": { + "/embed/cookieless_session/acquire": { + "post": { "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" - } - } + "Auth" ], + "operationId": "acquire_embed_cookieless_session", + "summary": "Create Acquire cookieless embed session", + "description": "### Acquire a cookieless embed session.\n\nThe acquire session endpoint negates the need for signing the embed url and passing it as a parameter\nto the embed login. This endpoint accepts an embed user definition and creates or updates it. This is\nsimilar behavior to the embed SSO login as they both can create and update embed user data.\n\nThe endpoint also accepts an optional `session_reference_token`. If present and the session has not expired\nand the credentials match the credentials for the embed session, a new authentication token will be\ngenerated. This allows the embed session to attach a new embedded IFRAME to the embed session. Note that\nthe session is NOT extended in this scenario. In other words the session_length parameter is ignored.\n\n**IMPORTANT:** If the `session_reference_token` is provided and the session has NOT expired, the embed user\nis NOT updated. This is done for performance reasons and to support the embed SSO usecase where the\nfirst IFRAME created on a page uses a signed url and subsequently created IFRAMEs do not.\n\nIf the `session_reference_token` is provided but the session has expired, the token will be ignored and a\nnew embed session will be created. Note that the embed user definition will be updated in this scenario.\n\nIf the credentials do not match the credentials associated with an existing session_reference_token, a\n404 will be returned.\n\nThe endpoint returns the following:\n- Authentication token - a token that is passed to `/embed/login` endpoint that creates or attaches to the\n embed session. This token can be used once and has a lifetime of 30 seconds.\n- Session reference token - a token that lives for the length of the session. This token is used to\n generate new api and navigation tokens OR create new embed IFRAMEs.\n- Api token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into the\n iframe.\n- Navigation token - lives for 10 minutes. The Looker client will ask for this token once it is loaded into\n the iframe.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "responses": { "200": { - "description": "Golden Query", + "description": "Embed cookieless acquire session response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GoldenQuery" + "$ref": "#/components/schemas/EmbedCookielessSessionAcquireResponse" } } } @@ -15311,6 +16232,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -15321,6 +16252,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -15342,37 +16283,38 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "none", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GoldenQuery" + "$ref": "#/components/schemas/EmbedCookielessSessionAcquire" } } }, - "description": "Golden Query", + "description": "Embed user details", "required": true } - }, + } + }, + "/embed/cookieless_session/{session_reference_token}": { "delete": { "tags": [ - "ConversationalAnalytics" + "Auth" ], - "operationId": "delete_golden_query", - "summary": "Delete Golden Query", - "description": "### Delete Golden Query\n\nDeletes a golden query by ID.\n", + "operationId": "delete_embed_cookieless_session", + "summary": "Delete cookieless embed session", + "description": "### Delete cookieless embed session\n\nThis will delete the session associated with the given session reference token. Calling this endpoint will result\nin the session and session reference data being cleared from the system. This endpoint can be used to log an embed\nuser out of the Looker instance.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", "parameters": [ { - "name": "golden_query_id", + "name": "session_reference_token", "in": "path", - "description": "Golden Query ID", + "description": "Embed session reference token", "required": true, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } } ], @@ -15397,8 +16339,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -15407,7 +16349,27 @@ } } }, - "429": { + "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": { @@ -15418,122 +16380,134 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "none", "x-looker-rate-limited": true } }, - "/groups": { - "get": { + "/embed/cookieless_session/generate_tokens": { + "put": { "tags": [ - "Group" + "Auth" ], - "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" + "operationId": "generate_tokens_for_cookieless_session", + "summary": "Generate tokens for cookieless embed session", + "description": "### Generate api and navigation tokens for a cookieless embed session\n\nThe generate tokens endpoint is used to create new tokens of type:\n- Api token.\n- Navigation token.\nThe generate tokens endpoint should be called every time the Looker client asks for a token (except for the\nfirst time when the tokens returned by the acquire_session endpoint should be used).\n\n#### Embed session expiration handling\n\nThis endpoint does NOT return an error when the embed session expires. This is to simplify processing\nin the caller as errors can happen for non session expiration reasons. Instead the endpoint returns\nthe session time to live in the `session_reference_token_ttl` response property. If this property\ncontains a zero, the embed session has expired.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.\n", + "responses": { + "200": { + "description": "Generated api and navigations tokens for the cookieless embed session.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbedCookielessSessionGenerateTokensResponse" + } + } } }, - { - "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" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "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" + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "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" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "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" + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } } }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "schema": { - "type": "string" + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } - }, - { - "name": "ids", - "in": "query", - "description": "Optional of ids to get specific groups.", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string" + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "none", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbedCookielessSessionGenerateTokens" } } }, + "description": "Embed session reference token", + "required": true + } + } + }, + "/external_oauth_applications": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "all_external_oauth_applications", + "summary": "Get All External OAuth Applications", + "description": "### Get all External OAuth Applications.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", + "parameters": [ { - "name": "content_metadata_id", + "name": "name", "in": "query", - "description": "Id of content metadata to which groups must have access.", + "description": "Application name", "required": false, "schema": { "type": "string" } }, { - "name": "can_add_to_content_metadata", + "name": "client_id", "in": "query", - "description": "Select only groups that either can/cannot be given access to content.", + "description": "Application Client ID", "required": false, "schema": { - "type": "boolean" + "type": "string" } } ], "responses": { "200": { - "description": "Group", + "description": "External OAuth Application", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Group" + "$ref": "#/components/schemas/ExternalOauthApplication" } } } @@ -15570,35 +16544,24 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, "post": { "tags": [ - "Group" - ], - "operationId": "create_group", - "summary": "Create Group", - "description": "### Creates a new group (admin only).\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } + "Connection" ], + "operationId": "create_external_oauth_application", + "summary": "Create External OAuth Application", + "description": "### Create an OAuth Application using the specified configuration.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", "responses": { "200": { - "description": "Group", + "description": "External OAuth Application", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Group" + "$ref": "#/components/schemas/ExternalOauthApplication" } } } @@ -15654,134 +16617,48 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Group" + "$ref": "#/components/schemas/ExternalOauthApplication" } } }, - "description": "Group", + "description": "External OAuth Application", "required": true } } }, - "/groups/search": { - "get": { + "/external_oauth_applications/{client_id}": { + "patch": { "tags": [ - "Group" + "Connection" ], - "operationId": "search_groups", - "summary": "Search Groups", - "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "update_external_oauth_application", + "summary": "Update External OAuth Application", + "description": "### Update an OAuth Application's client secret.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "id", - "in": "query", - "description": "Match group id.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "name", - "in": "query", - "description": "Match group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "external_group_id", - "in": "query", - "description": "Match group external_group_id.", - "required": false, + "name": "client_id", + "in": "path", + "description": "The client ID of the OAuth App to update", + "required": true, "schema": { "type": "string" } - }, - { - "name": "externally_managed", - "in": "query", - "description": "Match group externally_managed.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "externally_orphaned", - "in": "query", - "description": "Match group externally_orphaned.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "Group", + "description": "External OAuth Application", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } + "$ref": "#/components/schemas/ExternalOauthApplication" } } } @@ -15806,6 +16683,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -15817,123 +16704,46 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/groups/search/with_roles": { - "get": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExternalOauthApplication" + } + } + }, + "description": "External OAuth Application", + "required": true + } + }, + "delete": { "tags": [ - "Group" + "Connection" ], - "operationId": "search_groups_with_roles", - "summary": "Search Groups with Roles", - "description": "### Search groups include roles\n\nReturns all group records that match the given search criteria, and attaches any associated roles.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "delete_external_oauth_application", + "summary": "Delete External OAuth Application", + "description": "### Delete an OAuth Application.\n\nThis is an OAuth Application which Looker uses to access external systems.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "id", - "in": "query", - "description": "Match group id.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "name", - "in": "query", - "description": "Match group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "external_group_id", - "in": "query", - "description": "Match group external_group_id.", - "required": false, + "name": "client_id", + "in": "path", + "description": "The client ID of the OAuth App to delete", + "required": true, "schema": { "type": "string" } - }, - { - "name": "externally_managed", - "in": "query", - "description": "Match group externally_managed.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "externally_orphaned", - "in": "query", - "description": "Match group externally_orphaned.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { - "200": { - "description": "Group", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupSearch" - } + "type": "string" } } } @@ -15969,129 +16779,52 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/groups/search/with_hierarchy": { - "get": { + "/external_oauth_applications/user_state": { + "post": { "tags": [ - "Group" + "Connection" ], - "operationId": "search_groups_with_hierarchy", - "summary": "Search Groups with Hierarchy", - "description": "### Search groups include hierarchy\n\nReturns all group records that match the given search criteria, and attaches\nassociated role_ids and parent group_ids.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" + "operationId": "create_oauth_application_user_state", + "summary": "Create Create OAuth user state.", + "description": "### Create OAuth User state.\n", + "responses": { + "200": { + "description": "Created user state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOAuthApplicationUserStateResponse" + } + } } }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "id", - "in": "query", - "description": "Match group id.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "name", - "in": "query", - "description": "Match group name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "external_group_id", - "in": "query", - "description": "Match group external_group_id.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "externally_managed", - "in": "query", - "description": "Match group externally_managed.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "externally_orphaned", - "in": "query", - "description": "Match group externally_orphaned.", - "required": false, - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "Group", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupHierarchy" - } + "$ref": "#/components/schemas/Error" } } } }, - "400": { - "description": "Bad Request", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -16100,12 +16833,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -16121,50 +16854,47 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOAuthApplicationUserStateRequest" + } + } + }, + "description": "Create OAuth user state.", + "required": true + } } }, - "/groups/{group_id}": { - "get": { + "/conversational_analytics/chat": { + "post": { "tags": [ - "Group" - ], - "operationId": "group", - "summary": "Get Group", - "description": "### Get information about a group.\n", - "parameters": [ - { - "name": "group_id", - "in": "path", - "description": "Id of group", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } + "ConversationalAnalytics" ], + "operationId": "conversational_analytics_chat", + "summary": "Chat", + "description": "## Takes the latest conversation context (ID and a user message) and\n## returns a list of newly generated system messages.\n", "responses": { "200": { - "description": "Group", + "description": "A list of message objects generated in response to the user's input.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Group" + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessage" + } } } } }, + "202": { + "description": "Accepted" + }, "400": { "description": "Bad Request", "content": { @@ -16175,6 +16905,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -16194,46 +16934,63 @@ } } } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "patch": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConversationalAnalyticsChatRequest" + } + } + }, + "description": "Conversation context necessary for generating new messages.", + "required": true + } + } + }, + "/projects/{project_id}/git_branches": { + "get": { "tags": [ - "Group" + "Project" ], - "operationId": "update_group", - "summary": "Update Group", - "description": "### Updates the a group (admin only).", + "operationId": "all_git_branches", + "summary": "Get All Git Branches", + "description": "### Get All Git Branches\n\nReturns a list of git branches in the project repository\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Group", + "description": "Git Branch", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Group" + "type": "array", + "items": { + "$ref": "#/components/schemas/GitBranch" + } } } } @@ -16248,16 +17005,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -16268,16 +17015,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -16291,31 +17028,22 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Group" - } - } - }, - "description": "Group", - "required": true - } - }, - "delete": { + "x-looker-rate-limited": true + } + }, + "/projects/{project_id}/git_branch": { + "get": { "tags": [ - "Group" + "Project" ], - "operationId": "delete_group", - "summary": "Delete Group", - "description": "### Deletes a group (admin only).\n", + "operationId": "git_branch", + "summary": "Get Active Git Branch", + "description": "### Get the Current Git Branch\n\nReturns the git branch currently checked out in the given project repository\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "schema": { "type": "string" @@ -16323,12 +17051,12 @@ } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Git Branch", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/GitBranch" } } } @@ -16343,16 +17071,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -16377,46 +17095,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/groups/{group_id}/groups": { - "get": { + }, + "post": { "tags": [ - "Group" + "Project" ], - "operationId": "all_group_groups", - "summary": "Get All Groups in Group", - "description": "### Get information about all the groups in a group\n", + "operationId": "create_git_branch", + "summary": "Checkout New Git Branch", + "description": "### Create and Checkout a Git Branch\n\nCreates and checks out a new branch in the given project repository\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nOptionally specify a branch name, tag name or commit SHA as the start point in the ref field.\n If no ref is specified, HEAD of the current branch will be used as the start point for the new branch.\n\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "All groups in group.", + "description": "Git Branch", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } + "$ref": "#/components/schemas/GitBranch" } } } @@ -16441,6 +17145,26 @@ } } }, + "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": { @@ -16454,20 +17178,31 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GitBranch" + } + } + }, + "description": "Git Branch", + "required": true + } }, - "post": { + "put": { "tags": [ - "Group" + "Project" ], - "operationId": "add_group_group", - "summary": "Add a Group to Group", - "description": "### Adds a new group to a group.\n", + "operationId": "update_git_branch", + "summary": "Update Project Git Branch", + "description": "### Checkout and/or reset --hard an existing Git Branch\n\nOnly allowed in development mode\n - Call `update_session` to select the 'dev' workspace.\n\nCheckout an existing branch if name field is different from the name of the currently checked out branch.\n\nOptionally specify a branch name, tag name or commit SHA to which the branch should be reset.\n **DANGER** hard reset will be force pushed to the remote. Unsaved changes and commits may be permanently lost.\n\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "schema": { "type": "string" @@ -16476,11 +17211,11 @@ ], "responses": { "200": { - "description": "Added group.", + "description": "Git Branch", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Group" + "$ref": "#/components/schemas/GitBranch" } } } @@ -16495,8 +17230,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -16505,12 +17240,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -16533,89 +17268,38 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GroupIdForGroupInclusion" + "$ref": "#/components/schemas/GitBranch" } } }, - "description": "Group id to add", + "description": "Git Branch", "required": true } } }, - "/groups/{group_id}/users": { + "/projects/{project_id}/git_branch/{branch_name}": { "get": { "tags": [ - "Group" + "Project" ], - "operationId": "all_group_users", - "summary": "Get All Users in Group", - "description": "### Get information about all the users directly included in a group.\n", + "operationId": "find_git_branch", + "summary": "Find a Git Branch", + "description": "### Get the specified Git Branch\n\nReturns the git branch specified in branch_name path param if it exists in the given project repository\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", "required": true, "schema": { "type": "string" } }, { - "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, + "name": "branch_name", + "in": "path", + "description": "Branch Name", + "required": true, "schema": { "type": "string" } @@ -16623,14 +17307,11 @@ ], "responses": { "200": { - "description": "All users in group.", + "description": "Git Branch", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } + "$ref": "#/components/schemas/GitBranch" } } } @@ -16670,18 +17351,27 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "delete": { "tags": [ - "Group" + "Project" ], - "operationId": "add_group_user", - "summary": "Add a User to Group", - "description": "### Adds a new user to a group.\n", + "operationId": "delete_git_branch", + "summary": "Delete a Git Branch", + "description": "### Delete the specified Git Branch\n\nDelete git branch specified in branch_name path param from local and remote of specified project repository\n", "parameters": [ { - "name": "group_id", + "name": "project_id", "in": "path", - "description": "Id of group", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch_name", + "in": "path", + "description": "Branch Name", "required": true, "schema": { "type": "string" @@ -16689,12 +17379,12 @@ } ], "responses": { - "200": { - "description": "Added user.", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "type": "string" } } } @@ -16709,16 +17399,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -16742,64 +17422,30 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupIdForGroupUserInclusion" - } - } - }, - "description": "User id to add", - "required": true - } + "x-looker-rate-limited": true } }, - "/groups/{group_id}/users/{user_id}": { - "delete": { + "/golden_queries": { + "post": { "tags": [ - "Group" - ], - "operationId": "delete_group_user", - "summary": "Remove a User from Group", - "description": "### Removes a user from a group.\n", - "parameters": [ - { - "name": "group_id", - "in": "path", - "description": "Id of group", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "user_id", - "in": "path", - "description": "Id of user to remove from group", - "required": true, - "schema": { - "type": "string" - } - } + "ConversationalAnalytics" ], + "operationId": "create_golden_query", + "summary": "Create Golden Query", + "description": "### Create Golden Query\n\nCreates a golden query.\n", "responses": { - "204": { - "description": "User successfully removed from group" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "Golden Query", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/GoldenQuery" } } } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -16818,66 +17464,8 @@ } } }, - "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 - } - }, - "/groups/{group_id}/groups/{deleting_group_id}": { - "delete": { - "tags": [ - "Group" - ], - "operationId": "delete_group_from_group", - "summary": "Deletes a Group from Group", - "description": "### Removes a group from a group.\n", - "parameters": [ - { - "name": "group_id", - "in": "path", - "description": "Id of group", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "deleting_group_id", - "in": "path", - "description": "Id of group to delete", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Group successfully deleted" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "403": { - "description": "Permission Denied", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -16886,12 +17474,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -16907,46 +17495,49 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "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 + } } }, - "/groups/{group_id}/attribute_values/{user_attribute_id}": { + "/golden_queries/{golden_query_id}": { "patch": { "tags": [ - "Group" + "ConversationalAnalytics" ], - "operationId": "update_user_attribute_group_value", - "summary": "Set User Attribute Group Value", - "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", + "operationId": "update_golden_query", + "summary": "Update Golden Query", + "description": "### Update Golden Query\n\nUpdates a golden query.\n", "parameters": [ { - "name": "group_id", - "in": "path", - "description": "Id of group", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "user_attribute_id", + "name": "golden_query_id", "in": "path", - "description": "Id of user attribute", + "description": "Golden Query ID", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } } ], "responses": { "200": { - "description": "Group value object.", + "description": "Golden Query", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttributeGroupValue" + "$ref": "#/components/schemas/GoldenQuery" } } } @@ -16961,16 +17552,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -17002,64 +17583,53 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttributeGroupValue" + "$ref": "#/components/schemas/GoldenQuery" } } }, - "description": "New value for group.", + "description": "Golden Query", "required": true } }, "delete": { "tags": [ - "Group" + "ConversationalAnalytics" ], - "operationId": "delete_user_attribute_group_value", - "summary": "Delete User Attribute Group Value", - "description": "### Remove a user attribute value from a group.\n", + "operationId": "delete_golden_query", + "summary": "Delete Golden Query", + "description": "### Delete Golden Query\n\nDeletes a golden query by ID.\n", "parameters": [ { - "name": "group_id", - "in": "path", - "description": "Id of group", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "user_attribute_id", + "name": "golden_query_id", "in": "path", - "description": "Id of user attribute", + "description": "Golden Query ID", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } } ], "responses": { "204": { - "description": "Value successfully unset" - }, - "400": { - "description": "Bad Request", + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "type": "string" } } } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -17089,19 +17659,19 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/boards": { + "/groups": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "all_boards", - "summary": "Get All Boards", - "description": "### Get information about all boards.\n", + "operationId": "all_groups", + "summary": "Get All Groups", + "description": "### Get information about all groups.\n", "parameters": [ { "name": "fields", @@ -17111,17 +17681,100 @@ "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": "Board", + "description": "Group", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Board" + "$ref": "#/components/schemas/Group" } } } @@ -17164,11 +17817,11 @@ }, "post": { "tags": [ - "Board" + "Group" ], - "operationId": "create_board", - "summary": "Create Board", - "description": "### Create a new board.\n", + "operationId": "create_group", + "summary": "Create Group", + "description": "### Creates a new group (admin only).\n", "parameters": [ { "name": "fields", @@ -17182,11 +17835,11 @@ ], "responses": { "200": { - "description": "Board", + "description": "Group", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Board" + "$ref": "#/components/schemas/Group" } } } @@ -17249,60 +17902,24 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Board" + "$ref": "#/components/schemas/Group" } } }, - "description": "Board", + "description": "Group", "required": true } } }, - "/boards/search": { + "/groups/search": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "search_boards", - "summary": "Search Boards", - "description": "### Search Boards\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "search_groups", + "summary": "Search Groups", + "description": "### Search groups\n\nReturns all group records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ - { - "name": "title", - "in": "query", - "description": "Matches board title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "created_at", - "in": "query", - "description": "Matches the timestamp for when the board was created.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "first_name", - "in": "query", - "description": "The first name of the user who created this board.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "last_name", - "in": "query", - "description": "The last name of the user who created this board.", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -17313,102 +17930,98 @@ } }, { - "name": "favorited", + "name": "limit", "in": "query", - "description": "Return favorited boards when true.", + "description": "Number of results to return (used with `offset`).", "required": false, "schema": { - "type": "boolean" + "type": "integer", + "format": "int64" } }, { - "name": "creator_id", + "name": "offset", "in": "query", - "description": "Filter on boards created by a particular user.", + "description": "Number of results to skip before returning any (used with `limit`).", "required": false, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } }, { "name": "sorts", "in": "query", - "description": "The fields to sort the results by", + "description": "Fields to sort by.", "required": false, "schema": { "type": "string" } }, { - "name": "page", + "name": "filter_or", "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "description": "Combine given search criteria in a boolean OR expression", "required": false, - "deprecated": true, "schema": { - "type": "integer", - "format": "int64" + "type": "boolean" } }, { - "name": "per_page", + "name": "id", "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "description": "Match group id.", "required": false, - "deprecated": true, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } }, { - "name": "offset", + "name": "name", "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "description": "Match group name.", "required": false, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } }, { - "name": "limit", + "name": "external_group_id", "in": "query", - "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "description": "Match group external_group_id.", "required": false, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } }, { - "name": "filter_or", + "name": "externally_managed", "in": "query", - "description": "Combine given search criteria in a boolean OR expression", + "description": "Match group externally_managed.", "required": false, "schema": { "type": "boolean" } }, { - "name": "permission", + "name": "externally_orphaned", "in": "query", - "description": "Filter results based on permission, either show (default) or update", + "description": "Match group externally_orphaned.", "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { "200": { - "description": "boards", + "description": "Group", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Board" + "$ref": "#/components/schemas/Group" } } } @@ -17450,199 +18063,118 @@ "x-looker-rate-limited": true } }, - "/boards/{board_id}": { + "/groups/search/with_roles": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "board", - "summary": "Get Board", - "description": "### Get information about a board.\n", + "operationId": "search_groups_with_roles", + "summary": "Search Groups with Roles", + "description": "### Search groups include roles\n\nReturns all group records that match the given search criteria, and attaches any associated roles.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "board_id", - "in": "path", - "description": "Id of board", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } }, { - "name": "fields", + "name": "limit", "in": "query", - "description": "Requested fields.", + "description": "Number of results to return (used with `offset`).", "required": false, "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Board", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Board" - } - } + "type": "integer", + "format": "int64" } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" } }, - "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 - }, - "patch": { - "tags": [ - "Board" - ], - "operationId": "update_board", - "summary": "Update Board", - "description": "### Update a board definition.\n", - "parameters": [ { - "name": "board_id", - "in": "path", - "description": "Id of board", - "required": true, + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, "schema": { - "type": "string" + "type": "boolean" } }, { - "name": "fields", + "name": "id", "in": "query", - "description": "Requested fields.", + "description": "Match group id.", "required": false, "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "Board", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Board" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "name", + "in": "query", + "description": "Match group name.", + "required": false, + "schema": { + "type": "string" } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } + { + "name": "external_group_id", + "in": "query", + "description": "Match group external_group_id.", + "required": false, + "schema": { + "type": "string" } }, - "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": { - "$ref": "#/components/schemas/Board" - } + { + "name": "externally_managed", + "in": "query", + "description": "Match group externally_managed.", + "required": false, + "schema": { + "type": "boolean" } }, - "description": "Board", - "required": true - } - }, - "delete": { - "tags": [ - "Board" - ], - "operationId": "delete_board", - "summary": "Delete Board", - "description": "### Delete a board.\n", - "parameters": [ { - "name": "board_id", - "in": "path", - "description": "Id of board", - "required": true, + "name": "externally_orphaned", + "in": "query", + "description": "Match group externally_orphaned.", + "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Group", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupSearch" + } } } } @@ -17683,14 +18215,14 @@ "x-looker-rate-limited": true } }, - "/board_items": { + "/groups/search/with_hierarchy": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "all_board_items", - "summary": "Get All Board Items", - "description": "### Get information about all board items.\n", + "operationId": "search_groups_with_hierarchy", + "summary": "Search Groups with Hierarchy", + "description": "### Search groups include hierarchy\n\nReturns all group records that match the given search criteria, and attaches\nassociated role_ids and parent group_ids.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { "name": "fields", @@ -17701,6 +18233,26 @@ "type": "string" } }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, { "name": "sorts", "in": "query", @@ -17711,89 +18263,70 @@ } }, { - "name": "board_section_id", + "name": "filter_or", "in": "query", - "description": "Filter to a specific board section", + "description": "Combine given search criteria in a boolean OR expression", "required": false, "schema": { - "type": "string" + "type": "boolean" } - } - ], - "responses": { - "200": { - "description": "Board Item", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BoardItem" - } - } - } + }, + { + "name": "id", + "in": "query", + "description": "Match group id.", + "required": false, + "schema": { + "type": "string" } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "name", + "in": "query", + "description": "Match group name.", + "required": false, + "schema": { + "type": "string" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "external_group_id", + "in": "query", + "description": "Match group external_group_id.", + "required": false, + "schema": { + "type": "string" } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "externally_managed", + "in": "query", + "description": "Match group externally_managed.", + "required": false, + "schema": { + "type": "boolean" } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "post": { - "tags": [ - "Board" - ], - "operationId": "create_board_item", - "summary": "Create Board Item", - "description": "### Create a new board item.\n", - "parameters": [ + }, { - "name": "fields", + "name": "externally_orphaned", "in": "query", - "description": "Requested fields.", + "description": "Match group externally_orphaned.", "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { "200": { - "description": "Board Item", + "description": "Group", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardItem" + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupHierarchy" + } } } } @@ -17818,26 +18351,6 @@ } } }, - "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": { @@ -17851,33 +18364,22 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BoardItem" - } - } - }, - "description": "Board Item", - "required": true - } + "x-looker-rate-limited": true } }, - "/board_items/{board_item_id}": { + "/groups/{group_id}": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "board_item", - "summary": "Get Board Item", - "description": "### Get information about a board item.\n", + "operationId": "group", + "summary": "Get Group", + "description": "### Get information about a group.\n", "parameters": [ { - "name": "board_item_id", + "name": "group_id", "in": "path", - "description": "Id of board item", + "description": "Id of group", "required": true, "schema": { "type": "string" @@ -17895,11 +18397,11 @@ ], "responses": { "200": { - "description": "Board Item", + "description": "Group", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardItem" + "$ref": "#/components/schemas/Group" } } } @@ -17941,16 +18443,16 @@ }, "patch": { "tags": [ - "Board" + "Group" ], - "operationId": "update_board_item", - "summary": "Update Board Item", - "description": "### Update a board item definition.\n", + "operationId": "update_group", + "summary": "Update Group", + "description": "### Updates the a group (admin only).", "parameters": [ { - "name": "board_item_id", + "name": "group_id", "in": "path", - "description": "Id of board item", + "description": "Id of group", "required": true, "schema": { "type": "string" @@ -17968,11 +18470,11 @@ ], "responses": { "200": { - "description": "Board Item", + "description": "Group", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardItem" + "$ref": "#/components/schemas/Group" } } } @@ -17987,6 +18489,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -18025,26 +18537,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardItem" + "$ref": "#/components/schemas/Group" } } }, - "description": "Board Item", + "description": "Group", "required": true } }, "delete": { "tags": [ - "Board" + "Group" ], - "operationId": "delete_board_item", - "summary": "Delete Board Item", - "description": "### Delete a board item.\n", + "operationId": "delete_group", + "summary": "Delete Group", + "description": "### Deletes a group (admin only).\n", "parameters": [ { - "name": "board_item_id", + "name": "group_id", "in": "path", - "description": "Id of board item", + "description": "Id of group", "required": true, "schema": { "type": "string" @@ -18072,67 +18584,8 @@ } } }, - "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 - } - }, - "/primary_homepage_sections": { - "get": { - "tags": [ - "Homepage" - ], - "operationId": "all_primary_homepage_sections", - "summary": "Get All Primary homepage sections", - "description": "### Get information about the primary homepage's sections.\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Primary homepage section", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HomepageSection" - } - } - } - } - }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -18167,28 +18620,28 @@ "x-looker-rate-limited": true } }, - "/board_sections": { + "/groups/{group_id}/groups": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "all_board_sections", - "summary": "Get All Board sections", - "description": "### Get information about all board sections.\n", + "operationId": "all_group_groups", + "summary": "Get All Groups in Group", + "description": "### Get information about all the groups in a group\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, "schema": { "type": "string" } }, { - "name": "sorts", + "name": "fields", "in": "query", - "description": "Fields to sort by.", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -18197,13 +18650,13 @@ ], "responses": { "200": { - "description": "Board section", + "description": "All groups in group.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/BoardSection" + "$ref": "#/components/schemas/Group" } } } @@ -18246,17 +18699,17 @@ }, "post": { "tags": [ - "Board" + "Group" ], - "operationId": "create_board_section", - "summary": "Create Board section", - "description": "### Create a new board section.\n", + "operationId": "add_group_group", + "summary": "Add a Group to Group", + "description": "### Adds a new group to a group.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, "schema": { "type": "string" } @@ -18264,11 +18717,11 @@ ], "responses": { "200": { - "description": "Board section", + "description": "Added group.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardSection" + "$ref": "#/components/schemas/Group" } } } @@ -18283,8 +18736,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -18293,8 +18746,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -18303,16 +18756,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -18331,28 +18774,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardSection" + "$ref": "#/components/schemas/GroupIdForGroupInclusion" } } }, - "description": "Board section", + "description": "Group id to add", "required": true } } }, - "/board_sections/{board_section_id}": { + "/groups/{group_id}/users": { "get": { "tags": [ - "Board" + "Group" ], - "operationId": "board_section", - "summary": "Get Board section", - "description": "### Get information about a board section.\n", + "operationId": "all_group_users", + "summary": "Get All Users in Group", + "description": "### Get information about all the users directly included in a group.\n", "parameters": [ { - "name": "board_section_id", + "name": "group_id", "in": "path", - "description": "Id of board section", + "description": "Id of group", "required": true, "schema": { "type": "string" @@ -18366,15 +18809,69 @@ "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" + } } ], "responses": { "200": { - "description": "Board section", + "description": "All users in group.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardSection" + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } } } } @@ -18414,40 +18911,31 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "Board" + "Group" ], - "operationId": "update_board_section", - "summary": "Update Board section", - "description": "### Update a board section definition.\n", + "operationId": "add_group_user", + "summary": "Add a User to Group", + "description": "### Adds a new user to a group.\n", "parameters": [ { - "name": "board_section_id", + "name": "group_id", "in": "path", - "description": "Id of board section", + "description": "Id of group", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Board section", + "description": "Added user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardSection" + "$ref": "#/components/schemas/User" } } } @@ -18462,8 +18950,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -18472,12 +18960,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -18500,26 +18988,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BoardSection" + "$ref": "#/components/schemas/GroupIdForGroupUserInclusion" } } }, - "description": "Board section", + "description": "User id to add", "required": true } - }, + } + }, + "/groups/{group_id}/users/{user_id}": { "delete": { "tags": [ - "Board" + "Group" ], - "operationId": "delete_board_section", - "summary": "Delete Board section", - "description": "### Delete a board section.\n", + "operationId": "delete_group_user", + "summary": "Remove a User from Group", + "description": "### Removes a user from a group.\n", "parameters": [ { - "name": "board_section_id", + "name": "group_id", "in": "path", - "description": "Id of board section", + "description": "Id of group", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "path", + "description": "Id of user to remove from group", "required": true, "schema": { "type": "string" @@ -18528,14 +19027,7 @@ ], "responses": { "204": { - "description": "Successfully deleted.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } + "description": "User successfully removed from group" }, "400": { "description": "Bad Request", @@ -18547,53 +19039,8 @@ } } }, - "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 - } - }, - "/internal/kda/analyze": { - "post": { - "tags": [ - "KeyDriverAnalysis" - ], - "operationId": "run_key_driver_analysis", - "summary": "Analyze Key Drivers", - "description": "### Analyze Key Drivers\n\nIdentifies the dimensional segments that most significantly drove a metric's change between two time periods.\n\nGiven a data source (a saved query or a model/explore pair), a contribution metric, and a list of\ndimensions to analyse, this endpoint compares a test (breach) period against a control (baseline)\nperiod and returns a ranked list of segment-level insights.\nEach insight reports the metric value in both periods, the absolute and relative difference, \nthe unexpected deviation (how much a segment over or under-performed relative to the overall trend), \nits proportional contribution to the total change, and its a-priori support (what share of total volume that segment represents).\n", - "responses": { - "200": { - "description": "Analysis result as JSON", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/KdaResponsePayload" - } - } - } - }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -18612,16 +19059,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -18633,57 +19070,55 @@ } } }, - "x-looker-status": "alpha", - "x-looker-activity-type": "db_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/KdaRequestPayload" - } - } - }, - "description": "Analysis parameters", - "required": true - } + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true } }, - "/integration_hubs": { - "get": { + "/groups/{group_id}/groups/{deleting_group_id}": { + "delete": { "tags": [ - "Integration" + "Group" ], - "operationId": "all_integration_hubs", - "summary": "Get All Integration Hubs", - "description": "### Get information about all Integration Hubs.\n", + "operationId": "delete_group_from_group", + "summary": "Deletes a Group from Group", + "description": "### Removes a group from a group.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "deleting_group_id", + "in": "path", + "description": "Id of group to delete", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "Integration Hub", + "204": { + "description": "Group successfully deleted" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IntegrationHub" - } + "$ref": "#/components/schemas/Error" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -18716,20 +19151,31 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/groups/{group_id}/attribute_values/{user_attribute_id}": { + "patch": { "tags": [ - "Integration" + "Group" ], - "operationId": "create_integration_hub", - "summary": "Create Integration Hub", - "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", + "operationId": "update_user_attribute_group_value", + "summary": "Set User Attribute Group Value", + "description": "### Set the value of a user attribute for a group.\n\nFor information about how user attribute values are calculated, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "group_id", + "in": "path", + "description": "Id of group", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, "schema": { "type": "string" } @@ -18737,11 +19183,11 @@ ], "responses": { "200": { - "description": "Integration Hub", + "description": "Group value object.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IntegrationHub" + "$ref": "#/components/schemas/UserAttributeGroupValue" } } } @@ -18756,8 +19202,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -18766,8 +19212,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -18804,56 +19250,57 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IntegrationHub" + "$ref": "#/components/schemas/UserAttributeGroupValue" } } }, - "description": "Integration Hub", + "description": "New value for group.", "required": true } - } - }, - "/integration_hubs/{integration_hub_id}": { - "get": { + }, + "delete": { "tags": [ - "Integration" + "Group" ], - "operationId": "integration_hub", - "summary": "Get Integration Hub", - "description": "### Get information about a Integration Hub.\n", + "operationId": "delete_user_attribute_group_value", + "summary": "Delete User Attribute Group Value", + "description": "### Remove a user attribute value from a group.\n", "parameters": [ { - "name": "integration_hub_id", + "name": "group_id", "in": "path", - "description": "Id of integration_hub", + "description": "Id of group", "required": true, "schema": { "type": "string" } }, { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "Integration Hub", + "204": { + "description": "Value successfully unset" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IntegrationHub" + "$ref": "#/components/schemas/Error" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -18886,24 +19333,17 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/boards": { + "get": { "tags": [ - "Integration" + "Board" ], - "operationId": "update_integration_hub", - "summary": "Update Integration Hub", - "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", + "operationId": "all_boards", + "summary": "Get All Boards", + "description": "### Get information about all boards.\n", "parameters": [ - { - "name": "integration_hub_id", - "in": "path", - "description": "Id of integration_hub", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -18916,11 +19356,14 @@ ], "responses": { "200": { - "description": "Integration Hub", + "description": "Board", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IntegrationHub" + "type": "array", + "items": { + "$ref": "#/components/schemas/Board" + } } } } @@ -18945,16 +19388,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -18968,44 +19401,33 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IntegrationHub" - } - } - }, - "description": "Integration Hub", - "required": true - } + "x-looker-rate-limited": true }, - "delete": { + "post": { "tags": [ - "Integration" + "Board" ], - "operationId": "delete_integration_hub", - "summary": "Delete Integration Hub", - "description": "### Delete a Integration Hub.\n", + "operationId": "create_board", + "summary": "Create Board", + "description": "### Create a new board.\n", "parameters": [ { - "name": "integration_hub_id", - "in": "path", - "description": "Id of integration_hub", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Board", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Board" } } } @@ -19030,73 +19452,8 @@ } } }, - "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 - } - }, - "/integration_hubs/{integration_hub_id}/health": { - "get": { - "tags": [ - "Integration" - ], - "operationId": "get_integration_hub_health", - "summary": "Check the health of Integration Hub", - "description": "Checks to see if the user is able to connect to their integration hub", - "parameters": [ - { - "name": "integration_hub_id", - "in": "path", - "description": "Id of integration_hub", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Health Result", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IntegrationHubHealthResult" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -19128,94 +19485,65 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Board" + } + } + }, + "description": "Board", + "required": true + } } }, - "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { - "post": { + "/boards/search": { + "get": { "tags": [ - "Integration" + "Board" ], - "operationId": "accept_integration_hub_legal_agreement", - "summary": "Accept Integration Hub Legal Agreement", - "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", - "parameters": [ - { - "name": "integration_hub_id", - "in": "path", - "description": "Id of integration_hub", - "required": true, + "operationId": "search_boards", + "summary": "Search Boards", + "description": "### Search Boards\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "title", + "in": "query", + "description": "Matches board title.", + "required": false, "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "Integration hub", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IntegrationHub" - } - } - } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "created_at", + "in": "query", + "description": "Matches the timestamp for when the board was created.", + "required": false, + "schema": { + "type": "string" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "first_name", + "in": "query", + "description": "The first name of the user who created this board.", + "required": false, + "schema": { + "type": "string" } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } + { + "name": "last_name", + "in": "query", + "description": "The last name of the user who created this board.", + "required": false, + "schema": { + "type": "string" } }, - "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 - } - }, - "/integrations": { - "get": { - "tags": [ - "Integration" - ], - "operationId": "all_integrations", - "summary": "Get All Integrations", - "description": "### Get information about all Integrations.\n", - "parameters": [ { "name": "fields", "in": "query", @@ -19226,9 +19554,87 @@ } }, { - "name": "integration_hub_id", + "name": "favorited", "in": "query", - "description": "Filter to a specific provider", + "description": "Return favorited boards when true.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "creator_id", + "in": "query", + "description": "Filter on boards created by a particular user.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "The fields to sort the results by", + "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": "offset", + "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": "limit", + "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": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "permission", + "in": "query", + "description": "Filter results based on permission, either show (default) or update", "required": false, "schema": { "type": "string" @@ -19237,13 +19643,13 @@ ], "responses": { "200": { - "description": "Integration", + "description": "boards", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/Board" } } } @@ -19285,19 +19691,19 @@ "x-looker-rate-limited": true } }, - "/integrations/{integration_id}": { + "/boards/{board_id}": { "get": { "tags": [ - "Integration" + "Board" ], - "operationId": "integration", - "summary": "Get Integration", - "description": "### Get information about a Integration.\n", + "operationId": "board", + "summary": "Get Board", + "description": "### Get information about a board.\n", "parameters": [ { - "name": "integration_id", + "name": "board_id", "in": "path", - "description": "Id of integration", + "description": "Id of board", "required": true, "schema": { "type": "string" @@ -19315,11 +19721,11 @@ ], "responses": { "200": { - "description": "Integration", + "description": "Board", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/Board" } } } @@ -19361,16 +19767,16 @@ }, "patch": { "tags": [ - "Integration" + "Board" ], - "operationId": "update_integration", - "summary": "Update Integration", - "description": "### Update parameters on a Integration.\n", + "operationId": "update_board", + "summary": "Update Board", + "description": "### Update a board definition.\n", "parameters": [ { - "name": "integration_id", + "name": "board_id", "in": "path", - "description": "Id of integration", + "description": "Id of board", "required": true, "schema": { "type": "string" @@ -19388,11 +19794,11 @@ ], "responses": { "200": { - "description": "Integration", + "description": "Board", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/Board" } } } @@ -19445,28 +19851,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Integration" + "$ref": "#/components/schemas/Board" } } }, - "description": "Integration", + "description": "Board", "required": true } - } - }, - "/integrations/{integration_id}/form": { - "post": { + }, + "delete": { "tags": [ - "Integration" + "Board" ], - "operationId": "fetch_integration_form", - "summary": "Fetch Remote Integration Form", - "description": "Returns the Integration form for presentation to the user.", + "operationId": "delete_board", + "summary": "Delete Board", + "description": "### Delete a board.\n", "parameters": [ { - "name": "integration_id", + "name": "board_id", "in": "path", - "description": "Id of integration", + "description": "Id of board", "required": true, "schema": { "type": "string" @@ -19474,12 +19878,12 @@ } ], "responses": { - "200": { - "description": "Data Action Form", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DataActionForm" + "type": "string" } } } @@ -19504,16 +19908,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -19527,37 +19921,41 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - }, - "description": "Integration Form Request", - "required": false - } + "x-looker-rate-limited": true } }, - "/integrations/{integration_id}/test": { - "post": { + "/board_items": { + "get": { "tags": [ - "Integration" + "Board" ], - "operationId": "test_integration", - "summary": "Test integration", - "description": "Tests the integration to make sure all the settings are working.", + "operationId": "all_board_items", + "summary": "Get All Board Items", + "description": "### Get information about all board items.\n", "parameters": [ { - "name": "integration_id", - "in": "path", - "description": "Id of integration", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "board_section_id", + "in": "query", + "description": "Filter to a specific board section", + "required": false, "schema": { "type": "string" } @@ -19565,11 +19963,14 @@ ], "responses": { "200": { - "description": "Test Result", + "description": "Board Item", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IntegrationTestResult" + "type": "array", + "items": { + "$ref": "#/components/schemas/BoardItem" + } } } } @@ -19594,16 +19995,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -19618,23 +20009,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/internal_help_resources_content": { - "get": { + }, + "post": { "tags": [ - "Config" + "Board" + ], + "operationId": "create_board_item", + "summary": "Create Board Item", + "description": "### Create a new board item.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "internal_help_resources_content", - "summary": "Get Internal Help Resources Content", - "description": "### Set the menu item name and content for internal help resources\n", "responses": { "200": { - "description": "Internal Help Resources Content", + "description": "Board Item", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InternalHelpResourcesContent" + "$ref": "#/components/schemas/BoardItem" } } } @@ -19659,51 +20059,8 @@ } } }, - "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 - }, - "patch": { - "tags": [ - "Config" - ], - "operationId": "update_internal_help_resources_content", - "summary": "Update internal help resources content", - "description": "Update internal help resources content\n", - "responses": { - "200": { - "description": "Internal Help Resources Content", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternalHelpResourcesContent" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -19740,30 +20097,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InternalHelpResourcesContent" + "$ref": "#/components/schemas/BoardItem" } } }, - "description": "Internal Help Resources Content", + "description": "Board Item", "required": true } } }, - "/internal_help_resources_enabled": { + "/board_items/{board_item_id}": { "get": { "tags": [ - "Config" + "Board" + ], + "operationId": "board_item", + "summary": "Get Board Item", + "description": "### Get information about a board item.\n", + "parameters": [ + { + "name": "board_item_id", + "in": "path", + "description": "Id of board item", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "internal_help_resources", - "summary": "Get Internal Help Resources", - "description": "### Get and set the options for internal help resources\n", "responses": { "200": { - "description": "Internal Help Resources", + "description": "Board Item", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InternalHelpResources" + "$ref": "#/components/schemas/BoardItem" } } } @@ -19802,23 +20179,41 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/internal_help_resources": { + }, "patch": { "tags": [ - "Config" + "Board" + ], + "operationId": "update_board_item", + "summary": "Update Board Item", + "description": "### Update a board item definition.\n", + "parameters": [ + { + "name": "board_item_id", + "in": "path", + "description": "Id of board item", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "update_internal_help_resources", - "summary": "Update internal help resources configuration", - "description": "Update internal help resources settings\n", "responses": { "200": { - "description": "Custom Welcome Email", + "description": "Board Item", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InternalHelpResources" + "$ref": "#/components/schemas/BoardItem" } } } @@ -19871,37 +20266,46 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InternalHelpResources" + "$ref": "#/components/schemas/BoardItem" } } }, - "description": "Custom Welcome Email", + "description": "Board Item", "required": true } - } - }, - "/ldap_config": { - "get": { + }, + "delete": { "tags": [ - "Auth" + "Board" + ], + "operationId": "delete_board_item", + "summary": "Delete Board Item", + "description": "### Delete a board item.\n", + "parameters": [ + { + "name": "board_item_id", + "in": "path", + "description": "Id of board item", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "ldap_config", - "summary": "Get LDAP Configuration", - "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://docs.cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "200": { - "description": "LDAP Configuration.", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LDAPConfig" + "type": "string" } } } }, - "403": { - "description": "Permission Denied", - "content": { + "400": { + "description": "Bad Request", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -19933,21 +20337,37 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/primary_homepage_sections": { + "get": { "tags": [ - "Auth" + "Homepage" + ], + "operationId": "all_primary_homepage_sections", + "summary": "Get All Primary homepage sections", + "description": "### Get information about the primary homepage's sections.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "update_ldap_config", - "summary": "Update LDAP Configuration", - "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://docs.cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "New state for LDAP Configuration.", + "description": "Primary homepage section", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LDAPConfig" + "type": "array", + "items": { + "$ref": "#/components/schemas/HomepageSection" + } } } } @@ -19962,8 +20382,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -19972,8 +20392,66 @@ } } }, - "404": { - "description": "Not Found", + "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 + } + }, + "/board_sections": { + "get": { + "tags": [ + "Board" + ], + "operationId": "all_board_sections", + "summary": "Get All Board sections", + "description": "### Get information about all board sections.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Board section", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BoardSection" + } + } + } + } + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -19982,12 +20460,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -20005,35 +20483,33 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LDAPConfig" - } - } - }, - "description": "LDAP Config", - "required": true - } - } - }, - "/ldap_config/test_connection": { - "put": { + "x-looker-rate-limited": true + }, + "post": { "tags": [ - "Auth" + "Board" + ], + "operationId": "create_board_section", + "summary": "Create Board section", + "description": "### Create a new board section.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "test_ldap_config_connection", - "summary": "Test LDAP Connection", - "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Result info.", + "description": "Board section", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LDAPConfigTestResult" + "$ref": "#/components/schemas/BoardSection" } } } @@ -20048,8 +20524,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -20058,8 +20534,8 @@ } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -20096,30 +20572,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LDAPConfig" + "$ref": "#/components/schemas/BoardSection" } } }, - "description": "LDAP Config", + "description": "Board section", "required": true } } }, - "/ldap_config/test_auth": { - "put": { + "/board_sections/{board_section_id}": { + "get": { "tags": [ - "Auth" + "Board" + ], + "operationId": "board_section", + "summary": "Get Board section", + "description": "### Get information about a board section.\n", + "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "test_ldap_config_auth", - "summary": "Test LDAP Auth", - "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Result info.", + "description": "Board section", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LDAPConfigTestResult" + "$ref": "#/components/schemas/BoardSection" } } } @@ -20134,16 +20630,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -20154,16 +20640,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -20177,35 +20653,42 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LDAPConfig" - } + "x-looker-rate-limited": true + }, + "patch": { + "tags": [ + "Board" + ], + "operationId": "update_board_section", + "summary": "Update Board section", + "description": "### Update a board section definition.\n", + "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "schema": { + "type": "string" } }, - "description": "LDAP Config", - "required": true - } - } - }, - "/ldap_config/test_user_info": { - "put": { - "tags": [ - "Auth" + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "test_ldap_config_user_info", - "summary": "Test LDAP User Info", - "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user withoutneeding to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full infofor the user from the LDAP server without actually authenticating the user. So, user password is notrequired.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Result info.", + "description": "Board section", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LDAPConfigTestResult" + "$ref": "#/components/schemas/BoardSection" } } } @@ -20220,16 +20703,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -20268,30 +20741,39 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LDAPConfig" + "$ref": "#/components/schemas/BoardSection" } } }, - "description": "LDAP Config", + "description": "Board section", "required": true } - } - }, - "/ldap_config/test_user_auth": { - "put": { + }, + "delete": { "tags": [ - "Auth" + "Board" + ], + "operationId": "delete_board_section", + "summary": "Delete Board section", + "description": "### Delete a board section.\n", + "parameters": [ + { + "name": "board_section_id", + "in": "path", + "description": "Id of board section", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "test_ldap_config_user_auth", - "summary": "Test LDAP User Auth", - "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "200": { - "description": "Result info.", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LDAPConfigTestResult" + "type": "string" } } } @@ -20306,16 +20788,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -20326,16 +20798,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -20349,38 +20811,24 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LDAPConfig" - } - } - }, - "description": "LDAP Config", - "required": true - } + "x-looker-rate-limited": true } }, - "/legacy_features": { - "get": { + "/internal/kda/analyze": { + "post": { "tags": [ - "Config" + "KeyDriverAnalysis" ], - "operationId": "all_legacy_features", - "summary": "Get All Legacy Features", - "description": "### Get all legacy features.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "run_key_driver_analysis", + "summary": "Analyze Key Drivers", + "description": "### Analyze Key Drivers\n\nIdentifies the dimensional segments that most significantly drove a metric's change between two time periods.\n\nGiven a data source (a saved query or a model/explore pair), a contribution metric, and a list of\ndimensions to analyse, this endpoint compares a test (breach) period against a control (baseline)\nperiod and returns a ranked list of segment-level insights.\nEach insight reports the metric value in both periods, the absolute and relative difference, \nthe unexpected deviation (how much a segment over or under-performed relative to the overall trend), \nits proportional contribution to the total change, and its a-priori support (what share of total volume that segment represents).\n", "responses": { "200": { - "description": "Legacy Feature", + "description": "Analysis result as JSON", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LegacyFeature" - } + "$ref": "#/components/schemas/KdaResponsePayload" } } } @@ -20395,8 +20843,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -20405,12 +20853,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -20426,25 +20874,36 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-status": "alpha", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KdaRequestPayload" + } + } + }, + "description": "Analysis parameters", + "required": true + } } }, - "/legacy_features/{legacy_feature_id}": { + "/integration_hubs": { "get": { "tags": [ - "Config" + "Integration" ], - "operationId": "legacy_feature", - "summary": "Get Legacy Feature", - "description": "### Get information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "all_integration_hubs", + "summary": "Get All Integration Hubs", + "description": "### Get information about all Integration Hubs.\n", "parameters": [ { - "name": "legacy_feature_id", - "in": "path", - "description": "id of legacy feature", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } @@ -20452,11 +20911,14 @@ ], "responses": { "200": { - "description": "Legacy Feature", + "description": "Integration Hub", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LegacyFeature" + "type": "array", + "items": { + "$ref": "#/components/schemas/IntegrationHub" + } } } } @@ -20471,16 +20933,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -20506,19 +20958,19 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "Config" + "Integration" ], - "operationId": "update_legacy_feature", - "summary": "Update Legacy Feature", - "description": "### Update information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "create_integration_hub", + "summary": "Create Integration Hub", + "description": "### Create a new Integration Hub.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", "parameters": [ { - "name": "legacy_feature_id", - "in": "path", - "description": "id of legacy feature", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } @@ -20526,11 +20978,11 @@ ], "responses": { "200": { - "description": "Legacy Feature", + "description": "Integration Hub", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LegacyFeature" + "$ref": "#/components/schemas/IntegrationHub" } } } @@ -20545,8 +20997,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -20555,8 +21007,8 @@ } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -20593,33 +21045,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LegacyFeature" + "$ref": "#/components/schemas/IntegrationHub" } } }, - "description": "Legacy Feature", + "description": "Integration Hub", "required": true } } }, - "/locales": { + "/integration_hubs/{integration_hub_id}": { "get": { "tags": [ - "Config" + "Integration" + ], + "operationId": "integration_hub", + "summary": "Get Integration Hub", + "description": "### Get information about a Integration Hub.\n", + "parameters": [ + { + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "all_locales", - "summary": "Get All Locales", - "description": "### Get a list of locales that Looker supports.\n", "responses": { "200": { - "description": "Locale", + "description": "Integration Hub", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Locale" - } + "$ref": "#/components/schemas/IntegrationHub" } } } @@ -20658,20 +21127,27 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/looks": { - "get": { + }, + "patch": { "tags": [ - "Look" + "Integration" ], - "operationId": "all_looks", - "summary": "Get All Looks", - "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", + "operationId": "update_integration_hub", + "summary": "Update Integration Hub", + "description": "### Update a Integration Hub definition.\n\nThis API is rate limited to prevent it from being used for SSRF attacks\n", "parameters": [ { - "name": "fields", - "in": "query", + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", "description": "Requested fields.", "required": false, "schema": { @@ -20681,14 +21157,11 @@ ], "responses": { "200": { - "description": "Look", + "description": "Integration Hub", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Look" - } + "$ref": "#/components/schemas/IntegrationHub" } } } @@ -20713,6 +21186,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -20726,33 +21209,44 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHub" + } + } + }, + "description": "Integration Hub", + "required": true + } }, - "post": { + "delete": { "tags": [ - "Look" + "Integration" ], - "operationId": "create_look", - "summary": "Create Look", - "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", + "operationId": "delete_integration_hub", + "summary": "Delete Integration Hub", + "description": "### Delete a Integration Hub.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "Look", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookWithQuery" + "type": "string" } } } @@ -20777,26 +21271,6 @@ } } }, - "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": { @@ -20810,128 +21284,179 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LookWithQuery" - } - } - }, - "description": "Look", - "required": true - } + "x-looker-rate-limited": true } }, - "/looks/search": { + "/integration_hubs/{integration_hub_id}/health": { "get": { "tags": [ - "Look" + "Integration" ], - "operationId": "search_looks", - "summary": "Search Looks", - "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", + "operationId": "get_integration_hub_health", + "summary": "Check the health of Integration Hub", + "description": "Checks to see if the user is able to connect to their integration hub", "parameters": [ { - "name": "id", - "in": "query", - "description": "Match look id.", - "required": false, + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, "schema": { "type": "string" } }, { - "name": "title", + "name": "fields", "in": "query", - "description": "Match Look title.", + "description": "Requested fields.", "required": false, "schema": { "type": "string" } - }, - { - "name": "description", - "in": "query", - "description": "Match Look description.", - "required": false, - "schema": { - "type": "string" + } + ], + "responses": { + "200": { + "description": "Health Result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHubHealthResult" + } + } } }, - { - "name": "content_favorite_id", - "in": "query", - "description": "Select looks with a particular content favorite id", - "required": false, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "folder_id", - "in": "query", - "description": "Select looks in a particular folder.", - "required": false, - "schema": { - "type": "string" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "user_id", - "in": "query", - "description": "Select looks created by a particular user.", - "required": false, - "schema": { - "type": "string" + "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 + } + }, + "/integration_hubs/{integration_hub_id}/accept_legal_agreement": { + "post": { + "tags": [ + "Integration" + ], + "operationId": "accept_integration_hub_legal_agreement", + "summary": "Accept Integration Hub Legal Agreement", + "description": "Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false.", + "parameters": [ { - "name": "view_count", - "in": "query", - "description": "Select looks with particular view_count value", - "required": false, + "name": "integration_hub_id", + "in": "path", + "description": "Id of integration_hub", + "required": true, "schema": { "type": "string" } - }, - { - "name": "deleted", - "in": "query", - "description": "Select soft-deleted looks", - "required": false, - "schema": { - "type": "boolean" + } + ], + "responses": { + "200": { + "description": "Integration hub", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationHub" + } + } } }, - { - "name": "query_id", - "in": "query", - "description": "Select looks that reference a particular query by query_id", - "required": false, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "curate", - "in": "query", - "description": "Exclude items that exist only in personal spaces other than the users", - "required": false, - "schema": { - "type": "boolean" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "last_viewed_at", - "in": "query", - "description": "Select looks based on when they were last viewed", - "required": false, - "schema": { - "type": "string" + "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 + } + }, + "/integrations": { + "get": { + "tags": [ + "Integration" + ], + "operationId": "all_integrations", + "summary": "Get All Integrations", + "description": "### Get information about all Integrations.\n", + "parameters": [ { "name": "fields", "in": "query", @@ -20942,75 +21467,24 @@ } }, { - "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", + "name": "integration_hub_id", "in": "query", - "description": "One or more fields to sort results by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :updated_at, :last_updater_id, :view_count, :favorite_count, :content_favorite_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :query_id, :certification_status]", + "description": "Filter to a specific provider", "required": false, "schema": { "type": "string" } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "looks", + "description": "Integration", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Look" + "$ref": "#/components/schemas/Integration" } } } @@ -21052,19 +21526,19 @@ "x-looker-rate-limited": true } }, - "/looks/{look_id}": { + "/integrations/{integration_id}": { "get": { "tags": [ - "Look" + "Integration" ], - "operationId": "look", - "summary": "Get Look", - "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", + "operationId": "integration", + "summary": "Get Integration", + "description": "### Get information about a Integration.\n", "parameters": [ { - "name": "look_id", + "name": "integration_id", "in": "path", - "description": "Id of look", + "description": "Id of integration", "required": true, "schema": { "type": "string" @@ -21082,11 +21556,11 @@ ], "responses": { "200": { - "description": "Look", + "description": "Integration", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookWithQuery" + "$ref": "#/components/schemas/Integration" } } } @@ -21128,16 +21602,16 @@ }, "patch": { "tags": [ - "Look" + "Integration" ], - "operationId": "update_look", - "summary": "Update Look", - "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nYou can pass `deleted: true` as a parameter to [search_looks()](#!/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", + "operationId": "update_integration", + "summary": "Update Integration", + "description": "### Update parameters on a Integration.\n", "parameters": [ { - "name": "look_id", + "name": "integration_id", "in": "path", - "description": "Id of look", + "description": "Id of integration", "required": true, "schema": { "type": "string" @@ -21155,11 +21629,11 @@ ], "responses": { "200": { - "description": "Look", + "description": "Integration", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookWithQuery" + "$ref": "#/components/schemas/Integration" } } } @@ -21212,26 +21686,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookWithQuery" + "$ref": "#/components/schemas/Integration" } } }, - "description": "Look", + "description": "Integration", "required": true } - }, - "delete": { + } + }, + "/integrations/{integration_id}/form": { + "post": { "tags": [ - "Look" + "Integration" ], - "operationId": "delete_look", - "summary": "Delete Look", - "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", + "operationId": "fetch_integration_form", + "summary": "Fetch Remote Integration Form", + "description": "Returns the Integration form for presentation to the user.", "parameters": [ { - "name": "look_id", + "name": "integration_id", "in": "path", - "description": "Id of look", + "description": "Id of integration", "required": true, "schema": { "type": "string" @@ -21239,12 +21715,12 @@ } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Data Action Form", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/DataActionForm" } } } @@ -21269,6 +21745,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -21282,170 +21768,114 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "description": "Integration Form Request", + "required": false + } } }, - "/looks/{look_id}/run/{result_format}": { - "get": { + "/integrations/{integration_id}/test": { + "post": { "tags": [ - "Look" + "Integration" ], - "operationId": "run_look", - "summary": "Run Look", - "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n\n", + "operationId": "test_integration", + "summary": "Test integration", + "description": "Tests the integration to make sure all the settings are working.", "parameters": [ { - "name": "look_id", + "name": "integration_id", "in": "path", - "description": "Id of look", + "description": "Id of integration", "required": true, "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "Test Result", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationTestResult" + } + } + } }, - { - "name": "result_format", - "in": "path", - "description": "Format of result", - "required": true, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "limit", - "in": "query", - "description": "Row limit (may override the limit in the saved query).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "apply_formatting", - "in": "query", - "description": "Apply model-specified formatting to each result.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "apply_vis", - "in": "query", - "description": "Apply visualization options to results.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "cache", - "in": "query", - "description": "Get results from cache if available.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "image_width", - "in": "query", - "description": "Render width for image formats.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "image_height", - "in": "query", - "description": "Render height for image formats.", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "generate_drill_links", - "in": "query", - "description": "Generate drill links (only applicable to 'json_detail' format.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "force_production", - "in": "query", - "description": "Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "cache_only", - "in": "query", - "description": "Retrieve any results from cache even if the results have expired.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "path_prefix", - "in": "query", - "description": "Prefix to use for drill links (url encoded).", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "rebuild_pdts", - "in": "query", - "description": "Rebuild PDTS used in query.", - "required": false, - "schema": { - "type": "boolean" + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } } }, - { - "name": "server_table_calcs", - "in": "query", - "description": "Perform table calculations on query results", - "required": false, - "schema": { - "type": "boolean" + "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 + } + }, + "/internal_help_resources_content": { + "get": { + "tags": [ + "Config" ], + "operationId": "internal_help_resources_content", + "summary": "Get Internal Help Resources Content", + "description": "### Set the menu item name and content for internal help resources\n", "responses": { "200": { - "description": "Look", + "description": "Internal Help Resources Content", "content": { - "text": { - "schema": { - "type": "string" - } - }, "application/json": { "schema": { - "type": "string" - } - }, - "image/png": { - "schema": { - "type": "string" - } - }, - "image/jpeg": { - "schema": { - "type": "string" + "$ref": "#/components/schemas/InternalHelpResourcesContent" } } } @@ -21453,154 +21883,52 @@ "400": { "description": "Bad Request", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" } - }, - "image/png": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "image/jpeg": { - "schema": { - "$ref": "#/components/schemas/Error" - } } } }, "404": { "description": "Not Found", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" } - }, - "image/png": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "image/jpeg": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - }, - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - }, - "image/png": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - }, - "image/jpeg": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } } } }, "429": { "description": "Too Many Requests", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" } - }, - "image/png": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "image/jpeg": { - "schema": { - "$ref": "#/components/schemas/Error" - } } } } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/looks/{look_id}/copy": { - "post": { + }, + "patch": { "tags": [ - "Look" - ], - "operationId": "copy_look", - "summary": "Copy Look", - "description": "### Copy an existing look\n\nCreates a copy of an existing look, in a specified folder, and returns the copied look.\n\n`look_id` and `folder_id` are required.\n\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", - "parameters": [ - { - "name": "look_id", - "in": "path", - "description": "Look id to copy.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "folder_id", - "in": "query", - "description": "Folder id to copy to.", - "required": false, - "schema": { - "type": "string" - } - } + "Config" ], + "operationId": "update_internal_help_resources_content", + "summary": "Update internal help resources content", + "description": "Update internal help resources content\n", "responses": { "200": { - "description": "Look", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LookWithQuery" - } - } - } - }, - "201": { - "description": "look", + "description": "Internal Help Resources Content", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Look" + "$ref": "#/components/schemas/InternalHelpResourcesContent" } } } @@ -21625,16 +21953,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -21658,54 +21976,35 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InternalHelpResourcesContent" + } + } + }, + "description": "Internal Help Resources Content", + "required": true + } } }, - "/looks/{look_id}/move": { - "patch": { + "/internal_help_resources_enabled": { + "get": { "tags": [ - "Look" - ], - "operationId": "move_look", - "summary": "Move Look", - "description": "### Move an existing look\n\nMoves a look to a specified folder, and returns the moved look.\n\n`look_id` and `folder_id` are required.\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", - "parameters": [ - { - "name": "look_id", - "in": "path", - "description": "Look id to move.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "folder_id", - "in": "query", - "description": "Folder id to move to.", - "required": true, - "schema": { - "type": "string" - } - } + "Config" ], + "operationId": "internal_help_resources", + "summary": "Get Internal Help Resources", + "description": "### Get and set the options for internal help resources\n", "responses": { "200": { - "description": "Look", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LookWithQuery" - } - } - } - }, - "201": { - "description": "look", + "description": "Internal Help Resources", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Look" + "$ref": "#/components/schemas/InternalHelpResources" } } } @@ -21730,16 +22029,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -21756,32 +22045,21 @@ "x-looker-rate-limited": true } }, - "/looks/{look_id}/certification": { + "/internal_help_resources": { "patch": { "tags": [ - "Look" - ], - "operationId": "update_look_certification", - "summary": "Update Look Certification", - "description": "### Update look certification\n", - "parameters": [ - { - "name": "look_id", - "in": "path", - "description": "Look id to update certification.", - "required": true, - "schema": { - "type": "string" - } - } + "Config" ], + "operationId": "update_internal_help_resources", + "summary": "Update internal help resources configuration", + "description": "Update internal help resources settings\n", "responses": { "200": { - "description": "looks", + "description": "Custom Welcome Email", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Look" + "$ref": "#/components/schemas/InternalHelpResources" } } } @@ -21827,113 +22105,43 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Certification" + "$ref": "#/components/schemas/InternalHelpResources" } } }, - "description": "Certification Data", + "description": "Custom Welcome Email", "required": true } } }, - "/lookml_models": { + "/ldap_config": { "get": { "tags": [ - "LookmlModel" - ], - "operationId": "all_lookml_models", - "summary": "Get All LookML Models", - "description": "### Get information about all lookml models.\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (can be used with offset)", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any. (Defaults to 0 if not set when limit is used)", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "exclude_empty", - "in": "query", - "description": "Whether or not to exclude models with no explores from the response (Defaults to false)", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "exclude_hidden", - "in": "query", - "description": "Whether or not to exclude hidden explores from the response (Defaults to false)", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "include_internal", - "in": "query", - "description": "Whether or not to include built-in models such as System Activity (Defaults to false)", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "include_self_service", - "in": "query", - "description": "Whether or not to include self service models (Defaults to false)", - "required": false, - "schema": { - "type": "boolean" - } - } + "Auth" ], + "operationId": "ldap_config", + "summary": "Get LDAP Configuration", + "description": "### Get the LDAP configuration.\n\nLooker can be optionally configured to authenticate users against an Active Directory or other LDAP directory server.\nLDAP setup requires coordination with an administrator of that directory server.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single LDAP configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nLooker will never return an **auth_password** field. That value can be set, but never retrieved.\n\nSee the [Looker LDAP docs](https://docs.cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "LookML Model", + "description": "LDAP Configuration.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LookmlModel" - } + "$ref": "#/components/schemas/LDAPConfig" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -21967,20 +22175,20 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "patch": { "tags": [ - "LookmlModel" + "Auth" ], - "operationId": "create_lookml_model", - "summary": "Create LookML Model", - "description": "### Create a lookml model using the specified configuration.\n", + "operationId": "update_ldap_config", + "summary": "Update LDAP Configuration", + "description": "### Update the LDAP configuration.\n\nConfiguring LDAP impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the LDAP configuration.\n\nLDAP is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any LDAP setting changes be tested using the APIs below before being set globally.\n\nSee the [Looker LDAP docs](https://docs.cloud.google.com/looker/docs/r/api/ldap_setup) for additional information.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "LookML Model", + "description": "New state for LDAP Configuration.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookmlModel" + "$ref": "#/components/schemas/LDAPConfig" } } } @@ -21995,8 +22203,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -22005,8 +22213,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -22043,50 +22251,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookmlModel" + "$ref": "#/components/schemas/LDAPConfig" } } }, - "description": "LookML Model", + "description": "LDAP Config", "required": true } } }, - "/lookml_models/{lookml_model_name}": { - "get": { + "/ldap_config/test_connection": { + "put": { "tags": [ - "LookmlModel" - ], - "operationId": "lookml_model", - "summary": "Get LookML Model", - "description": "### Get information about a lookml model.\n", - "parameters": [ - { - "name": "lookml_model_name", - "in": "path", - "description": "Name of lookml model.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "test_ldap_config_connection", + "summary": "Test LDAP Connection", + "description": "### Test the connection settings for an LDAP configuration.\n\nThis tests that the connection is possible given a connection_host and connection_port.\n\n**connection_host** and **connection_port** are required. **connection_tls** is optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true\n}\n```\n\nNo authentication to the LDAP server is attempted.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "LookML Model", + "description": "Result info.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookmlModel" + "$ref": "#/components/schemas/LDAPConfigTestResult" } } } @@ -22101,6 +22289,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -22111,6 +22309,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -22124,33 +22332,35 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "patch": { - "tags": [ - "LookmlModel" - ], - "operationId": "update_lookml_model", - "summary": "Update LookML Model", - "description": "### Update a lookml model using the specified configuration.\n", - "parameters": [ - { - "name": "lookml_model_name", - "in": "path", - "description": "Name of lookml model.", - "required": true, - "schema": { - "type": "string" + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } } - } + }, + "description": "LDAP Config", + "required": true + } + } + }, + "/ldap_config/test_auth": { + "put": { + "tags": [ + "Auth" ], + "operationId": "test_ldap_config_auth", + "summary": "Test LDAP Auth", + "description": "### Test the connection authentication settings for an LDAP configuration.\n\nThis tests that the connection is possible and that a 'server' account to be used by Looker can authenticate to the LDAP server given connection and authentication information.\n\n**connection_host**, **connection_port**, and **auth_username**, are required. **connection_tls** and **auth_password** are optional.\n\nExample:\n```json\n{\n \"connection_host\": \"ldap.example.com\",\n \"connection_port\": \"636\",\n \"connection_tls\": true,\n \"auth_username\": \"cn=looker,dc=example,dc=com\",\n \"auth_password\": \"secret\"\n}\n```\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "LookML Model", + "description": "Result info.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookmlModel" + "$ref": "#/components/schemas/LDAPConfigTestResult" } } } @@ -22165,6 +22375,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -22203,39 +22423,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookmlModel" + "$ref": "#/components/schemas/LDAPConfig" } } }, - "description": "LookML Model", + "description": "LDAP Config", "required": true } - }, - "delete": { + } + }, + "/ldap_config/test_user_info": { + "put": { "tags": [ - "LookmlModel" - ], - "operationId": "delete_lookml_model", - "summary": "Delete LookML Model", - "description": "### Delete a lookml model.\n", - "parameters": [ - { - "name": "lookml_model_name", - "in": "path", - "description": "Name of lookml model.", - "required": true, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "test_ldap_config_user_info", + "summary": "Test LDAP User Info", + "description": "### Test the user authentication settings for an LDAP configuration without authenticating the user.\n\nThis test will let you easily test the mapping for user properties and roles for any user withoutneeding to authenticate as that user.\n\nThis test accepts a full LDAP configuration along with a username and attempts to find the full infofor the user from the LDAP server without actually authenticating the user. So, user password is notrequired.The configuration is validated before attempting to contact the server.\n\n**test_ldap_user** is required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Result info.", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/LDAPConfigTestResult" } } } @@ -22250,6 +22461,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -22260,6 +22481,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -22273,62 +22504,124 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + }, + "description": "LDAP Config", + "required": true + } } }, - "/lookml_models/{lookml_model_name}/explores/{explore_name}": { - "get": { + "/ldap_config/test_user_auth": { + "put": { "tags": [ - "LookmlModel" + "Auth" ], - "operationId": "lookml_model_explore", - "summary": "Get LookML Model Explore", - "description": "### Get information about a lookml model explore.\n", - "parameters": [ - { - "name": "lookml_model_name", - "in": "path", - "description": "Name of lookml model.", - "required": true, - "schema": { - "type": "string" + "operationId": "test_ldap_config_user_auth", + "summary": "Test LDAP User Auth", + "description": "### Test the user authentication settings for an LDAP configuration.\n\nThis test accepts a full LDAP configuration along with a username/password pair and attempts to authenticate the user with the LDAP server. The configuration is validated before attempting the authentication.\n\nLooker will never return an **auth_password**. If this request omits the **auth_password** field, then the **auth_password** value from the active config (if present) will be used for the test.\n\n**test_ldap_user** and **test_ldap_password** are required.\n\nThe active LDAP settings are not modified.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "responses": { + "200": { + "description": "Result info.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfigTestResult" + } + } } }, - { - "name": "explore_name", - "in": "path", - "description": "Name of explore.", - "required": true, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "add_drills_metadata", - "in": "query", - "description": "Whether response should include drill field metadata.", - "required": false, - "schema": { - "type": "boolean" + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LDAPConfig" + } + } + }, + "description": "LDAP Config", + "required": true + } + } + }, + "/legacy_features": { + "get": { + "tags": [ + "Config" ], + "operationId": "all_legacy_features", + "summary": "Get All Legacy Features", + "description": "### Get all legacy features.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "LookML Model Explore", + "description": "Legacy Feature", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LookmlModelExplore" + "type": "array", + "items": { + "$ref": "#/components/schemas/LegacyFeature" + } } } } @@ -22343,6 +22636,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -22369,41 +22672,32 @@ "x-looker-rate-limited": true } }, - "/merge_queries/{merge_query_id}": { + "/legacy_features/{legacy_feature_id}": { "get": { "tags": [ - "Query" + "Config" ], - "operationId": "merge_query", - "summary": "Get Merge Query", - "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", + "operationId": "legacy_feature", + "summary": "Get Legacy Feature", + "description": "### Get information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "merge_query_id", + "name": "legacy_feature_id", "in": "path", - "description": "Merge Query Id", + "description": "id of legacy feature", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Merge Query", + "description": "Legacy Feature", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MergeQuery" + "$ref": "#/components/schemas/LegacyFeature" } } } @@ -22418,6 +22712,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -22440,24 +22744,22 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/merge_queries": { - "post": { + }, + "patch": { "tags": [ - "Query" + "Config" ], - "operationId": "create_merge_query", - "summary": "Create Merge Query", - "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n\n", + "operationId": "update_legacy_feature", + "summary": "Update Legacy Feature", + "description": "### Update information about the legacy feature with a specific id.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, + "name": "legacy_feature_id", + "in": "path", + "description": "id of legacy feature", + "required": true, "schema": { "type": "string" } @@ -22465,11 +22767,11 @@ ], "responses": { "200": { - "description": "Merge Query", + "description": "Legacy Feature", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MergeQuery" + "$ref": "#/components/schemas/LegacyFeature" } } } @@ -22484,8 +22786,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -22494,8 +22796,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -22526,86 +22828,39 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MergeQuery" + "$ref": "#/components/schemas/LegacyFeature" } } }, - "description": "Merge Query", - "required": false + "description": "Legacy Feature", + "required": true } } }, - "/models/{model_name}/views/{view_name}/fields/{field_name}/suggestions": { + "/locales": { "get": { "tags": [ - "Metadata" - ], - "operationId": "model_fieldname_suggestions", - "summary": "Model field name suggestions", - "description": "### Field name suggestions for a model and view\n\n`filters` is a string hash of values, with the key as the field name and the string value as the filter expression:\n\n```ruby\n{'users.age': '>=60'}\n```\n\nor\n\n```ruby\n{'users.age': '<30'}\n```\n\nor\n\n```ruby\n{'users.age': '=50'}\n```\n", - "parameters": [ - { - "name": "model_name", - "in": "path", - "description": "Name of model", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "view_name", - "in": "path", - "description": "Name of view", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "field_name", - "in": "path", - "description": "Name of field to use for suggestions", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "term", - "in": "query", - "description": "Search term pattern (evaluated as as `%term%`)", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "filters", - "in": "query", - "description": "Suggestion filters with field name keys and comparison expressions", - "required": false, - "additionalProperties": { - "type": "string" - }, - "schema": { - "type": "object" - } - } + "Config" ], + "operationId": "all_locales", + "summary": "Get All Locales", + "description": "### Get a list of locales that Looker supports.\n", "responses": { "200": { - "description": "Model view field suggestions", + "description": "Locale", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ModelFieldSuggestions" + "type": "array", + "items": { + "$ref": "#/components/schemas/Locale" + } } } } @@ -22646,20 +22901,20 @@ "x-looker-rate-limited": true } }, - "/models/{model_name}": { + "/looks": { "get": { "tags": [ - "Metadata" + "Look" ], - "operationId": "get_model", - "summary": "Get a single model", - "description": "### Get a single model\n\n", + "operationId": "all_looks", + "summary": "Get All Looks", + "description": "### Get information about all active Looks\n\nReturns an array of **abbreviated Look objects** describing all the looks that the caller has access to. Soft-deleted Looks are **not** included.\n\nGet the **full details** of a specific look by id with [look(id)](#!/Look/look)\n\nFind **soft-deleted looks** with [search_looks()](#!/Look/search_looks)\n", "parameters": [ { - "name": "model_name", - "in": "path", - "description": "Name of model", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } @@ -22667,11 +22922,14 @@ ], "responses": { "200": { - "description": "A Model", + "description": "Look", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Model" + "type": "array", + "items": { + "$ref": "#/components/schemas/Look" + } } } } @@ -22710,22 +22968,20 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/connections/{connection_name}/databases": { - "get": { + }, + "post": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_databases", - "summary": "List accessible databases to this connection", - "description": "### List databases available to this connection\n\nCertain dialects can support multiple databases per single connection.\nIf this connection supports multiple databases, the database names will be returned in an array.\n\nConnections using dialects that do not support multiple databases will return an empty array.\n\n**Note**: [Connection Features](#!/Metadata/connection_features) can be used to determine if a connection supports\nmultiple databases.\n", + "operationId": "create_look", + "summary": "Create Look", + "description": "### Create a Look\n\nTo create a look to display query data, first create the query with [create_query()](#!/Query/create_query)\nthen assign the query's id to the `query_id` property in the call to `create_look()`.\n\nTo place the look into a particular space, assign the space's id to the `space_id` property\nin the call to `create_look()`.\n", "parameters": [ { - "name": "connection_name", - "in": "path", - "description": "Name of connection", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } @@ -22733,14 +22989,11 @@ ], "responses": { "200": { - "description": "Database names", + "description": "Look", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/LookWithQuery" } } } @@ -22765,6 +23018,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -22787,384 +23050,174 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", - "x-looker-rate-limited": true - } - }, - "/connections/{connection_name}/features": { - "get": { - "tags": [ - "Metadata" - ], - "operationId": "connection_features", - "summary": "Metadata features supported by this connection", - "description": "### Retrieve metadata features for this connection\n\nReturns a list of feature names with `true` (available) or `false` (not available)\n\n", - "parameters": [ - { - "name": "connection_name", - "in": "path", - "description": "Name of connection", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Connection features", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConnectionFeatures" - } - } - } - }, - "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" - } + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookWithQuery" } } }, - "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 + "description": "Look", + "required": true + } } }, - "/connections/{connection_name}/schemas": { + "/looks/search": { "get": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_schemas", - "summary": "Get schemas for a connection", - "description": "### Get the list of schemas and tables for a connection\n\n", + "operationId": "search_looks", + "summary": "Search Looks", + "description": "### Search Looks\n\nReturns an **array of Look objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single look** by id with [look(id)](#!/Look/look)\n", "parameters": [ { - "name": "connection_name", - "in": "path", - "description": "Name of connection", - "required": true, + "name": "id", + "in": "query", + "description": "Match look id.", + "required": false, "schema": { "type": "string" } }, { - "name": "database", + "name": "title", "in": "query", - "description": "For dialects that support multiple databases, optionally identify which to use", + "description": "Match Look title.", "required": false, "schema": { "type": "string" } }, { - "name": "cache", + "name": "description", "in": "query", - "description": "True to use fetch from cache, false to load fresh", + "description": "Match Look description.", "required": false, "schema": { - "type": "boolean" + "type": "string" } }, { - "name": "fields", + "name": "content_favorite_id", "in": "query", - "description": "Requested fields.", + "description": "Select looks with a particular content favorite id", "required": false, "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "Schemas for connection", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Schema" - } - } - } - } }, - "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": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/connections/{connection_name}/tables": { - "get": { - "tags": [ - "Metadata" - ], - "operationId": "connection_tables", - "summary": "Get tables for a connection", - "description": "### Get the list of tables for a schema\n\nFor dialects that support multiple databases, optionally identify which to use. If not provided, the default\ndatabase for the connection will be used.\n\nFor dialects that do **not** support multiple databases, **do not use** the database parameter\n", - "parameters": [ { - "name": "connection_name", - "in": "path", - "description": "Name of connection", - "required": true, + "name": "folder_id", + "in": "query", + "description": "Select looks in a particular folder.", + "required": false, "schema": { "type": "string" } }, { - "name": "database", + "name": "user_id", "in": "query", - "description": "Optional. Name of database to use for the query, only if applicable", + "description": "Select looks created by a particular user.", "required": false, "schema": { "type": "string" } }, { - "name": "schema_name", + "name": "view_count", "in": "query", - "description": "Optional. Return only tables for this schema", + "description": "Select looks with particular view_count value", "required": false, "schema": { "type": "string" } }, { - "name": "cache", + "name": "deleted", "in": "query", - "description": "True to fetch from cache, false to load fresh", + "description": "Select soft-deleted looks", "required": false, "schema": { "type": "boolean" } }, { - "name": "fields", + "name": "query_id", "in": "query", - "description": "Requested fields.", + "description": "Select looks that reference a particular query by query_id", "required": false, "schema": { "type": "string" } }, { - "name": "table_filter", + "name": "curate", "in": "query", - "description": "Optional. Return tables with names that contain this value", + "description": "Exclude items that exist only in personal spaces other than the users", "required": false, "schema": { - "type": "string" + "type": "boolean" } }, { - "name": "table_limit", + "name": "last_viewed_at", "in": "query", - "description": "Optional. Return tables up to the table_limit", + "description": "Select looks based on when they were last viewed", "required": false, "schema": { - "type": "integer", - "format": "int64" - } - } - ], - "responses": { - "200": { - "description": "Schemas and tables for connection", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SchemaTables" - } - } - } - } - }, - "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" - } - } + "type": "string" } }, - "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 - } - }, - "/connections/{connection_name}/columns": { - "get": { - "tags": [ - "Metadata" - ], - "operationId": "connection_columns", - "summary": "Get columns for a connection", - "description": "### Get the columns (and therefore also the tables) in a specific schema\n", - "parameters": [ { - "name": "connection_name", - "in": "path", - "description": "Name of connection", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } }, { - "name": "database", + "name": "page", "in": "query", - "description": "For dialects that support multiple databases, optionally identify which to use", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", "required": false, + "deprecated": true, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } }, { - "name": "schema_name", + "name": "per_page", "in": "query", - "description": "Name of schema to use.", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", "required": false, + "deprecated": true, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } }, { - "name": "cache", + "name": "limit", "in": "query", - "description": "True to fetch from cache, false to load fresh", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", "required": false, "schema": { - "type": "boolean" + "type": "integer", + "format": "int64" } }, { - "name": "table_limit", + "name": "offset", "in": "query", - "description": "limits the tables per schema returned", + "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", @@ -23172,33 +23225,33 @@ } }, { - "name": "table_names", + "name": "sorts", "in": "query", - "description": "only fetch columns for a given (comma-separated) list of tables", + "description": "One or more fields to sort results by. Sortable fields: [:title, :user_id, :id, :created_at, :space_id, :folder_id, :description, :updated_at, :last_updater_id, :view_count, :favorite_count, :content_favorite_id, :deleted, :deleted_at, :last_viewed_at, :last_accessed_at, :query_id, :certification_status]", "required": false, "schema": { "type": "string" } }, { - "name": "fields", + "name": "filter_or", "in": "query", - "description": "Requested fields.", + "description": "Combine given search criteria in a boolean OR expression", "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { "200": { - "description": "Columns schema for connection", + "description": "looks", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/SchemaColumns" + "$ref": "#/components/schemas/Look" } } } @@ -23224,16 +23277,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -23250,33 +23293,24 @@ "x-looker-rate-limited": true } }, - "/connections/{connection_name}/search_columns": { + "/looks/{look_id}": { "get": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_search_columns", - "summary": "Search a connection for columns", - "description": "### Search a connection for columns matching the specified name\n\n**Note**: `column_name` must be a valid column name. It is not a search pattern.\n", + "operationId": "look", + "summary": "Get Look", + "description": "### Get a Look.\n\nReturns detailed information about a Look and its associated Query.\n\n", "parameters": [ { - "name": "connection_name", + "name": "look_id", "in": "path", - "description": "Name of connection", + "description": "Id of look", "required": true, "schema": { "type": "string" } }, - { - "name": "column_name", - "in": "query", - "description": "Column name to find", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -23289,14 +23323,11 @@ ], "responses": { "200": { - "description": "Column names matching search pattern", + "description": "Look", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ColumnSearch" - } + "$ref": "#/components/schemas/LookWithQuery" } } } @@ -23321,16 +23352,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -23345,21 +23366,19 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/connections/{connection_name}/cost_estimate": { - "post": { + }, + "patch": { "tags": [ - "Metadata" + "Look" ], - "operationId": "connection_cost_estimate", - "summary": "Estimate costs for a connection", - "description": "### Connection cost estimating\n\nAssign a `sql` statement to the body of the request. e.g., for Ruby, `{sql: 'select * from users'}`\n\n**Note**: If the connection's dialect has no support for cost estimates, an error will be returned\n", + "operationId": "update_look", + "summary": "Update Look", + "description": "### Modify a Look\n\nUse this function to modify parts of a look. Property values given in a call to `update_look` are\napplied to the existing look, so there's no need to include properties whose values are not changing.\nIt's best to specify only the properties you want to change and leave everything else out\nof your `update_look` call. **Look properties marked 'read-only' will be ignored.**\n\nWhen a user deletes a look in the Looker UI, the look data remains in the database but is\nmarked with a deleted flag (\"soft-deleted\"). Soft-deleted looks can be undeleted (by an admin)\nif the delete was in error.\n\nTo soft-delete a look via the API, use [update_look()](#!/Look/update_look) to change the look's `deleted` property to `true`.\nYou can undelete a look by calling `update_look` to change the look's `deleted` property to `false`.\n\nSoft-deleted looks are excluded from the results of [all_looks()](#!/Look/all_looks) and [search_looks()](#!/Look/search_looks), so they\nessentially disappear from view even though they still reside in the db.\nYou can pass `deleted: true` as a parameter to [search_looks()](#!/Look/search_looks) to list soft-deleted looks.\n\nNOTE: [delete_look()](#!/Look/delete_look) performs a \"hard delete\" - the look data is removed from the Looker\ndatabase and destroyed. There is no \"undo\" for `delete_look()`.\n", "parameters": [ { - "name": "connection_name", + "name": "look_id", "in": "path", - "description": "Name of connection", + "description": "Id of look", "required": true, "schema": { "type": "string" @@ -23377,11 +23396,11 @@ ], "responses": { "200": { - "description": "Connection cost estimates", + "description": "Look", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CostEstimate" + "$ref": "#/components/schemas/LookWithQuery" } } } @@ -23428,36 +23447,45 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCostEstimate" + "$ref": "#/components/schemas/LookWithQuery" } } }, - "description": "SQL statement to estimate", + "description": "Look", "required": true } - } - }, - "/mobile/settings": { - "get": { + }, + "delete": { "tags": [ - "Config" + "Look" + ], + "operationId": "delete_look", + "summary": "Delete Look", + "description": "### Permanently Delete a Look\n\nThis operation **permanently** removes a look from the Looker database.\n\nNOTE: There is no \"undo\" for this kind of delete.\n\nFor information about soft-delete (which can be undone) see [update_look()](#!/Look/update_look).\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Id of look", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "mobile_settings", - "summary": "Get Mobile_Settings", - "description": "### Get all mobile settings.\n", "responses": { - "200": { - "description": "Mobile_Settings", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MobileSettings" + "type": "string" } } } @@ -23493,262 +23521,79 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/mobile/device": { - "post": { + "/looks/{look_id}/run/{result_format}": { + "get": { "tags": [ - "Auth" + "Look" ], - "operationId": "register_mobile_device", - "summary": "Register Mobile Device", - "description": "### Registers a mobile device.\n# Required fields: [:device_token, :device_type]\n", - "responses": { - "200": { - "description": "Device registered successfully.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MobileToken" - } - } + "operationId": "run_look", + "summary": "Run Look", + "description": "### Run a Look\n\nRuns a given look's query and returns the results in the requested format.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json | Plain json\n| json_bi | (*RECOMMENDED*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query. See JsonBi type for schema\n| json_detail | (*LEGACY*) Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| md | Simple markdown\n| xlsx | MS Excel spreadsheet\n| sql | Returns the generated SQL rather than running the query\n| png | A PNG image of the visualization of the query\n| jpg | A JPG image of the visualization of the query\n\n**Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache.\n\n\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Id of look", + "required": true, + "schema": { + "type": "string" } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "result_format", + "in": "path", + "description": "Format of result", + "required": true, + "schema": { + "type": "string" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "limit", + "in": "query", + "description": "Row limit (may override the limit in the saved query).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" } }, - "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": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MobileToken" - } - } - }, - "description": "Writable device parameters.", - "required": true - } - } - }, - "/mobile/device/{device_id}": { - "patch": { - "tags": [ - "Auth" - ], - "operationId": "update_mobile_device_registration", - "summary": "Update Mobile Device Registration", - "description": "### Updates the mobile device registration\n", - "parameters": [ - { - "name": "device_id", - "in": "path", - "description": "Unique id of the device.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Device registration updated successfully.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MobileToken" - } - } - } - }, - "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 - }, - "delete": { - "tags": [ - "Auth" - ], - "operationId": "deregister_mobile_device", - "summary": "Deregister Mobile Device", - "description": "### Deregister a mobile device.\n", - "parameters": [ { - "name": "device_id", - "in": "path", - "description": "Unique id of the device.", - "required": true, + "name": "apply_formatting", + "in": "query", + "description": "Apply model-specified formatting to each result.", + "required": false, "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Device de-registered successfully." - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + "type": "boolean" } }, - "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 - } - }, - "/model_sets/search": { - "get": { - "tags": [ - "Role" - ], - "operationId": "search_model_sets", - "summary": "Search Model Sets", - "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", - "parameters": [ { - "name": "fields", + "name": "apply_vis", "in": "query", - "description": "Requested fields.", + "description": "Apply visualization options to results.", "required": false, "schema": { - "type": "string" + "type": "boolean" } }, { - "name": "limit", + "name": "cache", "in": "query", - "description": "Number of results to return (used with `offset`).", + "description": "Get results from cache if available.", "required": false, "schema": { - "type": "integer", - "format": "int64" + "type": "boolean" } }, { - "name": "offset", + "name": "image_width", "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", + "description": "Render width for image formats.", "required": false, "schema": { "type": "integer", @@ -23756,79 +23601,92 @@ } }, { - "name": "sorts", + "name": "image_height", "in": "query", - "description": "Fields to sort by.", + "description": "Render height for image formats.", "required": false, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } }, { - "name": "id", + "name": "generate_drill_links", "in": "query", - "description": "Match model set id.", + "description": "Generate drill links (only applicable to 'json_detail' format.", "required": false, "schema": { - "type": "string" + "type": "boolean" } }, { - "name": "name", + "name": "force_production", "in": "query", - "description": "Match model set name.", + "description": "Force use of production models even if the user is in development mode. Note that this flag being false does not guarantee development models will be used.", "required": false, "schema": { - "type": "string" + "type": "boolean" } }, { - "name": "all_access", + "name": "cache_only", "in": "query", - "description": "Match model sets by all_access status.", + "description": "Retrieve any results from cache even if the results have expired.", "required": false, "schema": { "type": "boolean" } }, { - "name": "built_in", + "name": "path_prefix", "in": "query", - "description": "Match model sets by built_in status.", + "description": "Prefix to use for drill links (url encoded).", "required": false, "schema": { - "type": "boolean" + "type": "string" } }, { - "name": "filter_or", + "name": "rebuild_pdts", "in": "query", - "description": "Combine given search criteria in a boolean OR expression.", + "description": "Rebuild PDTS used in query.", "required": false, "schema": { "type": "boolean" } }, { - "name": "models", + "name": "server_table_calcs", "in": "query", - "description": "Matches model sets that contain all of the specified models (comma separated). This is an experimental feature and may not yet be available on your instance.", + "description": "Perform table calculations on query results", "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { "200": { - "description": "Model Set", + "description": "Look", "content": { + "text": { + "schema": { + "type": "string" + } + }, "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ModelSet" - } + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + }, + "image/jpeg": { + "schema": { + "type": "string" } } } @@ -23836,61 +23694,131 @@ "400": { "description": "Bad Request", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } } } }, "404": { "description": "Not Found", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } } } }, "429": { "description": "Too Many Requests", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } } } } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/model_sets/{model_set_id}": { - "get": { + "/looks/{look_id}/copy": { + "post": { "tags": [ - "Role" + "Look" ], - "operationId": "model_set", - "summary": "Get Model Set", - "description": "### Get information about the model set with a specific id.\n", + "operationId": "copy_look", + "summary": "Copy Look", + "description": "### Copy an existing look\n\nCreates a copy of an existing look, in a specified folder, and returns the copied look.\n\n`look_id` and `folder_id` are required.\n\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", "parameters": [ { - "name": "model_set_id", + "name": "look_id", "in": "path", - "description": "Id of model set", + "description": "Look id to copy.", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "folder_id", "in": "query", - "description": "Requested fields.", + "description": "Folder id to copy to.", "required": false, "schema": { "type": "string" @@ -23899,11 +23827,21 @@ ], "responses": { "200": { - "description": "Specified model set.", + "description": "Look", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ModelSet" + "$ref": "#/components/schemas/LookWithQuery" + } + } + } + }, + "201": { + "description": "look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Look" } } } @@ -23928,6 +23866,26 @@ } } }, + "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": { @@ -23942,19 +23900,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/looks/{look_id}/move": { + "patch": { "tags": [ - "Role" + "Look" ], - "operationId": "delete_model_set", - "summary": "Delete Model Set", - "description": "### Delete the model set with a specific id.\n", + "operationId": "move_look", + "summary": "Move Look", + "description": "### Move an existing look\n\nMoves a look to a specified folder, and returns the moved look.\n\n`look_id` and `folder_id` are required.\n`look_id` and `folder_id` must already exist, and `folder_id` must be different from the current `folder_id` of the dashboard.\n", "parameters": [ { - "name": "model_set_id", + "name": "look_id", "in": "path", - "description": "id of model set", + "description": "Look id to move.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "folder_id", + "in": "query", + "description": "Folder id to move to.", "required": true, "schema": { "type": "string" @@ -23962,12 +23931,22 @@ } ], "responses": { - "204": { - "description": "Model set successfully deleted.", + "200": { + "description": "Look", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/LookWithQuery" + } + } + } + }, + "201": { + "description": "look", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Look" } } } @@ -23992,12 +23971,12 @@ } } }, - "405": { - "description": "Resource Can't Be Modified", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -24016,19 +23995,21 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/looks/{look_id}/certification": { "patch": { "tags": [ - "Role" + "Look" ], - "operationId": "update_model_set", - "summary": "Update Model Set", - "description": "### Update information about the model set with a specific id.\n", + "operationId": "update_look_certification", + "summary": "Update Look Certification", + "description": "### Update look certification\n", "parameters": [ { - "name": "model_set_id", + "name": "look_id", "in": "path", - "description": "id of model set", + "description": "Look id to update certification.", "required": true, "schema": { "type": "string" @@ -24037,11 +24018,11 @@ ], "responses": { "200": { - "description": "New state for specified model set.", + "description": "looks", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ModelSet" + "$ref": "#/components/schemas/Look" } } } @@ -24056,16 +24037,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -24076,16 +24047,6 @@ } } }, - "405": { - "description": "Resource Can't Be Modified", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -24107,30 +24068,30 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ModelSet" + "$ref": "#/components/schemas/Certification" } } }, - "description": "ModelSet", + "description": "Certification Data", "required": true } } }, - "/model_sets": { + "/lookml_models": { "get": { "tags": [ - "Role" + "LookmlModel" ], - "operationId": "all_model_sets", - "summary": "Get All Model Sets", - "description": "### Get information about all model sets.\n", + "operationId": "all_lookml_models", + "summary": "Get All LookML Models", + "description": "### Get information about all lookml models.\n", "parameters": [ { "name": "fields", @@ -24140,23 +24101,89 @@ "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "All model sets.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ModelSet" - } - } - } - } }, - "404": { + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (can be used with offset)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (Defaults to 0 if not set when limit is used)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "exclude_empty", + "in": "query", + "description": "Whether or not to exclude models with no explores from the response (Defaults to false)", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "exclude_hidden", + "in": "query", + "description": "Whether or not to exclude hidden explores from the response (Defaults to false)", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "include_internal", + "in": "query", + "description": "Whether or not to include built-in models such as System Activity (Defaults to false)", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "include_self_service", + "in": "query", + "description": "Whether or not to include self service models (Defaults to false)", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "LookML Model", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { "description": "Not Found", "content": { "application/json": { @@ -24183,18 +24210,18 @@ }, "post": { "tags": [ - "Role" + "LookmlModel" ], - "operationId": "create_model_set", - "summary": "Create Model Set", - "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", + "operationId": "create_lookml_model", + "summary": "Create LookML Model", + "description": "### Create a lookml model using the specified configuration.\n", "responses": { "200": { - "description": "Newly created ModelSet", + "description": "LookML Model", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ModelSet" + "$ref": "#/components/schemas/LookmlModel" } } } @@ -24257,24 +24284,33 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ModelSet" + "$ref": "#/components/schemas/LookmlModel" } } }, - "description": "ModelSet", + "description": "LookML Model", "required": true } } }, - "/oauth_client_apps": { + "/lookml_models/{lookml_model_name}": { "get": { "tags": [ - "Auth" + "LookmlModel" ], - "operationId": "all_oauth_client_apps", - "summary": "Get All OAuth Client Apps", - "description": "### List All OAuth Client Apps\n\nLists all applications registered to use OAuth2 login with this Looker instance, including\nenabled and disabled apps.\n\nResults are filtered to include only the apps that the caller (current user)\nhas permission to see.\n", + "operationId": "lookml_model", + "summary": "Get LookML Model", + "description": "### Get information about a lookml model.\n", "parameters": [ + { + "name": "lookml_model_name", + "in": "path", + "description": "Name of lookml model.", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -24287,14 +24323,11 @@ ], "responses": { "200": { - "description": "OAuth Client App", + "description": "LookML Model", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OauthClientApp" - } + "$ref": "#/components/schemas/LookmlModel" } } } @@ -24333,43 +24366,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/oauth_client_apps/{client_guid}": { - "get": { + }, + "patch": { "tags": [ - "Auth" + "LookmlModel" ], - "operationId": "oauth_client_app", - "summary": "Get OAuth Client App", - "description": "### Get Oauth Client App\n\nReturns the registered app client with matching client_guid.\n", + "operationId": "update_lookml_model", + "summary": "Update LookML Model", + "description": "### Update a lookml model using the specified configuration.\n", "parameters": [ { - "name": "client_guid", + "name": "lookml_model_name", "in": "path", - "description": "The unique id of this application", + "description": "Name of lookml model.", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "OAuth Client App", + "description": "LookML Model", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OauthClientApp" + "$ref": "#/components/schemas/LookmlModel" } } } @@ -24394,6 +24416,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -24407,20 +24439,31 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LookmlModel" + } + } + }, + "description": "LookML Model", + "required": true + } }, "delete": { "tags": [ - "Auth" + "LookmlModel" ], - "operationId": "delete_oauth_client_app", - "summary": "Delete OAuth Client App", - "description": "### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the\nindicated resource does not exist.\n\n### Note: this deletion cannot be undone.\n", + "operationId": "delete_lookml_model", + "summary": "Delete LookML Model", + "description": "### Delete a lookml model.\n", "parameters": [ { - "name": "client_guid", + "name": "lookml_model_name", "in": "path", - "description": "The unique id of this application", + "description": "Name of lookml model.", "required": true, "schema": { "type": "string" @@ -24472,19 +24515,30 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/lookml_models/{lookml_model_name}/explores/{explore_name}": { + "get": { "tags": [ - "Auth" + "LookmlModel" ], - "operationId": "register_oauth_client_app", - "summary": "Register OAuth App", - "description": "### Register an OAuth2 Client App\n\nRegisters details identifying an external web app or native app as an OAuth2 login client of the Looker instance.\nThe app registration must provide a unique client_guid and redirect_uri that the app will present\nin OAuth login requests. If the client_guid and redirect_uri parameters in the login request do not match\nthe app details registered with the Looker instance, the request is assumed to be a forgery and is rejected.\n", + "operationId": "lookml_model_explore", + "summary": "Get LookML Model Explore", + "description": "### Get information about a lookml model explore.\n", "parameters": [ { - "name": "client_guid", + "name": "lookml_model_name", "in": "path", - "description": "The unique id of this application", + "description": "Name of lookml model.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "explore_name", + "in": "path", + "description": "Name of explore.", "required": true, "schema": { "type": "string" @@ -24498,15 +24552,24 @@ "schema": { "type": "string" } + }, + { + "name": "add_drills_metadata", + "in": "query", + "description": "Whether response should include drill field metadata.", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "OAuth Client App", + "description": "LookML Model Explore", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OauthClientApp" + "$ref": "#/components/schemas/LookmlModelExplore" } } } @@ -24531,26 +24594,6 @@ } } }, - "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": { @@ -24564,31 +24607,22 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OauthClientApp" - } - } - }, - "description": "OAuth Client App", - "required": true - } - }, - "patch": { + "x-looker-rate-limited": true + } + }, + "/merge_queries/{merge_query_id}": { + "get": { "tags": [ - "Auth" + "Query" ], - "operationId": "update_oauth_client_app", - "summary": "Update OAuth App", - "description": "### Update OAuth2 Client App Details\n\nModifies the details a previously registered OAuth2 login client app.\n", + "operationId": "merge_query", + "summary": "Get Merge Query", + "description": "### Get Merge Query\n\nReturns a merge query object given its id.\n", "parameters": [ { - "name": "client_guid", + "name": "merge_query_id", "in": "path", - "description": "The unique id of this application", + "description": "Merge Query Id", "required": true, "schema": { "type": "string" @@ -24597,7 +24631,7 @@ { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "schema": { "type": "string" @@ -24606,11 +24640,11 @@ ], "responses": { "200": { - "description": "OAuth Client App", + "description": "Merge Query", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OauthClientApp" + "$ref": "#/components/schemas/MergeQuery" } } } @@ -24635,16 +24669,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -24657,47 +24681,36 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OauthClientApp" - } - } - }, - "description": "OAuth Client App", - "required": true - } + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true } }, - "/oauth_client_apps/{client_guid}/tokens": { - "delete": { + "/merge_queries": { + "post": { "tags": [ - "Auth" + "Query" ], - "operationId": "invalidate_tokens", - "summary": "Invalidate Tokens", - "description": "### Invalidate All Issued Tokens\n\nImmediately invalidates all auth codes, sessions, access tokens and refresh tokens issued for\nthis app for ALL USERS of this app.\n", + "operationId": "create_merge_query", + "summary": "Create Merge Query", + "description": "### Create Merge Query\n\nCreates a new merge query object.\n\nA merge query takes the results of one or more queries and combines (merges) the results\naccording to field mapping definitions. The result is similar to a SQL left outer join.\n\nA merge query can merge results of queries from different SQL databases.\n\nThe order that queries are defined in the source_queries array property is significant. The\nfirst query in the array defines the primary key into which the results of subsequent\nqueries will be merged.\n\nLike model/view query objects, merge queries are immutable and have structural identity - if\nyou make a request to create a new merge query that is identical to an existing merge query,\nthe existing merge query will be returned instead of creating a duplicate. Conversely, any\nchange to the contents of a merge query will produce a new object with a new id.\n\n", "parameters": [ { - "name": "client_guid", - "in": "path", - "description": "The unique id of the application", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Merge Query", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/MergeQuery" } } } @@ -24722,6 +24735,26 @@ } } }, + "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": { @@ -24733,62 +24766,91 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-status": "stable", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MergeQuery" + } + } + }, + "description": "Merge Query", + "required": false + } } }, - "/oauth_client_apps/{client_guid}/users/{user_id}": { - "post": { + "/models/{model_name}/views/{view_name}/fields/{field_name}/suggestions": { + "get": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "activate_app_user", - "summary": "Activate OAuth App User", - "description": "### Activate an app for a user\n\nActivates a user for a given oauth client app. This indicates the user has been informed that\nthe app will have access to the user's looker data, and that the user has accepted and allowed\nthe app to use their Looker account.\n\nActivating a user for an app that the user is already activated with returns a success response.\n", + "operationId": "model_fieldname_suggestions", + "summary": "Model field name suggestions", + "description": "### Field name suggestions for a model and view\n\n`filters` is a string hash of values, with the key as the field name and the string value as the filter expression:\n\n```ruby\n{'users.age': '>=60'}\n```\n\nor\n\n```ruby\n{'users.age': '<30'}\n```\n\nor\n\n```ruby\n{'users.age': '=50'}\n```\n", "parameters": [ { - "name": "client_guid", + "name": "model_name", "in": "path", - "description": "The unique id of this application", + "description": "Name of model", "required": true, "schema": { "type": "string" } }, { - "name": "user_id", + "name": "view_name", "in": "path", - "description": "The id of the user to enable use of this app", + "description": "Name of view", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "field_name", + "in": "path", + "description": "Name of field to use for suggestions", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "term", "in": "query", - "description": "Requested fields.", + "description": "Search term pattern (evaluated as as `%term%`)", "required": false, "schema": { "type": "string" } + }, + { + "name": "filters", + "in": "query", + "description": "Suggestion filters with field name keys and comparison expressions", + "required": false, + "additionalProperties": { + "type": "string" + }, + "schema": { + "type": "object" + } } ], "responses": { "200": { - "description": "OAuth Client App", + "description": "Model view field suggestions", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ModelFieldSuggestions" } } } }, - "204": { - "description": "Deleted" - }, "400": { "description": "Bad Request", "content": { @@ -24809,16 +24871,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -24830,53 +24882,37 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/models/{model_name}": { + "get": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "deactivate_app_user", - "summary": "Deactivate OAuth App User", - "description": "### Deactivate an app for a user\n\nDeactivate a user for a given oauth client app. All tokens issued to the app for\nthis user will be invalid immediately. Before the user can use the app with their\nLooker account, the user will have to read and accept an account use disclosure statement for the app.\n\nAdmin users can deactivate other users, but non-admin users can only deactivate themselves.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the indicated\nresource (app or user) does not exist or has already been deactivated.\n", + "operationId": "get_model", + "summary": "Get a single model", + "description": "### Get a single model\n\n", "parameters": [ { - "name": "client_guid", - "in": "path", - "description": "The unique id of this application", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "user_id", + "name": "model_name", "in": "path", - "description": "The id of the user to enable use of this app", + "description": "Name of model", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "A Model", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Model" } } } @@ -24912,32 +24948,46 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/oidc_config": { + "/connections/{connection_name}/databases": { "get": { "tags": [ - "Auth" + "Metadata" + ], + "operationId": "connection_databases", + "summary": "List accessible databases to this connection", + "description": "### List databases available to this connection\n\nCertain dialects can support multiple databases per single connection.\nIf this connection supports multiple databases, the database names will be returned in an array.\n\nConnections using dialects that do not support multiple databases will return an empty array.\n\n**Note**: [Connection Features](#!/Metadata/connection_features) can be used to determine if a connection supports\nmultiple databases.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "oidc_config", - "summary": "Get OIDC Configuration", - "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "OIDC Configuration.", + "description": "Database names", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OIDCConfig" + "type": "array", + "items": { + "type": "string" + } } } } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -24956,6 +25006,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -24968,23 +25028,45 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/connections/{connection_name}/features": { + "get": { "tags": [ - "Auth" + "Metadata" + ], + "operationId": "connection_features", + "summary": "Metadata features supported by this connection", + "description": "### Retrieve metadata features for this connection\n\nReturns a list of feature names with `true` (available) or `false` (not available)\n\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "update_oidc_config", - "summary": "Update OIDC Configuration", - "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "New state for OIDC Configuration.", + "description": "Connection features", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OIDCConfig" + "$ref": "#/components/schemas/ConnectionFeatures" } } } @@ -24999,16 +25081,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -25042,52 +25114,71 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OIDCConfig" - } - } - }, - "description": "OIDC Config", - "required": true - } + "x-looker-rate-limited": true } }, - "/oidc_test_configs/{test_slug}": { + "/connections/{connection_name}/schemas": { "get": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "oidc_test_config", - "summary": "Get OIDC Test Configuration", - "description": "### Get a OIDC test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "connection_schemas", + "summary": "Get schemas for a connection", + "description": "### Get the list of schemas and tables for a connection\n\n", "parameters": [ { - "name": "test_slug", + "name": "connection_name", "in": "path", - "description": "Slug of test config", + "description": "Name of connection", "required": true, "schema": { "type": "string" } + }, + { + "name": "database", + "in": "query", + "description": "For dialects that support multiple databases, optionally identify which to use", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "cache", + "in": "query", + "description": "True to use fetch from cache, false to load fresh", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "OIDC test config.", + "description": "Schemas for connection", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OIDCConfig" + "type": "array", + "items": { + "$ref": "#/components/schemas/Schema" + } } } } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -25106,6 +25197,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -25120,32 +25221,92 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/connections/{connection_name}/tables": { + "get": { "tags": [ - "Auth" + "Metadata" ], - "operationId": "delete_oidc_test_config", - "summary": "Delete OIDC Test Configuration", - "description": "### Delete a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "connection_tables", + "summary": "Get tables for a connection", + "description": "### Get the list of tables for a schema\n\nFor dialects that support multiple databases, optionally identify which to use. If not provided, the default\ndatabase for the connection will be used.\n\nFor dialects that do **not** support multiple databases, **do not use** the database parameter\n", "parameters": [ { - "name": "test_slug", + "name": "connection_name", "in": "path", - "description": "Slug of test config", + "description": "Name of connection", "required": true, "schema": { "type": "string" } + }, + { + "name": "database", + "in": "query", + "description": "Optional. Name of database to use for the query, only if applicable", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "schema_name", + "in": "query", + "description": "Optional. Return only tables for this schema", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "cache", + "in": "query", + "description": "True to fetch from cache, false to load fresh", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "table_filter", + "in": "query", + "description": "Optional. Return tables with names that contain this value", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "table_limit", + "in": "query", + "description": "Optional. Return tables up to the table_limit", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } } ], "responses": { - "204": { - "description": "Test config succssfully deleted.", + "200": { + "description": "Schemas and tables for connection", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/SchemaTables" + } } } } @@ -25160,8 +25321,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -25170,12 +25331,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -25196,21 +25357,90 @@ "x-looker-rate-limited": true } }, - "/oidc_test_configs": { - "post": { + "/connections/{connection_name}/columns": { + "get": { "tags": [ - "Auth" + "Metadata" + ], + "operationId": "connection_columns", + "summary": "Get columns for a connection", + "description": "### Get the columns (and therefore also the tables) in a specific schema\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "database", + "in": "query", + "description": "For dialects that support multiple databases, optionally identify which to use", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "schema_name", + "in": "query", + "description": "Name of schema to use.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "cache", + "in": "query", + "description": "True to fetch from cache, false to load fresh", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "table_limit", + "in": "query", + "description": "limits the tables per schema returned", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "table_names", + "in": "query", + "description": "only fetch columns for a given (comma-separated) list of tables", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_oidc_test_config", - "summary": "Create OIDC Test Configuration", - "description": "### Create a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "OIDC test config", + "description": "Columns schema for connection", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OIDCConfig" + "type": "array", + "items": { + "$ref": "#/components/schemas/SchemaColumns" + } } } } @@ -25225,16 +25455,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -25268,35 +25488,56 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OIDCConfig" - } - } - }, - "description": "OIDC test config", - "required": true - } + "x-looker-rate-limited": true } }, - "/password_config": { + "/connections/{connection_name}/search_columns": { "get": { "tags": [ - "Auth" + "Metadata" + ], + "operationId": "connection_search_columns", + "summary": "Search a connection for columns", + "description": "### Search a connection for columns matching the specified name\n\n**Note**: `column_name` must be a valid column name. It is not a search pattern.\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "column_name", + "in": "query", + "description": "Column name to find", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "password_config", - "summary": "Get Password Config", - "description": "### Get password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Password Config", + "description": "Column names matching search pattern", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PasswordConfig" + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnSearch" + } } } } @@ -25311,8 +25552,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -25321,12 +25562,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -25345,21 +25586,43 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/connections/{connection_name}/cost_estimate": { + "post": { "tags": [ - "Auth" + "Metadata" + ], + "operationId": "connection_cost_estimate", + "summary": "Estimate costs for a connection", + "description": "### Connection cost estimating\n\nAssign a `sql` statement to the body of the request. e.g., for Ruby, `{sql: 'select * from users'}`\n\n**Note**: If the connection's dialect has no support for cost estimates, an error will be returned\n", + "parameters": [ + { + "name": "connection_name", + "in": "path", + "description": "Name of connection", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "update_password_config", - "summary": "Update Password Config", - "description": "### Update password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Password Config", + "description": "Connection cost estimates", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PasswordConfig" + "$ref": "#/components/schemas/CostEstimate" } } } @@ -25374,16 +25637,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -25416,36 +25669,36 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PasswordConfig" + "$ref": "#/components/schemas/CreateCostEstimate" } } }, - "description": "Password Config", + "description": "SQL statement to estimate", "required": true } } }, - "/password_config/force_password_reset_at_next_login_for_all_users": { - "put": { + "/mobile/settings": { + "get": { "tags": [ - "Auth" + "Config" ], - "operationId": "force_password_reset_at_next_login_for_all_users", - "summary": "Force password reset", - "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "mobile_settings", + "summary": "Get Mobile_Settings", + "description": "### Get all mobile settings.\n", "responses": { "200": { - "description": "Password Config", + "description": "Mobile_Settings", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/MobileSettings" } } } @@ -25460,16 +25713,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -25480,16 +25723,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -25501,29 +25734,26 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/permissions": { - "get": { + "/mobile/device": { + "post": { "tags": [ - "Role" + "Auth" ], - "operationId": "all_permissions", - "summary": "Get All Permissions", - "description": "### Get all supported permissions.\n", + "operationId": "register_mobile_device", + "summary": "Register Mobile Device", + "description": "### Registers a mobile device.\n# Required fields: [:device_token, :device_type]\n", "responses": { "200": { - "description": "Permission", + "description": "Device registered successfully.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Permission" - } + "$ref": "#/components/schemas/MobileToken" } } } @@ -25548,8 +25778,8 @@ } } }, - "429": { - "description": "Too Many Requests", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -25557,21 +25787,185 @@ } } } - } - }, - "x-looker-status": "stable", + }, + "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, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MobileToken" + } + } + }, + "description": "Writable device parameters.", + "required": true + } + } + }, + "/mobile/device/{device_id}": { + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_mobile_device_registration", + "summary": "Update Mobile Device Registration", + "description": "### Updates the mobile device registration\n", + "parameters": [ + { + "name": "device_id", + "in": "path", + "description": "Unique id of the device.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Device registration updated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MobileToken" + } + } + } + }, + "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 + }, + "delete": { + "tags": [ + "Auth" + ], + "operationId": "deregister_mobile_device", + "summary": "Deregister Mobile Device", + "description": "### Deregister a mobile device.\n", + "parameters": [ + { + "name": "device_id", + "in": "path", + "description": "Unique id of the device.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Device de-registered successfully." + }, + "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 } }, - "/permission_sets/search": { + "/model_sets/search": { "get": { "tags": [ "Role" ], - "operationId": "search_permission_sets", - "summary": "Search Permission Sets", - "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "search_model_sets", + "summary": "Search Model Sets", + "description": "### Search model sets\nReturns all model set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { "name": "fields", @@ -25614,7 +26008,7 @@ { "name": "id", "in": "query", - "description": "Match permission set id.", + "description": "Match model set id.", "required": false, "schema": { "type": "string" @@ -25623,7 +26017,7 @@ { "name": "name", "in": "query", - "description": "Match permission set name.", + "description": "Match model set name.", "required": false, "schema": { "type": "string" @@ -25632,7 +26026,7 @@ { "name": "all_access", "in": "query", - "description": "Match permission sets by all_access status.", + "description": "Match model sets by all_access status.", "required": false, "schema": { "type": "boolean" @@ -25641,7 +26035,7 @@ { "name": "built_in", "in": "query", - "description": "Match permission sets by built_in status.", + "description": "Match model sets by built_in status.", "required": false, "schema": { "type": "boolean" @@ -25657,9 +26051,9 @@ } }, { - "name": "permissions", + "name": "models", "in": "query", - "description": "Matches permission sets that contain all of the specified permissions (comma separated). This is an experimental feature and may not yet be available on your instance.", + "description": "Matches model sets that contain all of the specified models (comma separated). This is an experimental feature and may not yet be available on your instance.", "required": false, "schema": { "type": "string" @@ -25668,13 +26062,13 @@ ], "responses": { "200": { - "description": "Permission Set", + "description": "Model Set", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/PermissionSet" + "$ref": "#/components/schemas/ModelSet" } } } @@ -25716,19 +26110,19 @@ "x-looker-rate-limited": true } }, - "/permission_sets/{permission_set_id}": { + "/model_sets/{model_set_id}": { "get": { "tags": [ "Role" ], - "operationId": "permission_set", - "summary": "Get Permission Set", - "description": "### Get information about the permission set with a specific id.\n", + "operationId": "model_set", + "summary": "Get Model Set", + "description": "### Get information about the model set with a specific id.\n", "parameters": [ { - "name": "permission_set_id", + "name": "model_set_id", "in": "path", - "description": "Id of permission set", + "description": "Id of model set", "required": true, "schema": { "type": "string" @@ -25746,11 +26140,11 @@ ], "responses": { "200": { - "description": "Permission Set", + "description": "Specified model set.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionSet" + "$ref": "#/components/schemas/ModelSet" } } } @@ -25794,14 +26188,14 @@ "tags": [ "Role" ], - "operationId": "delete_permission_set", - "summary": "Delete Permission Set", - "description": "### Delete the permission set with a specific id.\n", + "operationId": "delete_model_set", + "summary": "Delete Model Set", + "description": "### Delete the model set with a specific id.\n", "parameters": [ { - "name": "permission_set_id", + "name": "model_set_id", "in": "path", - "description": "Id of permission set", + "description": "id of model set", "required": true, "schema": { "type": "string" @@ -25810,7 +26204,7 @@ ], "responses": { "204": { - "description": "Successfully deleted.", + "description": "Model set successfully deleted.", "content": { "application/json": { "schema": { @@ -25849,6 +26243,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -25868,14 +26272,14 @@ "tags": [ "Role" ], - "operationId": "update_permission_set", - "summary": "Update Permission Set", - "description": "### Update information about the permission set with a specific id.\nProviding save_content permission alone will also provide you the abilities of save_looks and save_dashboards.\n", + "operationId": "update_model_set", + "summary": "Update Model Set", + "description": "### Update information about the model set with a specific id.\n", "parameters": [ { - "name": "permission_set_id", + "name": "model_set_id", "in": "path", - "description": "Id of permission set", + "description": "id of model set", "required": true, "schema": { "type": "string" @@ -25884,11 +26288,11 @@ ], "responses": { "200": { - "description": "Permission Set", + "description": "New state for specified model set.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionSet" + "$ref": "#/components/schemas/ModelSet" } } } @@ -25903,6 +26307,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -25951,23 +26365,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionSet" + "$ref": "#/components/schemas/ModelSet" } } }, - "description": "Permission Set", + "description": "ModelSet", "required": true } } }, - "/permission_sets": { + "/model_sets": { "get": { "tags": [ "Role" ], - "operationId": "all_permission_sets", - "summary": "Get All Permission Sets", - "description": "### Get information about all permission sets.\n", + "operationId": "all_model_sets", + "summary": "Get All Model Sets", + "description": "### Get information about all model sets.\n", "parameters": [ { "name": "fields", @@ -25981,28 +26395,18 @@ ], "responses": { "200": { - "description": "Permission Set", + "description": "All model sets.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/PermissionSet" + "$ref": "#/components/schemas/ModelSet" } } } } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -26032,16 +26436,16 @@ "tags": [ "Role" ], - "operationId": "create_permission_set", - "summary": "Create Permission Set", - "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\nProviding save_content permission alone will also provide you the abilities of save_looks and save_dashboards.\n", + "operationId": "create_model_set", + "summary": "Create Model Set", + "description": "### Create a model set with the specified information. Model sets are used by Roles.\n", "responses": { "200": { - "description": "Permission Set", + "description": "Newly created ModelSet", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionSet" + "$ref": "#/components/schemas/ModelSet" } } } @@ -26066,16 +26470,6 @@ } } }, - "405": { - "description": "Resource Can't Be Modified", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "409": { "description": "Resource Already Exists", "content": { @@ -26114,46 +26508,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionSet" + "$ref": "#/components/schemas/ModelSet" } } }, - "description": "Permission Set", + "description": "ModelSet", "required": true } } }, - "/projects/{project_id}/deploy_ref_to_production": { - "post": { + "/oauth_client_apps": { + "get": { "tags": [ - "Project" + "Auth" ], - "operationId": "deploy_ref_to_production", - "summary": "Deploy Remote Branch or Ref to Production", - "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", + "operationId": "all_oauth_client_apps", + "summary": "Get All OAuth Client Apps", + "description": "### List All OAuth Client Apps\n\nLists all applications registered to use OAuth2 login with this Looker instance, including\nenabled and disabled apps.\n\nResults are filtered to include only the apps that the caller (current user)\nhas permission to see.\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", + "name": "fields", "in": "query", - "description": "Ref to deploy to production", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -26162,18 +26538,18 @@ ], "responses": { "200": { - "description": "Project", + "description": "OAuth Client App", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthClientApp" + } } } } }, - "204": { - "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "content": { @@ -26194,16 +26570,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -26220,37 +26586,28 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/async_deploy_ref_to_production": { - "post": { + "/oauth_client_apps/{client_guid}": { + "get": { "tags": [ - "Project" + "Auth" ], - "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", + "operationId": "oauth_client_app", + "summary": "Get OAuth Client App", + "description": "### Get Oauth Client App\n\nReturns the registered app client with matching client_guid.\n", "parameters": [ { - "name": "project_id", + "name": "client_guid", "in": "path", - "description": "Id of project", + "description": "The unique id of this application", "required": true, "schema": { "type": "string" } }, { - "name": "branch", - "in": "query", - "description": "Branch to deploy to production", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "ref", + "name": "fields", "in": "query", - "description": "Ref to deploy to production", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -26259,11 +26616,11 @@ ], "responses": { "200": { - "description": "Returns 200 if project deploy was successfully queued", + "description": "OAuth Client App", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AsyncDeployResponse" + "$ref": "#/components/schemas/OauthClientApp" } } } @@ -26288,16 +26645,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -26309,47 +26656,35 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/deploy_status/{deployment_id}": { - "get": { + }, + "delete": { "tags": [ - "Project" + "Auth" ], - "operationId": "async_deploy_status", - "summary": "Check Async Deploy Status", - "description": "### Check Status of Asynchronous Deploy\nGet the status of an asynchronous deploy operation.\n", + "operationId": "delete_oauth_client_app", + "summary": "Delete OAuth Client App", + "description": "### Delete OAuth Client App\n\nDeletes the registration info of the app with the matching client_guid.\nAll active sessions and tokens issued for this app will immediately become invalid.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the\nindicated resource does not exist.\n\n### Note: this deletion cannot be undone.\n", "parameters": [ { - "name": "project_id", + "name": "client_guid", "in": "path", - "description": "Id of project", + "description": "The unique id of this application", "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", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeployStatusResponse" + "type": "string" } } } @@ -26385,44 +26720,48 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/deploy_to_production": { + }, "post": { "tags": [ - "Project" + "Auth" ], - "operationId": "deploy_to_production", - "summary": "Deploy To Production", - "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", + "operationId": "register_oauth_client_app", + "summary": "Register OAuth App", + "description": "### Register an OAuth2 Client App\n\nRegisters details identifying an external web app or native app as an OAuth2 login client of the Looker instance.\nThe app registration must provide a unique client_guid and redirect_uri that the app will present\nin OAuth login requests. If the client_guid and redirect_uri parameters in the login request do not match\nthe app details registered with the Looker instance, the request is assumed to be a forgery and is rejected.\n", "parameters": [ { - "name": "project_id", + "name": "client_guid", "in": "path", - "description": "Id of project", + "description": "The unique id of this application", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Project", + "description": "OAuth Client App", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/OauthClientApp" } } } }, - "204": { - "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "content": { @@ -26443,6 +26782,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -26466,42 +26815,57 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/reset_to_production": { - "post": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthClientApp" + } + } + }, + "description": "OAuth Client App", + "required": true + } + }, + "patch": { "tags": [ - "Project" + "Auth" ], - "operationId": "reset_project_to_production", - "summary": "Reset To Production", - "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", + "operationId": "update_oauth_client_app", + "summary": "Update OAuth App", + "description": "### Update OAuth2 Client App Details\n\nModifies the details a previously registered OAuth2 login client app.\n", "parameters": [ { - "name": "project_id", + "name": "client_guid", "in": "path", - "description": "Id of project", + "description": "The unique id of this application", "required": true, "schema": { "type": "string" } - } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], "responses": { "200": { - "description": "Project", + "description": "OAuth Client App", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/OauthClientApp" } } } }, - "204": { - "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "content": { @@ -26545,22 +26909,33 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthClientApp" + } + } + }, + "description": "OAuth Client App", + "required": true + } } }, - "/projects/{project_id}/reset_to_remote": { - "post": { + "/oauth_client_apps/{client_guid}/tokens": { + "delete": { "tags": [ - "Project" + "Auth" ], - "operationId": "reset_project_to_remote", - "summary": "Reset To Remote", - "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", + "operationId": "invalidate_tokens", + "summary": "Invalidate Tokens", + "description": "### Invalidate All Issued Tokens\n\nImmediately invalidates all auth codes, sessions, access tokens and refresh tokens issued for\nthis app for ALL USERS of this app.\n", "parameters": [ { - "name": "project_id", + "name": "client_guid", "in": "path", - "description": "Id of project", + "description": "The unique id of the application", "required": true, "schema": { "type": "string" @@ -26568,8 +26943,8 @@ } ], "responses": { - "200": { - "description": "Project", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { @@ -26578,9 +26953,6 @@ } } }, - "204": { - "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "content": { @@ -26601,16 +26973,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -26622,24 +26984,42 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/projects": { - "get": { + "/oauth_client_apps/{client_guid}/users/{user_id}": { + "post": { "tags": [ - "Project" + "Auth" ], - "operationId": "all_projects", - "summary": "Get All Projects", - "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", + "operationId": "activate_app_user", + "summary": "Activate OAuth App User", + "description": "### Activate an app for a user\n\nActivates a user for a given oauth client app. This indicates the user has been informed that\nthe app will have access to the user's looker data, and that the user has accepted and allowed\nthe app to use their Looker account.\n\nActivating a user for an app that the user is already activated with returns a success response.\n", "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "path", + "description": "The id of the user to enable use of this app", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", - "description": "Requested fields", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -26648,18 +27028,18 @@ ], "responses": { "200": { - "description": "Project", + "description": "OAuth Client App", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } + "type": "string" } } } }, + "204": { + "description": "Deleted" + }, "400": { "description": "Bad Request", "content": { @@ -26670,8 +27050,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -26680,12 +27060,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -26701,24 +27081,53 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "delete": { "tags": [ - "Project" + "Auth" + ], + "operationId": "deactivate_app_user", + "summary": "Deactivate OAuth App User", + "description": "### Deactivate an app for a user\n\nDeactivate a user for a given oauth client app. All tokens issued to the app for\nthis user will be invalid immediately. Before the user can use the app with their\nLooker account, the user will have to read and accept an account use disclosure statement for the app.\n\nAdmin users can deactivate other users, but non-admin users can only deactivate themselves.\n\nAs with most REST DELETE operations, this endpoint does not return an error if the indicated\nresource (app or user) does not exist or has already been deactivated.\n", + "parameters": [ + { + "name": "client_guid", + "in": "path", + "description": "The unique id of this application", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "user_id", + "in": "path", + "description": "The id of the user to enable use of this app", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_project", - "summary": "Create Project", - "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", "responses": { - "200": { - "description": "Project", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "type": "string" } } } @@ -26743,26 +27152,6 @@ } } }, - "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": { @@ -26774,67 +27163,26 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - }, - "description": "Project", - "required": true - } + "x-looker-rate-limited": true } }, - "/projects/{project_id}": { + "/oidc_config": { "get": { "tags": [ - "Project" - ], - "operationId": "project", - "summary": "Get Project", - "description": "### Get A Project\n\nReturns the project with the given project id\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "oidc_config", + "summary": "Get OIDC Configuration", + "description": "### Get the OIDC configuration.\n\nLooker can be optionally configured to authenticate users against an OpenID Connect (OIDC)\nauthentication server. OIDC setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single OIDC configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Project", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "400": { - "description": "Bad Request", + "description": "OIDC Configuration.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/OIDCConfig" } } } @@ -26876,38 +27224,18 @@ }, "patch": { "tags": [ - "Project" - ], - "operationId": "update_project", - "summary": "Update Project", - "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nNote that Looker will validate the git connection when the `git_remote_url` is modified.\nIf Looker cannot connect to the remote repository (e.g. because the deploy key has not\nbeen added), the update will fail with a 400 Bad Request error.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "update_oidc_config", + "summary": "Update OIDC Configuration", + "description": "### Update the OIDC configuration.\n\nConfiguring OIDC impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the OIDC configuration.\n\nOIDC is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any OIDC setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Project", + "description": "New state for OIDC Configuration.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/OIDCConfig" } } } @@ -26922,8 +27250,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -26932,8 +27260,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -26961,16 +27289,6 @@ } } } - }, - "500": { - "description": "Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } } }, "x-looker-status": "stable", @@ -26980,28 +27298,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/OIDCConfig" } } }, - "description": "Project", + "description": "OIDC Config", "required": true } } }, - "/projects/{project_id}/manifest": { + "/oidc_test_configs/{test_slug}": { "get": { "tags": [ - "Project" + "Auth" ], - "operationId": "manifest", - "summary": "Get Manifest", - "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", + "operationId": "oidc_test_config", + "summary": "Get OIDC Test Configuration", + "description": "### Get a OIDC test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "project_id", + "name": "test_slug", "in": "path", - "description": "Project Id", + "description": "Slug of test config", "required": true, "schema": { "type": "string" @@ -27010,17 +27328,17 @@ ], "responses": { "200": { - "description": "Manifest", + "description": "OIDC test config.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Manifest" + "$ref": "#/components/schemas/OIDCConfig" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -27053,21 +27371,19 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/git/deploy_key": { - "post": { + }, + "delete": { "tags": [ - "Project" + "Auth" ], - "operationId": "create_git_deploy_key", - "summary": "Create Deploy Key", - "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", + "operationId": "delete_oidc_test_config", + "summary": "Delete OIDC Test Configuration", + "description": "### Delete a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "project_id", + "name": "test_slug", "in": "path", - "description": "Project Id", + "description": "Slug of test config", "required": true, "schema": { "type": "string" @@ -27075,10 +27391,10 @@ } ], "responses": { - "200": { - "description": "Project", + "204": { + "description": "Test config succssfully deleted.", "content": { - "text/plain": { + "application/json": { "schema": { "type": "string" } @@ -27088,47 +27404,37 @@ "400": { "description": "Bad Request", "content": { - "text/plain": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { - "text/plain": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { - "text/plain": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, - "422": { - "description": "Validation Error", - "content": { - "text/plain": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { - "text/plain": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } @@ -27139,32 +27445,23 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "get": { + } + }, + "/oidc_test_configs": { + "post": { "tags": [ - "Project" - ], - "operationId": "git_deploy_key", - "summary": "Git Deploy Key", - "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "create_oidc_test_config", + "summary": "Create OIDC Test Configuration", + "description": "### Create a OIDC test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "The text of the public key portion of the deploy_key", + "description": "OIDC test config", "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/OIDCConfig" } } } @@ -27172,7 +27469,17 @@ "400": { "description": "Bad Request", "content": { - "text/plain": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } @@ -27182,17 +27489,27 @@ "404": { "description": "Not Found", "content": { - "text/plain": { + "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": { - "text/plain": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } @@ -27202,44 +27519,35 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OIDCConfig" + } + } + }, + "description": "OIDC test config", + "required": true + } } }, - "/projects/{project_id}/validate": { - "post": { + "/password_config": { + "get": { "tags": [ - "Project" - ], - "operationId": "validate_project", - "summary": "Validate Project", - "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "password_config", + "summary": "Get Password Config", + "description": "### Get password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Project validation results", + "description": "Password Config", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectValidation" + "$ref": "#/components/schemas/PasswordConfig" } } } @@ -27254,8 +27562,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -27264,12 +27572,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -27289,49 +27597,36 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "get": { + "patch": { "tags": [ - "Project" + "Auth" ], - "operationId": "project_validation_results", - "summary": "Cached Project Validation Results", - "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" + "operationId": "update_password_config", + "summary": "Update Password Config", + "description": "### Update password config.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "responses": { + "200": { + "description": "Password Config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordConfig" + } + } } }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Project validation results", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectValidationCache" + "$ref": "#/components/schemas/Error" } } } }, - "204": { - "description": "Deleted" - }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -27350,6 +27645,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -27363,44 +27668,35 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PasswordConfig" + } + } + }, + "description": "Password Config", + "required": true + } } }, - "/projects/{project_id}/current_workspace": { - "get": { + "/password_config/force_password_reset_at_next_login_for_all_users": { + "put": { "tags": [ - "Project" - ], - "operationId": "project_workspace", - "summary": "Get Project Workspace", - "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "force_password_reset_at_next_login_for_all_users", + "summary": "Force password reset", + "description": "### Force all credentials_email users to reset their login passwords upon their next login.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Project Workspace", + "description": "Password Config", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectWorkspace" + "type": "string" } } } @@ -27415,6 +27711,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -27425,6 +27731,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -27441,43 +27757,23 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/files": { + "/permissions": { "get": { "tags": [ - "Project" - ], - "operationId": "all_project_files", - "summary": "Get All Project Files", - "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } - } + "Role" ], + "operationId": "all_permissions", + "summary": "Get All Permissions", + "description": "### Get all supported permissions.\n", "responses": { "200": { - "description": "Project File", + "description": "Permission", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ProjectFile" + "$ref": "#/components/schemas/Permission" } } } @@ -27493,16 +27789,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -27529,37 +27815,102 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/files/file": { + "/permission_sets/search": { "get": { "tags": [ - "Project" + "Role" ], - "operationId": "project_file", - "summary": "Get Project File", - "description": "### Get Project File Info\n\nReturns information about a file in the project\n", + "operationId": "search_permission_sets", + "summary": "Search Permission Sets", + "description": "### Search permission sets\nReturns all permission set records that match the given search criteria.\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } }, { - "name": "file_id", + "name": "limit", "in": "query", - "description": "File Id", - "required": true, + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, "schema": { "type": "string" } }, { - "name": "fields", + "name": "id", "in": "query", - "description": "Requested fields", + "description": "Match permission set id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Match permission set name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_access", + "in": "query", + "description": "Match permission sets by all_access status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "built_in", + "in": "query", + "description": "Match permission sets by built_in status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "permissions", + "in": "query", + "description": "Matches permission sets that contain all of the specified permissions (comma separated). This is an experimental feature and may not yet be available on your instance.", "required": false, "schema": { "type": "string" @@ -27568,11 +27919,14 @@ ], "responses": { "200": { - "description": "Project File", + "description": "Permission Set", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ProjectFile" + "type": "array", + "items": { + "$ref": "#/components/schemas/PermissionSet" + } } } } @@ -27613,28 +27967,28 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_connection_tests": { + "/permission_sets/{permission_set_id}": { "get": { "tags": [ - "Project" + "Role" ], - "operationId": "all_git_connection_tests", - "summary": "Get All Git Connection Tests", - "description": "### Get All Git Connection Tests\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", + "operationId": "permission_set", + "summary": "Get Permission Set", + "description": "### Get information about the permission set with a specific id.\n", "parameters": [ { - "name": "project_id", + "name": "permission_set_id", "in": "path", - "description": "Project Id", + "description": "Id of permission set", "required": true, "schema": { "type": "string" } }, { - "name": "remote_url", + "name": "fields", "in": "query", - "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -27643,14 +27997,11 @@ ], "responses": { "200": { - "description": "Git Connection Test", + "description": "Permission Set", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GitConnectionTest" - } + "$ref": "#/components/schemas/PermissionSet" } } } @@ -27689,61 +28040,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/git_connection_tests/{test_id}": { - "get": { + }, + "delete": { "tags": [ - "Project" + "Role" ], - "operationId": "run_git_connection_test", - "summary": "Run Git Connection Test", - "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", + "operationId": "delete_permission_set", + "summary": "Delete Permission Set", + "description": "### Delete the permission set with a specific id.\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "test_id", + "name": "permission_set_id", "in": "path", - "description": "Test Id", + "description": "Id of permission set", "required": true, "schema": { "type": "string" } - }, - { - "name": "remote_url", - "in": "query", - "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "use_production", - "in": "query", - "description": "(Optional: leave blank for dev credentials) Whether to use git production credentials.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { - "200": { - "description": "Git Connection Test Result", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitConnectionTestResult" + "type": "string" } } } @@ -27768,6 +28090,16 @@ } } }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -27792,46 +28124,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/lookml_tests": { - "get": { + }, + "patch": { "tags": [ - "Project" + "Role" ], - "operationId": "all_lookml_tests", - "summary": "Get All LookML Tests", - "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", + "operationId": "update_permission_set", + "summary": "Update Permission Set", + "description": "### Update information about the permission set with a specific id.\nProviding save_content permission alone will also provide you the abilities of save_looks and save_dashboards.\n", "parameters": [ { - "name": "project_id", + "name": "permission_set_id", "in": "path", - "description": "Project Id", + "description": "Id of permission set", "required": true, "schema": { "type": "string" } - }, - { - "name": "file_id", - "in": "query", - "description": "File Id", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "LookML Test", + "description": "Permission Set", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LookmlTest" - } + "$ref": "#/components/schemas/PermissionSet" } } } @@ -27856,6 +28174,26 @@ } } }, + "405": { + "description": "Resource Can't Be Modified", + "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": { @@ -27869,49 +28207,33 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionSet" + } + } + }, + "description": "Permission Set", + "required": true + } } }, - "/projects/{project_id}/lookml_tests/run": { + "/permission_sets": { "get": { "tags": [ - "Project" + "Role" ], - "operationId": "run_lookml_test", - "summary": "Run LookML Test", - "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", + "operationId": "all_permission_sets", + "summary": "Get All Permission Sets", + "description": "### Get information about all permission sets.\n", "parameters": [ { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "file_id", - "in": "query", - "description": "File Name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "test", - "in": "query", - "description": "Test Name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "model", + "name": "fields", "in": "query", - "description": "Model Name", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -27920,13 +28242,13 @@ ], "responses": { "200": { - "description": "LookML Test Results", + "description": "Permission Set", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/LookmlTestResult" + "$ref": "#/components/schemas/PermissionSet" } } } @@ -27952,16 +28274,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -27976,68 +28288,25 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{project_id}/tag": { + }, "post": { "tags": [ - "Project" - ], - "operationId": "tag_ref", - "summary": "Tag Ref", - "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n", - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "commit_sha", - "in": "query", - "description": "(Optional): Commit Sha to Tag", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "tag_name", - "in": "query", - "description": "Tag Name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "tag_message", - "in": "query", - "description": "(Optional): Tag Message", - "required": false, - "schema": { - "type": "string" - } - } + "Role" ], + "operationId": "create_permission_set", + "summary": "Create Permission Set", + "description": "### Create a permission set with the specified information. Permission sets are used by Roles.\nProviding save_content permission alone will also provide you the abilities of save_looks and save_dashboards.\n", "responses": { "200": { - "description": "Project", + "description": "Permission Set", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/PermissionSet" } } } }, - "204": { - "description": "Returns 204 if tagging a ref was successful, otherwise 400 with an error message" - }, "400": { "description": "Bad Request", "content": { @@ -28058,6 +28327,16 @@ } } }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "409": { "description": "Resource Already Exists", "content": { @@ -28096,45 +28375,66 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/PermissionSet" } } }, - "description": "Project", + "description": "Permission Set", "required": true } } }, - "/projects/{project_id}/git_diagnostic_report": { + "/projects/{project_id}/deploy_ref_to_production": { "post": { "tags": [ "Project" ], - "operationId": "create_git_diagnostic_report", - "summary": "Initiate Git Diagnosis", - "description": "### Initiate Git Diagnosis Suite\n", + "operationId": "deploy_ref_to_production", + "summary": "Deploy Remote Branch or Ref to Production", + "description": "### Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\n\nDeploy is a one/two step process\n1. If this is the first deploy of this project, create the production project with git repository.\n2. Pull the branch or ref into the production project.\n\nCan only specify either a branch or a ref.\n\n", "parameters": [ { "name": "project_id", "in": "path", - "description": "Looker Project ID", + "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": "GitDiagnosticReport", + "description": "Project", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitDiagnosticReport" + "type": "string" } } } }, + "204": { + "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "content": { @@ -28155,16 +28455,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -28186,45 +28476,43 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GitDiagnosticReport" - } - } - }, - "description": "GitDiagnosticReport", - "required": true - } + "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_diagnostic_report/{report_id}": { - "get": { + "/projects/{project_id}/async_deploy_ref_to_production": { + "post": { "tags": [ "Project" ], - "operationId": "get_git_diagnostic_report", - "summary": "Get Live Git Diagnosis", - "description": "### Retrieve Live Git Diagnostic Suite Execution Status\n", + "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": "Looker Project ID", + "description": "Id of project", "required": true, "schema": { "type": "string" } }, { - "name": "report_id", - "in": "path", - "description": "Report ID", - "required": true, + "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" } @@ -28232,11 +28520,11 @@ ], "responses": { "200": { - "description": "GitDiagnosticReport", + "description": "Returns 200 if project deploy was successfully queued", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitDiagnosticReport" + "$ref": "#/components/schemas/AsyncDeployResponse" } } } @@ -28261,6 +28549,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -28277,41 +28575,42 @@ "x-looker-rate-limited": true } }, - "/projects/{project_id}/git_diagnostic_report/{report_id}/repair": { - "post": { + "/projects/{project_id}/deploy_status/{deployment_id}": { + "get": { "tags": [ "Project" ], - "operationId": "repair_git_diagnostic_report", - "summary": "Repair Git Configuration", - "description": "### Repair Git Configuration Issues\n", + "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": "Looker Project ID", + "description": "Id of project", "required": true, "schema": { "type": "string" } }, { - "name": "report_id", + "name": "deployment_id", "in": "path", - "description": "Report ID", + "description": "Id of deployment", "required": true, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } } ], "responses": { "200": { - "description": "GitDiagnosticReport", + "description": "Returns 200 if status was successfully retrieved", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GitDiagnosticReport" + "$ref": "#/components/schemas/DeployStatusResponse" } } } @@ -28336,26 +28635,6 @@ } } }, - "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": { @@ -28369,72 +28648,23 @@ }, "x-looker-status": "beta", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GitDiagnosticReport" - } - } - }, - "description": "GitDiagnosticReport", - "required": true - } + "x-looker-rate-limited": true } }, - "/render_tasks/looks/{look_id}/{result_format}": { + "/projects/{project_id}/deploy_to_production": { "post": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "create_look_render_task", - "summary": "Create Look Render Task", - "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "deploy_to_production", + "summary": "Deploy To Production", + "description": "### Deploy LookML from this Development Mode Project to Production\n\nGit must have been configured, must be in dev mode and deploy permission required\n\nDeploy is a two / three step process:\n\n1. Push commits in current branch of dev mode project to the production branch (origin/master).\n Note a. This step is skipped in read-only projects.\n Note b. If this step is unsuccessful for any reason (e.g. rejected non-fastforward because production branch has\n commits not in current branch), subsequent steps will be skipped.\n2. If this is the first deploy of this project, create the production project with git repository.\n3. Pull the production branch into the production project.\n\n", "parameters": [ { - "name": "look_id", - "in": "path", - "description": "Id of look to render", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "result_format", + "name": "project_id", "in": "path", - "description": "Output type: png, or jpg", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "width", - "in": "query", - "description": "Output width in pixels", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "height", - "in": "query", - "description": "Output height in pixels", + "description": "Id of project", "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, "schema": { "type": "string" } @@ -28442,15 +28672,18 @@ ], "responses": { "200": { - "description": "Render Task", + "description": "Project", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RenderTask" + "type": "string" } } } }, + "204": { + "description": "Returns 204 if project was successfully deployed to production, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "content": { @@ -28471,16 +28704,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -28503,62 +28726,24 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/render_tasks/queries/{query_id}/{result_format}": { + "/projects/{project_id}/reset_to_production": { "post": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "create_query_render_task", - "summary": "Create Query Render Task", - "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "reset_project_to_production", + "summary": "Reset To Production", + "description": "### Reset a project to the revision of the project that is in production.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", "parameters": [ { - "name": "query_id", - "in": "path", - "description": "Id of the query to render", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "result_format", + "name": "project_id", "in": "path", - "description": "Output type: png or jpg", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "width", - "in": "query", - "description": "Output width in pixels", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "height", - "in": "query", - "description": "Output height in pixels", + "description": "Id of project", "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, "schema": { "type": "string" } @@ -28566,15 +28751,18 @@ ], "responses": { "200": { - "description": "Render Task", + "description": "Project", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RenderTask" + "type": "string" } } } }, + "204": { + "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "content": { @@ -28595,16 +28783,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -28627,98 +28805,24 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/render_tasks/dashboards/{dashboard_id}/{result_format}": { + "/projects/{project_id}/reset_to_remote": { "post": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "create_dashboard_render_task", - "summary": "Create Dashboard Render Task", - "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "reset_project_to_remote", + "summary": "Reset To Remote", + "description": "### Reset a project development branch to the revision of the project that is on the remote.\n\n**DANGER** this will delete any changes that have not been pushed to a remote repository.\n", "parameters": [ { - "name": "dashboard_id", - "in": "path", - "description": "Id of dashboard to render. The ID can be a LookML dashboard also.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "result_format", + "name": "project_id", "in": "path", - "description": "Output type: pdf, png, or jpg", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "width", - "in": "query", - "description": "Output width in pixels", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "height", - "in": "query", - "description": "Output height in pixels", + "description": "Id of project", "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "pdf_paper_size", - "in": "query", - "description": "Paper size for pdf. Value can be one of: [\"letter\",\"legal\",\"tabloid\",\"a0\",\"a1\",\"a2\",\"a3\",\"a4\",\"a5\"]", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "pdf_landscape", - "in": "query", - "description": "Whether to render pdf in landscape paper orientation", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "long_tables", - "in": "query", - "description": "Whether or not to expand table vis to full length", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "theme", - "in": "query", - "description": "Theme to apply. Will render embedded version of dashboard if valid", - "required": false, "schema": { "type": "string" } @@ -28726,15 +28830,18 @@ ], "responses": { "200": { - "description": "Render Task", + "description": "Project", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RenderTask" + "type": "string" } } } }, + "204": { + "description": "Returns 204 if project was successfully reset, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "content": { @@ -28755,16 +28862,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -28787,56 +28884,36 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateDashboardRenderTask" - } - } - }, - "description": "Dashboard render task parameters", - "required": true - } + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true } }, - "/render_tasks/{render_task_id}": { - "get": { + "/projects/{project_id}/pull_from_production": { + "post": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "render_task", - "summary": "Get Render Task", - "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "pull_project_from_production", + "summary": "Pull from Production", + "description": "### Pull from Production\nPulls changes from the remote production branch into the current development workspace.\n", "parameters": [ { - "name": "render_task_id", + "name": "project_id", "in": "path", - "description": "Id of render task", + "description": "Id of project", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Render Task", + "description": "Returns git output message if pull was successful, otherwise 400 with an error message", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RenderTask" + "type": "string" } } } @@ -28861,6 +28938,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -28872,24 +28959,24 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/render_tasks/{render_task_id}/results": { - "get": { + "/projects/{project_id}/pull_from_remote": { + "post": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "render_task_results", - "summary": "Render Task Results", - "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", + "operationId": "pull_project_from_remote", + "summary": "Pull from Remote", + "description": "### Pull from Remote\nPulls changes from the remote tracking branch of the currently active branch into the local development workspace.\n", "parameters": [ { - "name": "render_task_id", + "name": "project_id", "in": "path", - "description": "Id of render task", + "description": "Id of project", "required": true, "schema": { "type": "string" @@ -28898,42 +28985,19 @@ ], "responses": { "200": { - "description": "Document or image", + "description": "Returns git output message if pull was successful, otherwise 400 with an error message", "content": { - "image/jpeg": { - "schema": { - "type": "string" - } - }, - "image/png": { - "schema": { - "type": "string" - } - }, - "application/pdf": { + "application/json": { "schema": { "type": "string" } } } }, - "202": { - "description": "Accepted" - }, "400": { "description": "Bad Request", "content": { - "image/jpeg": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "image/png": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "application/pdf": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } @@ -28943,19 +29007,19 @@ "404": { "description": "Not Found", "content": { - "image/jpeg": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "image/png": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } - }, - "application/pdf": { + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -28963,17 +29027,7 @@ "429": { "description": "Too Many Requests", "content": { - "image/jpeg": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "image/png": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, - "application/pdf": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } @@ -28981,62 +29035,24 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/render_tasks/dashboard_elements/{dashboard_element_id}/{result_format}": { - "post": { + "/projects": { + "get": { "tags": [ - "RenderTask" + "Project" ], - "operationId": "create_dashboard_element_render_task", - "summary": "Create Dashboard Element Render Task", - "description": "### Create a new task to render a dashboard element to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "operationId": "all_projects", + "summary": "Get All Projects", + "description": "### Get All Projects\n\nReturns all projects visible to the current user\n", "parameters": [ - { - "name": "dashboard_element_id", - "in": "path", - "description": "Id of dashboard element to render: UDD dashboard element would be numeric and LookML dashboard element would be model_name::dashboard_title::lookml_link_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "result_format", - "in": "path", - "description": "Output type: png or jpg", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "width", - "in": "query", - "description": "Output width in pixels", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "height", - "in": "query", - "description": "Output height in pixels", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Requested fields", "required": false, "schema": { "type": "string" @@ -29045,11 +29061,14 @@ ], "responses": { "200": { - "description": "Render Task", + "description": "Project", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RenderTask" + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } } } } @@ -29064,8 +29083,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -29074,8 +29093,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -29084,16 +29103,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -29106,45 +29115,23 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{root_project_id}/credential/{credential_id}": { - "put": { + }, + "post": { "tags": [ "Project" ], - "operationId": "update_repository_credential", - "summary": "Create Repository Credential", - "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", - "parameters": [ - { - "name": "root_project_id", - "in": "path", - "description": "Root Project Id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "credential_id", - "in": "path", - "description": "Credential Id", - "required": true, - "schema": { - "type": "string" - } - } - ], + "operationId": "create_project", + "summary": "Create Project", + "description": "### Create A Project\n\ndev mode required.\n- Call `update_session` to select the 'dev' workspace.\n\n`name` is required.\n`git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`.\n\n", "responses": { "200": { - "description": "Repository Credential", + "description": "Project", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RepositoryCredential" + "$ref": "#/components/schemas/Project" } } } @@ -29207,48 +29194,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RepositoryCredential" + "$ref": "#/components/schemas/Project" } } }, - "description": "Remote Project Information", + "description": "Project", "required": true } - }, - "delete": { + } + }, + "/projects/{project_id}": { + "get": { "tags": [ "Project" ], - "operationId": "delete_repository_credential", - "summary": "Delete Repository Credential", - "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", + "operationId": "project", + "summary": "Get Project", + "description": "### Get A Project\n\nReturns the project with the given project id\n", "parameters": [ { - "name": "root_project_id", + "name": "project_id", "in": "path", - "description": "Root Project Id", + "description": "Project Id", "required": true, "schema": { "type": "string" } }, { - "name": "credential_id", - "in": "path", - "description": "Credential Id", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Project", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Project" } } } @@ -29263,6 +29252,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -29287,37 +29286,41 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/projects/{root_project_id}/credentials": { - "get": { + }, + "patch": { "tags": [ "Project" ], - "operationId": "get_all_repository_credentials", - "summary": "Get All Repository Credentials", - "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", + "operationId": "update_project", + "summary": "Update Project", + "description": "### Update Project Configuration\n\nApply changes to a project's configuration.\n\n\n#### Configuring Git for a Project\n\nTo set up a Looker project with a remote git repository, follow these steps:\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `create_git_deploy_key` to create a new deploy key for the project\n1. Copy the deploy key text into the remote git repository's ssh key configuration\n1. Call `update_project` to set project's `git_remote_url` ()and `git_service_name`, if necessary).\n\nWhen you modify a project's `git_remote_url`, Looker connects to the remote repository to fetch\nmetadata. The remote git repository MUST be configured with the Looker-generated deploy\nkey for this project prior to setting the project's `git_remote_url`.\n\nNote that Looker will validate the git connection when the `git_remote_url` is modified.\nIf Looker cannot connect to the remote repository (e.g. because the deploy key has not\nbeen added), the update will fail with a 400 Bad Request error.\n\nTo set up a Looker project with a git repository residing on the Looker server (a 'bare' git repo):\n\n1. Call `update_session` to select the 'dev' workspace.\n1. Call `update_project` setting `git_remote_url` to null and `git_service_name` to \"bare\".\n\n", "parameters": [ { - "name": "root_project_id", + "name": "project_id", "in": "path", - "description": "Root Project Id", + "description": "Project Id", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Repository Credential", + "description": "Project", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RepositoryCredential" - } + "$ref": "#/components/schemas/Project" } } } @@ -29342,6 +29345,26 @@ } } }, + "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": { @@ -29351,65 +29374,60 @@ } } } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + }, + "description": "Project", + "required": true + } } }, - "/roles": { + "/projects/{project_id}/manifest": { "get": { "tags": [ - "Role" + "Project" ], - "operationId": "all_roles", - "summary": "Get All Roles", - "description": "### Get information about all roles.\n", + "operationId": "manifest", + "summary": "Get Manifest", + "description": "### Get A Projects Manifest object\n\nReturns the project with the given project id\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, "schema": { "type": "string" } - }, - { - "name": "ids", - "in": "query", - "description": "Optional list of ids to get specific roles.", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "get_all_support_roles", - "in": "query", - "description": "Get all Looker support roles.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "Role", + "description": "Manifest", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Role" - } + "$ref": "#/components/schemas/Manifest" } } } @@ -29448,21 +29466,34 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, + } + }, + "/projects/{project_id}/git/deploy_key": { "post": { "tags": [ - "Role" + "Project" + ], + "operationId": "create_git_deploy_key", + "summary": "Create Deploy Key", + "description": "### Create Git Deploy Key\n\nCreate a public/private key pair for authenticating ssh git requests from Looker to a remote git repository\nfor a particular Looker project.\n\nReturns the public key of the generated ssh key pair.\n\nCopy this public key to your remote git repository's ssh keys configuration so that the remote git service can\nvalidate and accept git requests from the Looker server.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "create_role", - "summary": "Create Role", - "description": "### Create a role with the specified information.\n", "responses": { "200": { - "description": "Role", + "description": "Project", "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/Role" + "type": "string" } } } @@ -29470,7 +29501,7 @@ "400": { "description": "Bad Request", "content": { - "application/json": { + "text/plain": { "schema": { "$ref": "#/components/schemas/Error" } @@ -29480,17 +29511,7 @@ "404": { "description": "Not Found", "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "405": { - "description": "Resource Can't Be Modified", - "content": { - "application/json": { + "text/plain": { "schema": { "$ref": "#/components/schemas/Error" } @@ -29500,7 +29521,7 @@ "409": { "description": "Resource Already Exists", "content": { - "application/json": { + "text/plain": { "schema": { "$ref": "#/components/schemas/Error" } @@ -29510,7 +29531,7 @@ "422": { "description": "Validation Error", "content": { - "application/json": { + "text/plain": { "schema": { "$ref": "#/components/schemas/ValidationError" } @@ -29520,7 +29541,7 @@ "429": { "description": "Too Many Requests", "content": { - "application/json": { + "text/plain": { "schema": { "$ref": "#/components/schemas/Error" } @@ -29530,132 +29551,108 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Role" - } - } - }, - "description": "Role", - "required": true - } - } - }, - "/roles/search": { + "x-looker-rate-limited": true + }, "get": { "tags": [ - "Role" + "Project" ], - "operationId": "search_roles", - "summary": "Search Roles", - "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "git_deploy_key", + "summary": "Git Deploy Key", + "description": "### Git Deploy Key\n\nReturns the ssh public key previously created for a project's git repository.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, "schema": { "type": "string" } - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" + } + ], + "responses": { + "200": { + "description": "The text of the public key portion of the deploy_key", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } } }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "id", - "in": "query", - "description": "Match role id.", - "required": false, - "schema": { - "type": "string" + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "model_set_ids", - "in": "query", - "description": "Match roles with these model set ids (comma separated). This is an experimental feature and may not yet be available on your instance.", - "required": false, - "schema": { - "type": "string" + "429": { + "description": "Too Many Requests", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } - }, + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/projects/{project_id}/validate": { + "post": { + "tags": [ + "Project" + ], + "operationId": "validate_project", + "summary": "Validate Project", + "description": "### Validate Project\n\nPerforms lint validation of all lookml files in the project.\nReturns a list of errors found, if any.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. For best performance, call `validate_project(project_id)` only\nwhen you really want to recompute project validation. To quickly display the results of\nthe most recent project validation (without recomputing), use `project_validation_results(project_id)`\n", + "parameters": [ { - "name": "permission_set_ids", - "in": "query", - "description": "Match roles with these permission set ids (comma separated). This is an experimental feature and may not yet be available on your instance.", - "required": false, + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, "schema": { "type": "string" } }, { - "name": "name", + "name": "fields", "in": "query", - "description": "Match role name.", + "description": "Requested fields", "required": false, "schema": { "type": "string" } - }, - { - "name": "built_in", - "in": "query", - "description": "Match roles by built_in status.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "Role", + "description": "Project validation results", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Role" - } + "$ref": "#/components/schemas/ProjectValidation" } } } @@ -29680,6 +29677,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -29694,106 +29701,48 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/roles/search/with_user_count": { + }, "get": { "tags": [ - "Role" + "Project" ], - "operationId": "search_roles_with_user_count", - "summary": "Search Roles with User Count", - "description": "### Search roles include user count\n\nReturns all role records that match the given search criteria, and attaches\nassociated user counts.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "project_validation_results", + "summary": "Cached Project Validation Results", + "description": "### Get Cached Project Validation Results\n\nReturns the cached results of a previous project validation calculation, if any.\nReturns http status 204 No Content if no validation results exist.\n\nValidating the content of all the files in a project can be computationally intensive\nfor large projects. Use this API to simply fetch the results of the most recent\nproject validation rather than revalidating the entire project from scratch.\n\nA value of `\"stale\": true` in the response indicates that the project has changed since\nthe cached validation results were computed. The cached validation results may no longer\nreflect the current state of the project.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "id", - "in": "query", - "description": "Match role id.", - "required": false, + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, "schema": { "type": "string" } }, { - "name": "name", + "name": "fields", "in": "query", - "description": "Match role name.", + "description": "Requested fields", "required": false, "schema": { "type": "string" } - }, - { - "name": "built_in", - "in": "query", - "description": "Match roles by built_in status.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "Role", + "description": "Project validation results", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RoleSearch" - } + "$ref": "#/components/schemas/ProjectValidationCache" } } } }, + "204": { + "description": "Deleted" + }, "400": { "description": "Bad Request", "content": { @@ -29830,32 +29779,41 @@ "x-looker-rate-limited": true } }, - "/roles/{role_id}": { + "/projects/{project_id}/current_workspace": { "get": { "tags": [ - "Role" + "Project" ], - "operationId": "role", - "summary": "Get Role", - "description": "### Get information about the role with a specific id.\n", + "operationId": "project_workspace", + "summary": "Get Project Workspace", + "description": "### Get Project Workspace\n\nReturns information about the state of the project files in the currently selected workspace\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Role", + "description": "Project Workspace", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/ProjectWorkspace" } } } @@ -29894,32 +29852,46 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/projects/{project_id}/files": { + "get": { "tags": [ - "Role" + "Project" ], - "operationId": "delete_role", - "summary": "Delete Role", - "description": "### Delete the role with a specific id.\n", + "operationId": "all_project_files", + "summary": "Get All Project Files", + "description": "### Get All Project Files\n\nReturns a list of the files in the project\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Project File", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/ProjectFile" + } } } } @@ -29934,8 +29906,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -29944,8 +29916,8 @@ } } }, - "405": { - "description": "Resource Can't Be Modified", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -29968,32 +29940,52 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/projects/{project_id}/files/file": { + "get": { "tags": [ - "Role" + "Project" ], - "operationId": "update_role", - "summary": "Update Role", - "description": "### Update information about the role with a specific id.\n", + "operationId": "project_file", + "summary": "Get Project File", + "description": "### Get Project File Info\n\nReturns information about a file in the project\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", "required": true, "schema": { "type": "string" } + }, + { + "name": "file_id", + "in": "query", + "description": "File Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Role", + "description": "Project File", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/ProjectFile" } } } @@ -30018,26 +30010,6 @@ } } }, - "405": { - "description": "Resource Can't Be Modified", - "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": { @@ -30051,42 +30023,31 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Role" - } - } - }, - "description": "Role", - "required": true - } + "x-looker-rate-limited": true } }, - "/roles/{role_id}/groups": { + "/projects/{project_id}/git_connection_tests": { "get": { "tags": [ - "Role" + "Project" ], - "operationId": "role_groups", - "summary": "Get Role Groups", - "description": "### Get information about all the groups with the role that has a specific id.\n", + "operationId": "all_git_connection_tests", + "summary": "Get All Git Connection Tests", + "description": "### Get All Git Connection Tests\n\nReturns a list of tests which can be run against a project's (or the dependency project for the provided remote_url) git connection. Call [Run Git Connection Test](#!/Project/run_git_connection_test) to execute each test in sequence.\n\nTests are ordered by increasing specificity. Tests should be run in the order returned because later tests require functionality tested by tests earlier in the test list.\n\nFor example, a late-stage test for write access is meaningless if connecting to the git server (an early test) is failing.\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "remote_url", "in": "query", - "description": "Requested fields.", + "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", "required": false, "schema": { "type": "string" @@ -30095,13 +30056,13 @@ ], "responses": { "200": { - "description": "Groups with role.", + "description": "Git Connection Test", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Group" + "$ref": "#/components/schemas/GitConnectionTest" } } } @@ -30141,35 +30102,61 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/projects/{project_id}/git_connection_tests/{test_id}": { + "get": { "tags": [ - "Role" + "Project" ], - "operationId": "set_role_groups", - "summary": "Update Role Groups", - "description": "### Set all groups for a role, removing all existing group associations from that role.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "run_git_connection_test", + "summary": "Run Git Connection Test", + "description": "### Run a git connection test\n\nRun the named test on the git service used by this project (or the dependency project for the provided remote_url) and return the result. This\nis intended to help debug git connections when things do not work properly, to give\nmore helpful information about why a git url is not working with Looker.\n\nTests should be run in the order they are returned by [Get All Git Connection Tests](#!/Project/all_git_connection_tests).\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "test_id", + "in": "path", + "description": "Test Id", "required": true, "schema": { "type": "string" } + }, + { + "name": "remote_url", + "in": "query", + "description": "(Optional: leave blank for root project) The remote url for remote dependency to test.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "use_production", + "in": "query", + "description": "(Optional: leave blank for dev credentials) Whether to use git production credentials.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Groups with role.", + "description": "Git Connection Test Result", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } + "$ref": "#/components/schemas/GitConnectionTestResult" } } } @@ -30184,8 +30171,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -30194,18 +30181,18 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } }, - "405": { - "description": "Resource Can't Be Modified", + "429": { + "description": "Too Many Requests", "content": { "application/json": { "schema": { @@ -30213,9 +30200,57 @@ } } } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/projects/{project_id}/lookml_tests": { + "get": { + "tags": [ + "Project" + ], + "operationId": "all_lookml_tests", + "summary": "Get All LookML Tests", + "description": "### Get All LookML Tests\n\nReturns a list of tests which can be run to validate a project's LookML code and/or the underlying data,\noptionally filtered by the file id.\nCall [Run LookML Test](#!/Project/run_lookml_test) to execute tests.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "file_id", + "in": "query", + "description": "File Id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "LookML Test", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LookmlTest" + } + } + } + } }, - "409": { - "description": "Resource Already Exists", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -30224,12 +30259,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -30247,69 +30282,64 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "description": "Array of Group Ids", - "required": true - } + "x-looker-rate-limited": true } }, - "/roles/{role_id}/users": { + "/projects/{project_id}/lookml_tests/run": { "get": { "tags": [ - "Role" + "Project" ], - "operationId": "role_users", - "summary": "Get Role Users", - "description": "### Get information about all the users with the role that has a specific id.\n", + "operationId": "run_lookml_test", + "summary": "Run LookML Test", + "description": "### Run LookML Tests\n\nRuns all tests in the project, optionally filtered by file, test, and/or model.\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "file_id", "in": "query", - "description": "Requested fields.", + "description": "File Name", "required": false, "schema": { "type": "string" } }, { - "name": "direct_association_only", + "name": "test", "in": "query", - "description": "Get only users associated directly with the role: exclude those only associated through groups.", + "description": "Test Name", "required": false, "schema": { - "type": "boolean" + "type": "string" + } + }, + { + "name": "model", + "in": "query", + "description": "Model Name", + "required": false, + "schema": { + "type": "string" } } ], "responses": { "200": { - "description": "Users with role.", + "description": "LookML Test Results", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/LookmlTestResult" } } } @@ -30335,6 +30365,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -30349,39 +30389,68 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/projects/{project_id}/tag": { + "post": { "tags": [ - "Role" + "Project" ], - "operationId": "set_role_users", - "summary": "Update Role Users", - "description": "### Set all the users of the role with a specific id.\n", + "operationId": "tag_ref", + "summary": "Tag Ref", + "description": "### Creates a tag for the most recent commit, or a specific ref is a SHA is provided\n", "parameters": [ { - "name": "role_id", + "name": "project_id", "in": "path", - "description": "id of role", + "description": "Project Id", "required": true, "schema": { "type": "string" } + }, + { + "name": "commit_sha", + "in": "query", + "description": "(Optional): Commit Sha to Tag", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tag_name", + "in": "query", + "description": "Tag Name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tag_message", + "in": "query", + "description": "(Optional): Tag Message", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Users with role.", + "description": "Project", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } + "$ref": "#/components/schemas/Project" } } } }, + "204": { + "description": "Returns 204 if tagging a ref was successful, otherwise 400 with an error message" + }, "400": { "description": "Bad Request", "content": { @@ -30392,16 +30461,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -30412,8 +30471,8 @@ } } }, - "405": { - "description": "Resource Can't Be Modified", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -30450,36 +30509,89 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/Project" } } }, - "description": "array of user ids for role", + "description": "Project", "required": true } } }, - "/running_queries": { - "get": { + "/render_tasks/looks/{look_id}/{result_format}": { + "post": { "tags": [ - "Query" + "RenderTask" + ], + "operationId": "create_look_render_task", + "summary": "Create Look Render Task", + "description": "### Create a new task to render a look to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "parameters": [ + { + "name": "look_id", + "in": "path", + "description": "Id of look to render", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: png, or jpg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "all_running_queries", - "summary": "Get All Running Queries", - "description": "Get information about all running queries.\n", "responses": { "200": { - "description": "Running Queries.", + "description": "Render Task", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RunningQueries" - } + "$ref": "#/components/schemas/RenderTask" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" } } } @@ -30494,6 +30606,26 @@ } } }, + "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": { @@ -30510,32 +30642,70 @@ "x-looker-rate-limited": true } }, - "/running_queries/{query_task_id}": { - "delete": { + "/render_tasks/queries/{query_id}/{result_format}": { + "post": { "tags": [ - "Query" + "RenderTask" ], - "operationId": "kill_query", - "summary": "Kill Running Query", - "description": "Kill a query with a specific query_task_id.\n", + "operationId": "create_query_render_task", + "summary": "Create Query Render Task", + "description": "### Create a new task to render an existing query to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", "parameters": [ { - "name": "query_task_id", + "name": "query_id", "in": "path", - "description": "Query task id.", + "description": "Id of the query to render", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: png or jpg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "Query successfully killed.", + "200": { + "description": "Render Task", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/RenderTask" } } } @@ -30560,6 +30730,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -30586,74 +30766,106 @@ "x-looker-rate-limited": true } }, - "/saml_config": { - "get": { + "/render_tasks/dashboards/{dashboard_id}/{result_format}": { + "post": { "tags": [ - "Auth" + "RenderTask" ], - "operationId": "saml_config", - "summary": "Get SAML Configuration", - "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", - "responses": { - "200": { - "description": "SAML Configuration.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlConfig" - } - } + "operationId": "create_dashboard_render_task", + "summary": "Create Dashboard Render Task", + "description": "### Create a new task to render a dashboard to a document or image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "parameters": [ + { + "name": "dashboard_id", + "in": "path", + "description": "Id of dashboard to render. The ID can be a LookML dashboard also.", + "required": true, + "schema": { + "type": "string" } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "result_format", + "in": "path", + "description": "Output type: pdf, png, or jpg", + "required": true, + "schema": { + "type": "string" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pdf_paper_size", + "in": "query", + "description": "Paper size for pdf. Value can be one of: [\"letter\",\"legal\",\"tabloid\",\"a0\",\"a1\",\"a2\",\"a3\",\"a4\",\"a5\"]", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "pdf_landscape", + "in": "query", + "description": "Whether to render pdf in landscape paper orientation", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "long_tables", + "in": "query", + "description": "Whether or not to expand table vis to full length", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "theme", + "in": "query", + "description": "Theme to apply. Will render embedded version of dashboard if valid", + "required": false, + "schema": { + "type": "string" } } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "patch": { - "tags": [ - "Auth" ], - "operationId": "update_saml_config", - "summary": "Update SAML Configuration", - "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "New state for SAML Configuration.", + "description": "Render Task", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SamlConfig" + "$ref": "#/components/schemas/RenderTask" } } } @@ -30668,8 +30880,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -30678,8 +30890,8 @@ } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -30710,53 +30922,62 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SamlConfig" + "$ref": "#/components/schemas/CreateDashboardRenderTask" } } }, - "description": "SAML Config", + "description": "Dashboard render task parameters", "required": true } } }, - "/saml_test_configs/{test_slug}": { + "/render_tasks/{render_task_id}": { "get": { "tags": [ - "Auth" + "RenderTask" ], - "operationId": "saml_test_config", - "summary": "Get SAML Test Configuration", - "description": "### Get a SAML test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "render_task", + "summary": "Get Render Task", + "description": "### Get information about a render task.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", "parameters": [ { - "name": "test_slug", + "name": "render_task_id", "in": "path", - "description": "Slug of test config", + "description": "Id of render task", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "SAML test config.", + "description": "Render Task", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SamlConfig" + "$ref": "#/components/schemas/RenderTask" } } } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -30787,21 +31008,23 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/render_tasks/{render_task_id}/results": { + "get": { "tags": [ - "Auth" + "RenderTask" ], - "operationId": "delete_saml_test_config", - "summary": "Delete SAML Test Configuration", - "description": "### Delete a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "render_task_results", + "summary": "Render Task Results", + "description": "### Get the document or image produced by a completed render task.\n\nNote that the PDF or image result will be a binary blob in the HTTP response, as indicated by the\nContent-Type in the response headers. This may require specialized (or at least different) handling than text\nresponses such as JSON. You may need to tell your HTTP client that the response is binary so that it does not\nattempt to parse the binary data as text.\n\nIf the render task exists but has not finished rendering the results, the response HTTP status will be\n**202 Accepted**, the response body will be empty, and the response will have a Retry-After header indicating\nthat the caller should repeat the request at a later time.\n\nReturns 404 if the render task cannot be found, if the cached result has expired, or if the caller\ndoes not have permission to view the results.\n\nFor detailed information about the status of the render task, use [Render Task](#!/RenderTask/render_task).\nPolling loops waiting for completion of a render task would be better served by polling **render_task(id)** until\nthe task status reaches completion (or error) instead of polling **render_task_results(id)** alone.\n", "parameters": [ { - "name": "test_slug", + "name": "render_task_id", "in": "path", - "description": "Slug of test config", + "description": "Id of render task", "required": true, "schema": { "type": "string" @@ -30809,30 +31032,43 @@ } ], "responses": { - "204": { - "description": "Test config succssfully deleted.", + "200": { + "description": "Document or image", "content": { - "application/json": { + "image/jpeg": { + "schema": { + "type": "string" + } + }, + "image/png": { + "schema": { + "type": "string" + } + }, + "application/pdf": { "schema": { "type": "string" } } } }, + "202": { + "description": "Accepted" + }, "400": { "description": "Bad Request", "content": { - "application/json": { + "image/jpeg": { "schema": { "$ref": "#/components/schemas/Error" } - } - } - }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/pdf": { "schema": { "$ref": "#/components/schemas/Error" } @@ -30842,7 +31078,17 @@ "404": { "description": "Not Found", "content": { - "application/json": { + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/pdf": { "schema": { "$ref": "#/components/schemas/Error" } @@ -30852,7 +31098,17 @@ "429": { "description": "Too Many Requests", "content": { - "application/json": { + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "image/png": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/pdf": { "schema": { "$ref": "#/components/schemas/Error" } @@ -30861,25 +31117,74 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/saml_test_configs": { + "/render_tasks/dashboard_elements/{dashboard_element_id}/{result_format}": { "post": { "tags": [ - "Auth" + "RenderTask" + ], + "operationId": "create_dashboard_element_render_task", + "summary": "Create Dashboard Element Render Task", + "description": "### Create a new task to render a dashboard element to an image.\n\nReturns a render task object.\nTo check the status of a render task, pass the render_task.id to [Get Render Task](#!/RenderTask/get_render_task).\nOnce the render task is complete, you can download the resulting document or image using [Get Render Task Results](#!/RenderTask/get_render_task_results).\n\n", + "parameters": [ + { + "name": "dashboard_element_id", + "in": "path", + "description": "Id of dashboard element to render: UDD dashboard element would be numeric and LookML dashboard element would be model_name::dashboard_title::lookml_link_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Output type: png or jpg", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "width", + "in": "query", + "description": "Output width in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "height", + "in": "query", + "description": "Output height in pixels", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_saml_test_config", - "summary": "Create SAML Test Configuration", - "description": "### Create a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "SAML test config", + "description": "Render Task", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SamlConfig" + "$ref": "#/components/schemas/RenderTask" } } } @@ -30894,8 +31199,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -30904,8 +31209,8 @@ } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -30936,36 +31241,45 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlConfig" - } - } - }, - "description": "SAML test config", - "required": true - } + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true } }, - "/parse_saml_idp_metadata": { - "post": { + "/projects/{root_project_id}/credential/{credential_id}": { + "put": { "tags": [ - "Auth" + "Project" + ], + "operationId": "update_repository_credential", + "summary": "Create Repository Credential", + "description": "### Configure Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n\n", + "parameters": [ + { + "name": "root_project_id", + "in": "path", + "description": "Root Project Id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "credential_id", + "in": "path", + "description": "Credential Id", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "parse_saml_idp_metadata", - "summary": "Parse SAML IdP XML", - "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Parse result", + "description": "Repository Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SamlMetadataParseResult" + "$ref": "#/components/schemas/RepositoryCredential" } } } @@ -30980,16 +31294,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -31000,64 +31304,8 @@ } } }, - "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": { - "text/plain": { - "schema": { - "type": "string" - } - } - }, - "description": "SAML IdP metadata xml", - "required": true - } - } - }, - "/fetch_and_parse_saml_idp_metadata": { - "post": { - "tags": [ - "Auth" - ], - "operationId": "fetch_and_parse_saml_idp_metadata", - "summary": "Parse SAML IdP Url", - "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", - "responses": { - "200": { - "description": "Parse result", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlMetadataParseResult" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "403": { - "description": "Permission Denied", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -31066,12 +31314,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -31092,108 +31340,37 @@ "x-looker-rate-limited": true, "requestBody": { "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/RepositoryCredential" } } }, - "description": "SAML IdP metadata public url", + "description": "Remote Project Information", "required": true } - } - }, - "/scheduled_plans/space/{space_id}": { - "get": { + }, + "delete": { "tags": [ - "ScheduledPlan" + "Project" ], - "operationId": "scheduled_plans_for_space", - "summary": "Scheduled Plans for Space", - "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", + "operationId": "delete_repository_credential", + "summary": "Delete Repository Credential", + "description": "### Repository Credential for a remote dependency\n\nAdmin required.\n\n`root_project_id` is required.\n`credential_id` is required.\n", "parameters": [ { - "name": "space_id", + "name": "root_project_id", "in": "path", - "description": "Space Id", + "description": "Root Project Id", "required": true, "schema": { "type": "string" } }, { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Scheduled Plan", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ScheduledPlan" - } - } - } - } - }, - "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": "db_query", - "x-looker-rate-limited": true - } - }, - "/scheduled_plans/{scheduled_plan_id}": { - "delete": { - "tags": [ - "ScheduledPlan" - ], - "operationId": "delete_scheduled_plan", - "summary": "Delete Scheduled Plan", - "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", - "parameters": [ - { - "name": "scheduled_plan_id", + "name": "credential_id", "in": "path", - "description": "Scheduled Plan Id", + "description": "Credential Id", "required": true, "schema": { "type": "string" @@ -31243,21 +31420,23 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/projects/{root_project_id}/credentials": { + "get": { "tags": [ - "ScheduledPlan" + "Project" ], - "operationId": "update_scheduled_plan", - "summary": "Update Scheduled Plan", - "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "operationId": "get_all_repository_credentials", + "summary": "Get All Repository Credentials", + "description": "### Get all Repository Credentials for a project\n\n`root_project_id` is required.\n", "parameters": [ { - "name": "scheduled_plan_id", + "name": "root_project_id", "in": "path", - "description": "Scheduled Plan Id", + "description": "Root Project Id", "required": true, "schema": { "type": "string" @@ -31266,11 +31445,14 @@ ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Repository Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ScheduledPlan" + "type": "array", + "items": { + "$ref": "#/components/schemas/RepositoryCredential" + } } } } @@ -31295,16 +31477,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -31317,54 +31489,62 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ScheduledPlan" - } - } - }, - "description": "Scheduled Plan", - "required": true - } - }, + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/roles": { "get": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plan", - "summary": "Get Scheduled Plan", - "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", + "operationId": "all_roles", + "summary": "Get All Roles", + "description": "### Get information about all roles.\n", "parameters": [ { - "name": "scheduled_plan_id", - "in": "path", - "description": "Scheduled Plan Id", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } }, { - "name": "fields", + "name": "ids", "in": "query", - "description": "Requested fields.", + "description": "Optional list of ids to get specific roles.", "required": false, + "style": "simple", + "explode": false, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "get_all_support_roles", + "in": "query", + "description": "Get all Looker support roles.", + "required": false, + "schema": { + "type": "boolean" } } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Role", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ScheduledPlan" + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } } } } @@ -31401,25 +31581,23 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/scheduled_plans": { + }, "post": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "create_scheduled_plan", - "summary": "Create Scheduled Plan", - "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://docs.cloud.google.com/looker/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", + "operationId": "create_role", + "summary": "Create Role", + "description": "### Create a role with the specified information.\n", "responses": { "200": { - "description": "Scheduled Plan", + "description": "Role", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ScheduledPlan" + "$ref": "#/components/schemas/Role" } } } @@ -31444,6 +31622,16 @@ } } }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "409": { "description": "Resource Already Exists", "content": { @@ -31476,50 +31664,117 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ScheduledPlan" + "$ref": "#/components/schemas/Role" } } }, - "description": "Scheduled Plan", + "description": "Role", "required": true } - }, + } + }, + "/roles/search": { "get": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "all_scheduled_plans", - "summary": "Get All Scheduled Plans", - "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "operationId": "search_roles", + "summary": "Search Roles", + "description": "### Search roles\n\nReturns all role records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "user_id", + "name": "fields", "in": "query", - "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", + "description": "Requested fields.", "required": false, "schema": { "type": "string" } }, { - "name": "fields", + "name": "limit", "in": "query", - "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", "required": false, "schema": { "type": "string" } }, { - "name": "all_users", + "name": "id", "in": "query", - "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", + "description": "Match role id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "model_set_ids", + "in": "query", + "description": "Match roles with these model set ids (comma separated). This is an experimental feature and may not yet be available on your instance.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "permission_set_ids", + "in": "query", + "description": "Match roles with these permission set ids (comma separated). This is an experimental feature and may not yet be available on your instance.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Match role name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "built_in", + "in": "query", + "description": "Match roles by built_in status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression.", "required": false, "schema": { "type": "boolean" @@ -31528,13 +31783,13 @@ ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Role", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ScheduledPlan" + "$ref": "#/components/schemas/Role" } } } @@ -31560,16 +31815,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -31582,146 +31827,42 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/scheduled_plans/run_once": { - "post": { + "/roles/search/with_user_count": { + "get": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plan_run_once", - "summary": "Run Scheduled Plan Once", - "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", - "responses": { - "200": { - "description": "Scheduled Plan", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ScheduledPlan" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } + "operationId": "search_roles_with_user_count", + "summary": "Search Roles with User Count", + "description": "### Search roles include user count\n\nReturns all role records that match the given search criteria, and attaches\nassociated user counts.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" } }, - "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": "db_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ScheduledPlan" - } - } - }, - "description": "Scheduled Plan", - "required": true - } - } - }, - "/scheduled_plans/search": { - "get": { - "tags": [ - "ScheduledPlan" - ], - "operationId": "search_scheduled_plans", - "summary": "Search Scheduled Plans", - "description": "### Search Scheduled Plans\n\nReturns all scheduled plans which matches the given search criteria.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", - "parameters": [ - { - "name": "user_id", - "in": "query", - "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "all_users", - "in": "query", - "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "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": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "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)", + "description": "Number of results to skip before returning any (used with `limit`).", "required": false, "schema": { "type": "integer", @@ -31738,90 +31879,36 @@ } }, { - "name": "name", - "in": "query", - "description": "Match Scheduled plan's name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "user_first_name", - "in": "query", - "description": "Returns scheduled plans belonging to user with this first name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "user_last_name", - "in": "query", - "description": "Returns scheduled plans belonging to user with this last name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "dashboard_id", - "in": "query", - "description": "Returns scheduled plans created on this Dashboard.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "look_id", - "in": "query", - "description": "Returns scheduled plans created on this Look.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "lookml_dashboard_id", - "in": "query", - "description": "Returns scheduled plans created on this LookML Dashboard.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "recipient", + "name": "id", "in": "query", - "description": "Match recipient address.", + "description": "Match role id.", "required": false, "schema": { "type": "string" } }, { - "name": "destination_type", + "name": "name", "in": "query", - "description": "Match scheduled plan's destination type.", + "description": "Match role name.", "required": false, "schema": { "type": "string" } }, { - "name": "delivery_format", + "name": "built_in", "in": "query", - "description": "Match scheduled plan's delivery format.", + "description": "Match roles by built_in status.", "required": false, "schema": { - "type": "string" + "type": "boolean" } }, { "name": "filter_or", "in": "query", - "description": "Combine given search criteria in a boolean OR expression", + "description": "Combine given search criteria in a boolean OR expression.", "required": false, "schema": { "type": "boolean" @@ -31830,13 +31917,13 @@ ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Role", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ScheduledPlan" + "$ref": "#/components/schemas/RoleSearch" } } } @@ -31862,16 +31949,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -31883,67 +31960,37 @@ } } }, - "x-looker-status": "alpha", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/scheduled_plans/look/{look_id}": { + "/roles/{role_id}": { "get": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plans_for_look", - "summary": "Scheduled Plans for Look", - "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "operationId": "role", + "summary": "Get Role", + "description": "### Get information about the role with a specific id.\n", "parameters": [ { - "name": "look_id", + "name": "role_id", "in": "path", - "description": "Look Id", + "description": "id of role", "required": true, "schema": { "type": "string" } - }, - { - "name": "user_id", - "in": "query", - "description": "User Id (default is requesting user if not specified)", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "all_users", - "in": "query", - "description": "Return scheduled plans belonging to all users for the look", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Role", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ScheduledPlan" - } + "$ref": "#/components/schemas/Role" } } } @@ -31980,51 +32027,96 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/scheduled_plans/dashboard/{dashboard_id}": { - "get": { + }, + "delete": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plans_for_dashboard", - "summary": "Scheduled Plans for Dashboard", - "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "operationId": "delete_role", + "summary": "Delete Role", + "description": "### Delete the role with a specific id.\n", "parameters": [ { - "name": "dashboard_id", + "name": "role_id", "in": "path", - "description": "Dashboard Id", + "description": "id of role", "required": true, "schema": { "type": "string" } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } }, - { - "name": "user_id", - "in": "query", - "description": "User Id (default is requesting user if not specified)", - "required": false, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "all_users", - "in": "query", - "description": "Return scheduled plans belonging to all users for the dashboard", - "required": false, - "schema": { - "type": "boolean" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "405": { + "description": "Resource Can't Be Modified", + "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 + }, + "patch": { + "tags": [ + "Role" + ], + "operationId": "update_role", + "summary": "Update Role", + "description": "### Update information about the role with a specific id.\n", + "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, "schema": { "type": "string" } @@ -32032,14 +32124,11 @@ ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Role", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ScheduledPlan" - } + "$ref": "#/components/schemas/Role" } } } @@ -32064,6 +32153,26 @@ } } }, + "405": { + "description": "Resource Can't Be Modified", + "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": { @@ -32076,37 +32185,39 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", - "x-looker-rate-limited": true + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + }, + "description": "Role", + "required": true + } } }, - "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { + "/roles/{role_id}/groups": { "get": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plans_for_lookml_dashboard", - "summary": "Scheduled Plans for LookML Dashboard", - "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", + "operationId": "role_groups", + "summary": "Get Role Groups", + "description": "### Get information about all the groups with the role that has a specific id.\n", "parameters": [ { - "name": "lookml_dashboard_id", + "name": "role_id", "in": "path", - "description": "LookML Dashboard Id", + "description": "id of role", "required": true, "schema": { "type": "string" } }, - { - "name": "user_id", - "in": "query", - "description": "User Id (default is requesting user if not specified)", - "required": false, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -32115,26 +32226,17 @@ "schema": { "type": "string" } - }, - { - "name": "all_users", - "in": "query", - "description": "Return scheduled plans belonging to all users for the dashboard", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Groups with role.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ScheduledPlan" + "$ref": "#/components/schemas/Group" } } } @@ -32172,23 +32274,21 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/scheduled_plans/{scheduled_plan_id}/run_once": { - "post": { + }, + "put": { "tags": [ - "ScheduledPlan" + "Role" ], - "operationId": "scheduled_plan_run_once_by_id", - "summary": "Run Scheduled Plan Once by Id", - "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", + "operationId": "set_role_groups", + "summary": "Update Role Groups", + "description": "### Set all groups for a role, removing all existing group associations from that role.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "scheduled_plan_id", + "name": "role_id", "in": "path", - "description": "Id of schedule plan to copy and run", + "description": "id of role", "required": true, "schema": { "type": "string" @@ -32197,11 +32297,14 @@ ], "responses": { "200": { - "description": "Scheduled Plan", + "description": "Groups with role.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ScheduledPlan" + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } } } } @@ -32216,6 +32319,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -32226,6 +32339,16 @@ } } }, + "405": { + "description": "Resource Can't Be Modified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "409": { "description": "Resource Already Exists", "content": { @@ -32258,34 +32381,55 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WriteScheduledPlan" + "type": "array", + "items": { + "type": "string" + } } } }, - "description": "Property values to apply to the newly copied scheduled plan before running it", - "required": false + "description": "Array of Group Ids", + "required": true } } }, - "/self_service_models/allowed_connections": { + "/roles/{role_id}/users": { "get": { "tags": [ - "SelfService" + "Role" ], - "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", + "operationId": "role_users", + "summary": "Get Role Users", + "description": "### Get information about all the users with the role that has a specific id.\n", "parameters": [ { - "name": "google_sheets", + "name": "role_id", + "in": "path", + "description": "id of role", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", "in": "query", - "description": "Include connections allowed for Google Sheets.", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "direct_association_only", + "in": "query", + "description": "Get only users associated directly with the role: exclude those only associated through groups.", "required": false, "schema": { "type": "boolean" @@ -32294,13 +32438,13 @@ ], "responses": { "200": { - "description": "List of allowed connection names", + "description": "Users with role.", "content": { "application/json": { "schema": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/User" } } } @@ -32316,8 +32460,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -32326,18 +32470,8 @@ } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "429": { - "description": "Too Many Requests", + "429": { + "description": "Too Many Requests", "content": { "application/json": { "schema": { @@ -32347,24 +32481,22 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/self_service_models/{model_name}/lookml": { - "get": { + }, + "put": { "tags": [ - "SelfService" + "Role" ], - "operationId": "get_self_service_model_lookml", - "summary": "Get Self Service LookML", - "description": "### Get Generated LookML for a Self Service Model\n", + "operationId": "set_role_users", + "summary": "Update Role Users", + "description": "### Set all the users of the role with a specific id.\n", "parameters": [ { - "name": "model_name", + "name": "role_id", "in": "path", - "description": "Name of self service model", + "description": "id of role", "required": true, "schema": { "type": "string" @@ -32373,11 +32505,14 @@ ], "responses": { "200": { - "description": "Self service lookml", + "description": "Users with role.", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } } } } @@ -32392,6 +32527,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -32402,6 +32547,26 @@ } } }, + "405": { + "description": "Resource Can't Be Modified", + "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": { @@ -32413,43 +32578,49 @@ } } }, - "x-looker-status": "beta", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "array of user ids for role", + "required": true + } } }, - "/self_service_models/{model_name}/certification": { - "patch": { + "/running_queries": { + "get": { "tags": [ - "SelfService" - ], - "operationId": "update_self_service_explore_certification", - "summary": "Update certification for a Self Service Explore", - "description": "### Update certification for a Self Service Explore\n", - "parameters": [ - { - "name": "model_name", - "in": "path", - "description": "Name of self service model.", - "required": true, - "schema": { - "type": "string" - } - } + "Query" ], + "operationId": "all_running_queries", + "summary": "Get All Running Queries", + "description": "Get information about all running queries.\n", "responses": { "200": { - "description": "Updated certification for self service model", + "description": "Running Queries.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Certification" + "type": "array", + "items": { + "$ref": "#/components/schemas/RunningQueries" + } } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -32458,8 +32629,8 @@ } } }, - "403": { - "description": "Permission Denied", + "429": { + "description": "Too Many Requests", "content": { "application/json": { "schema": { @@ -32467,9 +32638,45 @@ } } } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true + } + }, + "/running_queries/{query_task_id}": { + "delete": { + "tags": [ + "Query" + ], + "operationId": "kill_query", + "summary": "Kill Running Query", + "description": "Kill a query with a specific query_task_id.\n", + "parameters": [ + { + "name": "query_task_id", + "in": "path", + "description": "Query task id.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Query successfully killed.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -32478,8 +32685,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -32509,43 +32716,32 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Certification" - } - } - }, - "description": "Certification Information", - "required": true - } + "x-looker-status": "stable", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true } }, - "/session_config": { + "/saml_config": { "get": { "tags": [ "Auth" ], - "operationId": "session_config", - "summary": "Get Session Config", - "description": "### Get session config.\n", + "operationId": "saml_config", + "summary": "Get SAML Configuration", + "description": "### Get the SAML configuration.\n\nLooker can be optionally configured to authenticate users against a SAML authentication server.\nSAML setup requires coordination with an administrator of that server.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nLooker maintains a single SAML configuration. It can be read and updated. Updates only succeed if the new state will be valid (in the sense that all required fields are populated); it is up to you to ensure that the configuration is appropriate and correct).\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Session Config", + "description": "SAML Configuration.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SessionConfig" + "$ref": "#/components/schemas/SamlConfig" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -32583,16 +32779,16 @@ "tags": [ "Auth" ], - "operationId": "update_session_config", - "summary": "Update Session Config", - "description": "### Update session config.\n", + "operationId": "update_saml_config", + "summary": "Update SAML Configuration", + "description": "### Update the SAML configuration.\n\nConfiguring SAML impacts authentication for all users. This configuration should be done carefully.\n\nOnly Looker administrators can read and update the SAML configuration.\n\nSAML is enabled or disabled for Looker using the **enabled** field.\n\nIt is **highly** recommended that any SAML setting changes be tested using the APIs below before being set globally.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Session Config", + "description": "New state for SAML Configuration.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SessionConfig" + "$ref": "#/components/schemas/SamlConfig" } } } @@ -32607,6 +32803,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -32645,36 +32851,47 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SessionConfig" + "$ref": "#/components/schemas/SamlConfig" } } }, - "description": "Session Config", + "description": "SAML Config", "required": true } } }, - "/session": { + "/saml_test_configs/{test_slug}": { "get": { "tags": [ - "Session" + "Auth" + ], + "operationId": "saml_test_config", + "summary": "Get SAML Test Configuration", + "description": "### Get a SAML test configuration by test_slug.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "parameters": [ + { + "name": "test_slug", + "in": "path", + "description": "Slug of test config", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "session", - "summary": "Get Auth", - "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", "responses": { "200": { - "description": "Auth", + "description": "SAML test config.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiSession" + "$ref": "#/components/schemas/SamlConfig" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -32708,20 +32925,31 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "delete": { "tags": [ - "Session" + "Auth" + ], + "operationId": "delete_saml_test_config", + "summary": "Delete SAML Test Configuration", + "description": "### Delete a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "parameters": [ + { + "name": "test_slug", + "in": "path", + "description": "Slug of test config", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "update_session", - "summary": "Update Auth", - "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", "responses": { - "200": { - "description": "Auth", + "204": { + "description": "Test config succssfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ApiSession" + "type": "string" } } } @@ -32736,8 +32964,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -32746,12 +32974,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -32769,46 +32997,24 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiSession" - } - } - }, - "description": "Auth", - "required": true - } + "x-looker-rate-limited": true } }, - "/setting": { - "patch": { + "/saml_test_configs": { + "post": { "tags": [ - "Config" - ], - "operationId": "set_setting", - "summary": "Set Setting", - "description": "### Configure Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - auto_certify_lookml_content\n - content_certification_documentation_link\n - custom_welcome_email\n - data_connector_default_enabled\n - dashboard_auto_refresh_restriction\n - dashboard_auto_refresh_minimum_interval\n - extension_framework_enabled\n - extension_load_url_enabled\n - instance_config\n - is_content_certification_enabled\n - managed_certificate_uri\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - revoke_certification_on_edits\n - automated_mfa_enabled\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_enabled\n - embed_config\n - mcp_tools\n\nSee the `Setting` type for more information on the specific values that can be configured.\n\nIf a setting update is rejected, the API error payload should provide information on the cause of the rejection.\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "create_saml_test_config", + "summary": "Create SAML Test Configuration", + "description": "### Create a SAML test configuration.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Looker Settings", + "description": "SAML test config", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Setting" + "$ref": "#/components/schemas/SamlConfig" } } } @@ -32843,16 +33049,6 @@ } } }, - "409": { - "description": "Resource Already Exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "422": { "description": "Validation Error", "content": { @@ -32881,39 +33077,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Setting" + "$ref": "#/components/schemas/SamlConfig" } } }, - "description": "Looker Setting Configuration", + "description": "SAML test config", "required": true } - }, - "get": { + } + }, + "/parse_saml_idp_metadata": { + "post": { "tags": [ - "Config" - ], - "operationId": "get_setting", - "summary": "Get Setting", - "description": "### Get Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - auto_certify_lookml_content\n - content_certification_documentation_link\n - custom_welcome_email\n - data_connector_default_enabled\n - dashboard_auto_refresh_restriction\n - dashboard_auto_refresh_minimum_interval\n - extension_framework_enabled\n - extension_load_url_enabled\n - instance_config\n - is_content_certification_enabled\n - managed_certificate_uri\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - revoke_certification_on_edits\n - automated_mfa_enabled\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_enabled\n - embed_config\n - mcp_tools\n\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields", - "required": false, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "parse_saml_idp_metadata", + "summary": "Parse SAML IdP XML", + "description": "### Parse the given xml as a SAML IdP metadata document and return the result.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Looker Settings", + "description": "Parse result", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Setting" + "$ref": "#/components/schemas/SamlMetadataParseResult" } } } @@ -32928,8 +33115,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -32938,12 +33125,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -32961,33 +33148,41 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "description": "SAML IdP metadata xml", + "required": true + } } }, - "/smtp_settings": { + "/fetch_and_parse_saml_idp_metadata": { "post": { "tags": [ - "Config" + "Auth" ], - "operationId": "set_smtp_settings", - "summary": "Set SMTP Setting", - "description": "### Configure SMTP Settings\n This API allows users to configure the SMTP settings on the Looker instance.\n Only admin users are authorised to call this API.\n", + "operationId": "fetch_and_parse_saml_idp_metadata", + "summary": "Parse SAML IdP Url", + "description": "### Fetch the given url and parse it as a SAML IdP metadata document and return the result.\nNote that this requires that the url be public or at least at a location where the Looker instance\ncan fetch it without requiring any special authentication.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "204": { - "description": "Successfully updated SMTP settings" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "Parse result", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/SamlMetadataParseResult" } } } }, - "403": { - "description": "Permission Denied", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -32996,8 +33191,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -33006,8 +33201,8 @@ } } }, - "409": { - "description": "Resource Already Exists", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -33016,16 +33211,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -33042,30 +33227,39 @@ "x-looker-rate-limited": true, "requestBody": { "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/SmtpSettings" + "type": "string" } } }, - "description": "SMTP Setting Configuration", + "description": "SAML IdP metadata public url", "required": true } } }, - "/smtp_status": { + "/scheduled_plans/space/{space_id}": { "get": { "tags": [ - "Config" + "ScheduledPlan" ], - "operationId": "smtp_status", - "summary": "Get SMTP Status", - "description": "### Get current SMTP status.\n", + "operationId": "scheduled_plans_for_space", + "summary": "Scheduled Plans for Space", + "description": "### Get Scheduled Plans for a Space\n\nReturns scheduled plans owned by the caller for a given space id.\n", "parameters": [ + { + "name": "space_id", + "in": "path", + "description": "Space Id", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", - "description": "Include only these fields in the response", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -33074,11 +33268,14 @@ ], "responses": { "200": { - "description": "SMTP Status", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SmtpStatus" + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlan" + } } } } @@ -33115,155 +33312,38 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/folders/search": { - "get": { + "/scheduled_plans/{scheduled_plan_id}": { + "delete": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "search_folders", - "summary": "Search Folders", - "description": "Search for folders by creator id, parent id, name, etc", + "operationId": "delete_scheduled_plan", + "summary": "Delete Scheduled Plan", + "description": "### Delete a Scheduled Plan\n\nNormal users can only delete their own scheduled plans.\nAdmins can delete other users' scheduled plans.\nThis delete cannot be undone.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "scheduled_plan_id", + "in": "path", + "description": "Scheduled Plan Id", + "required": true, "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": "name", - "in": "query", - "description": "Match Space title.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "id", - "in": "query", - "description": "Match Space id", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "parent_id", - "in": "query", - "description": "Filter on a children of a particular folder.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "creator_id", - "in": "query", - "description": "Filter on folder created by a particular user.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "is_shared_root", - "in": "query", - "description": "Match is shared root", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "is_users_root", - "in": "query", - "description": "Match is users root", - "required": false, - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "folders", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Folder" - } - } - } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } } }, "400": { @@ -33298,45 +33378,34 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - } - }, - "/folders/{folder_id}": { - "get": { + }, + "patch": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "folder", - "summary": "Get Folder", - "description": "### Get information about the folder with a specific id.", + "operationId": "update_scheduled_plan", + "summary": "Update Scheduled Plan", + "description": "### Update a Scheduled Plan\n\nAdmins can update other users' Scheduled Plans.\n\nNote: Any scheduled plan destinations specified in an update will **replace** all scheduled plan destinations\ncurrently defined for the scheduled plan.\n\nFor Example: If a scheduled plan has destinations A, B, and C, and you call update on this scheduled plan\nspecifying only B in the destinations, then destinations A and C will be deleted by the update.\n\nUpdating a scheduled plan to assign null or an empty array to the scheduled_plan_destinations property is an error, as a scheduled plan must always have at least one destination.\n\nIf you omit the scheduled_plan_destinations property from the object passed to update, then the destinations\ndefined on the original scheduled plan will remain unchanged.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", "parameters": [ { - "name": "folder_id", + "name": "scheduled_plan_id", "in": "path", - "description": "Id of folder", + "description": "Scheduled Plan Id", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Folder" + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -33361,6 +33430,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -33373,34 +33452,54 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledPlan" + } + } + }, + "description": "Scheduled Plan", + "required": true + } }, - "delete": { + "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "delete_folder", - "summary": "Delete Folder", - "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", + "operationId": "scheduled_plan", + "summary": "Get Scheduled Plan", + "description": "### Get Information About a Scheduled Plan\n\nAdmins can fetch information about other users' Scheduled Plans.\n", "parameters": [ { - "name": "folder_id", + "name": "scheduled_plan_id", "in": "path", - "description": "Id of folder", + "description": "Scheduled Plan Id", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Scheduled Plan", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -33425,16 +33524,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -33447,34 +33536,25 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/scheduled_plans": { + "post": { "tags": [ - "Folder" - ], - "operationId": "update_folder", - "summary": "Update Folder", - "description": "### Update the folder with a specific id.", - "parameters": [ - { - "name": "folder_id", - "in": "path", - "description": "Id of folder", - "required": true, - "schema": { - "type": "string" - } - } + "ScheduledPlan" ], + "operationId": "create_scheduled_plan", + "summary": "Create Scheduled Plan", + "description": "### Create a Scheduled Plan\n\nCreate a scheduled plan to render a Look or Dashboard on a recurring schedule.\n\nTo create a scheduled plan, you MUST provide values for the following fields:\n`name`\nand\n`look_id`, `dashboard_id`, `lookml_dashboard_id`, or `query_id`\nand\n`cron_tab` or `datagroup`\nand\nat least one scheduled_plan_destination\n\nA scheduled plan MUST have at least one scheduled_plan_destination defined.\n\nWhen `look_id` is set, `require_no_results`, `require_results`, and `require_change` are all required.\n\nIf `create_scheduled_plan` fails with a 422 error, be sure to look at the error messages in the response which will explain exactly what fields are missing or values that are incompatible.\n\nThe queries that provide the data for the look or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `false` or not specified, the queries that provide the data for the\nlook or dashboard are run in the context of user account that owns the scheduled plan.\n\nWhen `run_as_recipient` is `true` and all the email recipients are Looker user accounts, the\nqueries are run in the context of each recipient, so different recipients may see different\ndata from the same scheduled render of a look or dashboard. For more details, see [Run As Recipient](https://docs.cloud.google.com/looker/docs/r/admin/run-as-recipient).\n\nAdmins can create and modify scheduled plans on behalf of other users by specifying a user id.\nNon-admin users may not create or modify scheduled plans by or for other users.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Folder" + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -33499,6 +33579,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -33521,49 +33611,65 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateFolder" + "$ref": "#/components/schemas/ScheduledPlan" } } }, - "description": "Folder parameters", + "description": "Scheduled Plan", "required": true } - } - }, - "/folders": { + }, "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "all_folders", - "summary": "Get All Folders", - "description": "### Get information about all folders.\n\nAll personal folders will be returned.\n\n", + "operationId": "all_scheduled_plans", + "summary": "Get All Scheduled Plans", + "description": "### List All Scheduled Plans\n\nReturns all scheduled plans which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ + { + "name": "user_id", + "in": "query", + "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", "required": false, "schema": { "type": "string" } + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/FolderBase" + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -33589,6 +33695,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -33601,23 +33717,25 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, + } + }, + "/scheduled_plans/run_once": { "post": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "create_folder", - "summary": "Create Folder", - "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", + "operationId": "scheduled_plan_run_once", + "summary": "Run Scheduled Plan Once", + "description": "### Run a Scheduled Plan Immediately\n\nCreate a scheduled plan that runs only once, and immediately.\n\nThis can be useful for testing a Scheduled Plan before committing to a production schedule.\n\nAdmins can create scheduled plans on behalf of other users by specifying a user id.\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n", "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Folder" + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -33674,68 +33792,55 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateFolder" + "$ref": "#/components/schemas/ScheduledPlan" } } }, - "description": "Folder parameters", + "description": "Scheduled Plan", "required": true } } }, - "/folders/{folder_id}/children": { + "/scheduled_plans/search": { "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "folder_children", - "summary": "Get Folder Children", - "description": "### Get the children of a folder.", + "operationId": "search_scheduled_plans", + "summary": "Search Scheduled Plans", + "description": "### Search Scheduled Plans\n\nReturns all scheduled plans which matches the given search criteria.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ { - "name": "folder_id", - "in": "path", - "description": "Id of folder", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", + "name": "user_id", "in": "query", - "description": "Requested fields.", + "description": "Return scheduled plans belonging to this user_id. If not provided, returns scheduled plans owned by the caller.", "required": false, "schema": { "type": "string" } }, { - "name": "page", + "name": "fields", "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response", "required": false, - "deprecated": true, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } }, { - "name": "per_page", + "name": "all_users", "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "description": "Return scheduled plans belonging to all users (caller needs see_schedules permission)", "required": false, - "deprecated": true, "schema": { - "type": "integer", - "format": "int64" + "type": "boolean" } }, { @@ -33766,17 +33871,143 @@ "schema": { "type": "string" } + }, + { + "name": "name", + "in": "query", + "description": "Match Scheduled plan's name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_first_name", + "in": "query", + "description": "Returns scheduled plans belonging to user with this first name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_last_name", + "in": "query", + "description": "Returns scheduled plans belonging to user with this last name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "dashboard_id", + "in": "query", + "description": "Returns scheduled plans created on this Dashboard.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "look_id", + "in": "query", + "description": "Returns scheduled plans created on this Look.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "lookml_dashboard_id", + "in": "query", + "description": "Returns scheduled plans created on this LookML Dashboard.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "recipient", + "in": "query", + "description": "Match recipient address.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "destination_type", + "in": "query", + "description": "Match scheduled plan's destination type.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "delivery_format", + "in": "query", + "description": "Match scheduled plan's delivery format.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_states", + "in": "query", + "description": "Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag).", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "run_once", + "in": "query", + "description": "Match Scheduled plan's run_once.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "enabled", + "in": "query", + "description": "Match Scheduled plan's enabled status.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "last_run_status", + "in": "query", + "description": "Match scheduled plan's last run status.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "Folders", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Folder" + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -33802,6 +34033,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -33813,66 +34054,66 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "alpha", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}/children/search": { + "/scheduled_plans/look/{look_id}": { "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "folder_children_search", - "summary": "Search Folder Children", - "description": "### Search the children of a folder", + "operationId": "scheduled_plans_for_look", + "summary": "Scheduled Plans for Look", + "description": "### Get Scheduled Plans for a Look\n\nReturns all scheduled plans for a look which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ { - "name": "folder_id", + "name": "look_id", "in": "path", - "description": "Id of folder", + "description": "Look Id", "required": true, "schema": { "type": "string" } }, { - "name": "fields", + "name": "user_id", "in": "query", - "description": "Requested fields.", + "description": "User Id (default is requesting user if not specified)", "required": false, "schema": { "type": "string" } }, { - "name": "sorts", + "name": "fields", "in": "query", - "description": "Fields to sort by.", + "description": "Requested fields.", "required": false, "schema": { "type": "string" } }, { - "name": "name", + "name": "all_users", "in": "query", - "description": "Match folder name.", + "description": "Return scheduled plans belonging to all users for the look", "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { "200": { - "description": "Folders", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Folder" + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -33910,28 +34151,46 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}/parent": { + "/scheduled_plans/dashboard/{dashboard_id}": { "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "folder_parent", - "summary": "Get Folder Parent", - "description": "### Get the parent of a folder", + "operationId": "scheduled_plans_for_dashboard", + "summary": "Scheduled Plans for Dashboard", + "description": "### Get Scheduled Plans for a Dashboard\n\nReturns all scheduled plans for a dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ { - "name": "folder_id", + "name": "dashboard_id", "in": "path", - "description": "Id of folder", + "description": "Dashboard Id", "required": true, "schema": { "type": "string" } }, + { + "name": "user_id", + "in": "query", + "description": "User Id (default is requesting user if not specified)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users for the dashboard", + "required": false, + "schema": { + "type": "boolean" + } + }, { "name": "fields", "in": "query", @@ -33944,11 +34203,14 @@ ], "responses": { "200": { - "description": "Folder", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Folder" + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlan" + } } } } @@ -33985,28 +34247,37 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}/ancestors": { + "/scheduled_plans/lookml_dashboard/{lookml_dashboard_id}": { "get": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "folder_ancestors", - "summary": "Get Folder Ancestors", - "description": "### Get the ancestors of a folder", + "operationId": "scheduled_plans_for_lookml_dashboard", + "summary": "Scheduled Plans for LookML Dashboard", + "description": "### Get Scheduled Plans for a LookML Dashboard\n\nReturns all scheduled plans for a LookML Dashboard which belong to the caller or given user.\n\nIf no user_id is provided, this function returns the scheduled plans owned by the caller.\n\n\nTo list all schedules for all users, pass `all_users=true`.\n\n\nThe caller must have `see_schedules` permission to see other users' scheduled plans.\n\n\n", "parameters": [ { - "name": "folder_id", + "name": "lookml_dashboard_id", "in": "path", - "description": "Id of folder", + "description": "LookML Dashboard Id", "required": true, "schema": { "type": "string" } }, + { + "name": "user_id", + "in": "query", + "description": "User Id (default is requesting user if not specified)", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -34015,17 +34286,26 @@ "schema": { "type": "string" } + }, + { + "name": "all_users", + "in": "query", + "description": "Return scheduled plans belonging to all users for the dashboard", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "Folders", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Folder" + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -34063,48 +34343,36 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/folders/{folder_id}/looks": { - "get": { + "/scheduled_plans/{scheduled_plan_id}/run_once": { + "post": { "tags": [ - "Folder" + "ScheduledPlan" ], - "operationId": "folder_looks", - "summary": "Get Folder Looks", - "description": "### Get all looks in a folder.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", + "operationId": "scheduled_plan_run_once_by_id", + "summary": "Run Scheduled Plan Once by Id", + "description": "### Run a Scheduled Plan By Id Immediately\nThis function creates a run-once schedule plan based on an existing scheduled plan,\napplies modifications (if any) to the new scheduled plan, and runs the new schedule plan immediately.\nThis can be useful for testing modifications to an existing scheduled plan before committing to a production schedule.\n\nThis function internally performs the following operations:\n\n1. Copies the properties of the existing scheduled plan into a new scheduled plan\n2. Copies any properties passed in the JSON body of this request into the new scheduled plan (replacing the original values)\n3. Creates the new scheduled plan\n4. Runs the new scheduled plan\n\nThe original scheduled plan is not modified by this operation.\nAdmins can create, modify, and run scheduled plans on behalf of other users by specifying a user id.\nNon-admins can only create, modify, and run their own scheduled plans.\n\n#### Email Permissions:\n\nFor details about permissions required to schedule delivery to email and the safeguards\nLooker offers to protect against sending to unauthorized email destinations, see [Email Domain Allow List for Scheduled Looks](https://docs.cloud.google.com/looker/docs/r/api/embed-permissions).\n\n\n#### Scheduled Plan Destination Formats\n\nScheduled plan destinations must specify the data format to produce and send to the destination.\n\nFormats:\n\n| format | Description\n| :-----------: | :--- |\n| json | A JSON object containing a `data` property which contains an array of JSON objects, one per row. No metadata.\n| json_detail | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n| inline_json | Same as the JSON format, except that the `data` property is a string containing JSON-escaped row data. Additional properties describe the data operation. This format is primarily used to send data to web hooks so that the web hook doesn't have to re-encode the JSON row data in order to pass it on to its ultimate destination.\n| csv | Comma separated values with a header\n| txt | Tab separated values with a header\n| html | Simple html\n| xlsx | MS Excel spreadsheet\n| wysiwyg_pdf | Dashboard rendered in a tiled layout to produce a PDF document\n| assembled_pdf | Dashboard rendered in a single column layout to produce a PDF document\n| wysiwyg_png | Dashboard rendered in a tiled layout to produce a PNG image\n||\n\nValid formats vary by destination type and source object. `wysiwyg_pdf` is only valid for dashboards, for example.\n\n\n\nThis API is rate limited to prevent it from being used for relay spam or DoS attacks\n\n", "parameters": [ { - "name": "folder_id", + "name": "scheduled_plan_id", "in": "path", - "description": "Id of folder", + "description": "Id of schedule plan to copy and run", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Looks", + "description": "Scheduled Plan", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LookWithQuery" - } + "$ref": "#/components/schemas/ScheduledPlan" } } } @@ -34129,6 +34397,26 @@ } } }, + "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": { @@ -34141,47 +34429,49 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WriteScheduledPlan" + } + } + }, + "description": "Property values to apply to the newly copied scheduled plan before running it", + "required": false + } } }, - "/folders/{folder_id}/dashboards": { + "/self_service_models/allowed_connections": { "get": { "tags": [ - "Folder" + "SelfService" ], - "operationId": "folder_dashboards", - "summary": "Get Folder Dashboards", - "description": "### Get the dashboards in a folder", + "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": "folder_id", - "in": "path", - "description": "Id of folder", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "fields", + "name": "google_sheets", "in": "query", - "description": "Requested fields.", + "description": "Include connections allowed for Google Sheets.", "required": false, "schema": { - "type": "string" + "type": "boolean" } } ], "responses": { "200": { - "description": "Dashboard", + "description": "List of allowed connection names", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Dashboard" + "type": "string" } } } @@ -34197,6 +34487,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -34218,25 +34518,25 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/sql_interface_queries/metadata": { + "/self_service_models/{model_name}/lookml": { "get": { "tags": [ - "SqlInterfaceQuery" + "SelfService" ], - "operationId": "sql_interface_metadata", - "summary": "Get SQL Interface Query Metadata", - "description": "### Handles Avatica RPC metadata requests for SQL Interface queries", + "operationId": "get_self_service_model_lookml", + "summary": "Get Self Service LookML", + "description": "### Get Generated LookML for a Self Service Model\n", "parameters": [ { - "name": "avatica_request", - "in": "query", - "description": "Avatica RPC request", - "required": false, + "name": "model_name", + "in": "path", + "description": "Name of self service model", + "required": true, "schema": { "type": "string" } @@ -34244,11 +34544,11 @@ ], "responses": { "200": { - "description": null, + "description": "Self service lookml", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SqlInterfaceQueryMetadata" + "type": "string" } } } @@ -34263,16 +34563,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -34299,29 +34589,19 @@ "x-looker-rate-limited": true } }, - "/sql_interface_queries/{query_id}/run/{result_format}": { - "get": { + "/self_service_models/{model_name}/certification": { + "patch": { "tags": [ - "SqlInterfaceQuery" + "SelfService" ], - "operationId": "run_sql_interface_query", - "summary": "Run SQL Interface Query", - "description": "### Run a saved SQL interface query.\n\nThis runs a previously created SQL interface query.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json_bi | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n\n\n", + "operationId": "update_self_service_explore_certification", + "summary": "Update certification for a Self Service Explore", + "description": "### Update certification for a Self Service Explore\n", "parameters": [ { - "name": "query_id", - "in": "path", - "description": "Integer id of query", - "required": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "result_format", + "name": "model_name", "in": "path", - "description": "Format of result, options are: [\"json_bi\"]", + "description": "Name of self service model.", "required": true, "schema": { "type": "string" @@ -34330,16 +34610,11 @@ ], "responses": { "200": { - "description": "Query Result", + "description": "Updated certification for self service model", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/JsonBi" - } - }, "application/json": { "schema": { - "$ref": "#/components/schemas/JsonBi" + "$ref": "#/components/schemas/Certification" } } } @@ -34347,11 +34622,6 @@ "400": { "description": "Bad Request", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -34362,11 +34632,6 @@ "403": { "description": "Permission Denied", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -34377,11 +34642,16 @@ "404": { "description": "Not Found", "content": { - "text": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } - }, + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -34392,11 +34662,6 @@ "422": { "description": "Validation Error", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/ValidationError" @@ -34407,11 +34672,6 @@ "429": { "description": "Too Many Requests", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/Error" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -34421,25 +34681,36 @@ } }, "x-looker-status": "beta", - "x-looker-activity-type": "db_query", - "x-looker-rate-limited": true + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Certification" + } + } + }, + "description": "Certification Information", + "required": true + } } }, - "/sql_interface_queries": { - "post": { + "/session_config": { + "get": { "tags": [ - "SqlInterfaceQuery" + "Auth" ], - "operationId": "create_sql_interface_query", - "summary": "Create SQL Interface Query", - "description": "### Create a SQL interface query.\n\nThis allows you to create a new SQL interface query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", + "operationId": "session_config", + "summary": "Get Session Config", + "description": "### Get session config.\n", "responses": { "200": { - "description": "SQL Interface Query", + "description": "Session Config", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SqlInterfaceQuery" + "$ref": "#/components/schemas/SessionConfig" } } } @@ -34454,8 +34725,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -34464,8 +34735,8 @@ } } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "content": { "application/json": { "schema": { @@ -34473,9 +34744,32 @@ } } } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "patch": { + "tags": [ + "Auth" + ], + "operationId": "update_session_config", + "summary": "Update Session Config", + "description": "### Update session config.\n", + "responses": { + "200": { + "description": "Session Config", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionConfig" + } + } + } }, - "409": { - "description": "Resource Already Exists", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -34484,28 +34778,28 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } }, - "429": { - "description": "Too Many Requests", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } }, - "500": { - "description": "Server Error", + "429": { + "description": "Too Many Requests", "content": { "application/json": { "schema": { @@ -34515,37 +34809,37 @@ } } }, - "x-looker-status": "beta", - "x-looker-activity-type": "db_query", + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SqlInterfaceQueryCreate" + "$ref": "#/components/schemas/SessionConfig" } } }, - "description": "SQL Interface Query Create", + "description": "Session Config", "required": true } } }, - "/sql_queries": { - "post": { + "/session": { + "get": { "tags": [ - "Query" + "Session" ], - "operationId": "create_sql_query", - "summary": "Create SQL Runner Query", - "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", + "operationId": "session", + "summary": "Get Auth", + "description": "### Get API Session\n\nReturns information about the current API session, such as which workspace is selected for the session.\n", "responses": { "200": { - "description": "SQL Runner Query", + "description": "Auth", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SqlQuery" + "$ref": "#/components/schemas/ApiSession" } } } @@ -34570,8 +34864,51 @@ } } }, - "409": { - "description": "Resource Already Exists", + "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 + }, + "patch": { + "tags": [ + "Session" + ], + "operationId": "update_session", + "summary": "Update Auth", + "description": "### Update API Session\n\n#### API Session Workspace\n\nYou can use this endpoint to change the active workspace for the current API session.\n\nOnly one workspace can be active in a session. The active workspace can be changed\nany number of times in a session.\n\nThe default workspace for API sessions is the \"production\" workspace.\n\nAll Looker APIs that use projects or lookml models (such as running queries) will\nuse the version of project and model files defined by this workspace for the lifetime of the\ncurrent API session or until the session workspace is changed again.\n\nAn API session has the same lifetime as the access_token used to authenticate API requests. Each successful\nAPI login generates a new access_token and a new API session.\n\nIf your Looker API client application needs to work in a dev workspace across multiple\nAPI sessions, be sure to select the dev workspace after each login.\n", + "responses": { + "200": { + "description": "Auth", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiSession" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -34602,35 +34939,35 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SqlQueryCreate" + "$ref": "#/components/schemas/ApiSession" } } }, - "description": "SQL Runner Query", + "description": "Auth", "required": true } } }, - "/sql_queries/{slug}": { - "get": { + "/setting": { + "patch": { "tags": [ - "Query" + "Config" ], - "operationId": "sql_query", - "summary": "Get SQL Runner Query", - "description": "Get a SQL Runner query.", + "operationId": "set_setting", + "summary": "Set Setting", + "description": "### Configure Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - auto_certify_lookml_content\n - content_certification_documentation_link\n - custom_welcome_email\n - data_connector_default_enabled\n - dashboard_auto_refresh_restriction\n - dashboard_auto_refresh_minimum_interval\n - extension_framework_enabled\n - extension_load_url_enabled\n - instance_config\n - is_content_certification_enabled\n - managed_certificate_uri\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - revoke_certification_on_edits\n - automated_mfa_enabled\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_vis_modernization_default\n - embed_enabled\n - embed_config\n - mcp_tools\n\nSee the `Setting` type for more information on the specific values that can be configured.\n\nIf a setting update is rejected, the API error payload should provide information on the cause of the rejection.\n", "parameters": [ { - "name": "slug", - "in": "path", - "description": "slug of query", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields", + "required": false, "schema": { "type": "string" } @@ -34638,11 +34975,11 @@ ], "responses": { "200": { - "description": "SQL Runner Query", + "description": "Looker Settings", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SqlQuery" + "$ref": "#/components/schemas/Setting" } } } @@ -34657,6 +34994,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -34667,8 +35014,8 @@ } } }, - "429": { - "description": "Too Many Requests", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -34676,44 +35023,55 @@ } } } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "db_query", - "x-looker-rate-limited": true - } - }, - "/sql_queries/{slug}/run/{result_format}": { - "post": { - "tags": [ - "Query" - ], - "operationId": "run_sql_query", - "summary": "Run SQL Runner Query", - "description": "Execute a SQL Runner query in a given result_format.", - "parameters": [ - { - "name": "slug", - "in": "path", - "description": "slug of query", - "required": true, - "schema": { - "type": "string" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } } }, - { - "name": "result_format", - "in": "path", - "description": "Format of result, options are: [\"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"json_bi\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"sql\", \"odc\", \"json_label\"]", - "required": true, - "schema": { - "type": "string" + "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": { + "$ref": "#/components/schemas/Setting" + } } }, + "description": "Looker Setting Configuration", + "required": true + } + }, + "get": { + "tags": [ + "Config" + ], + "operationId": "get_setting", + "summary": "Get Setting", + "description": "### Get Looker Settings\n\nAvailable settings are:\n - allow_user_timezones\n - auto_certify_lookml_content\n - content_certification_documentation_link\n - custom_welcome_email\n - data_connector_default_enabled\n - dashboard_auto_refresh_restriction\n - dashboard_auto_refresh_minimum_interval\n - extension_framework_enabled\n - extension_load_url_enabled\n - instance_config\n - is_content_certification_enabled\n - managed_certificate_uri\n - marketplace_auto_install_enabled\n - marketplace_automation\n - marketplace_terms_accepted\n - marketplace_enabled\n - marketplace_site\n - onboarding_enabled\n - privatelabel_configuration\n - revoke_certification_on_edits\n - automated_mfa_enabled\n - timezone\n - host_url\n - email_domain_allowlist\n - embed_cookieless_v2\n - embed_vis_modernization_default\n - embed_enabled\n - embed_config\n - mcp_tools\n\n", + "parameters": [ { - "name": "download", + "name": "fields", "in": "query", - "description": "Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content.", + "description": "Requested fields", "required": false, "schema": { "type": "string" @@ -34722,28 +35080,86 @@ ], "responses": { "200": { - "description": "SQL Runner Query", + "description": "Looker Settings", "content": { - "text": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Setting" } - }, + } + } + }, + "400": { + "description": "Bad Request", + "content": { "application/json": { "schema": { - "type": "string" + "$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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/smtp_settings": { + "post": { + "tags": [ + "Config" + ], + "operationId": "set_smtp_settings", + "summary": "Set SMTP Setting", + "description": "### Configure SMTP Settings\n This API allows users to configure the SMTP settings on the Looker instance.\n Only admin users are authorised to call this API.\n", + "responses": { + "204": { + "description": "Successfully updated SMTP settings" }, "400": { "description": "Bad Request", "content": { - "text": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } - }, + } + } + }, + "403": { + "description": "Permission Denied", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -34754,11 +35170,16 @@ "404": { "description": "Not Found", "content": { - "text": { + "application/json": { "schema": { "$ref": "#/components/schemas/Error" } - }, + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -34769,11 +35190,6 @@ "422": { "description": "Validation Error", "content": { - "text": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/ValidationError" @@ -34784,11 +35200,83 @@ "429": { "description": "Too Many Requests", "content": { - "text": { + "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": { + "$ref": "#/components/schemas/SmtpSettings" + } + } + }, + "description": "SMTP Setting Configuration", + "required": true + } + } + }, + "/smtp_status": { + "get": { + "tags": [ + "Config" + ], + "operationId": "smtp_status", + "summary": "Get SMTP Status", + "description": "### Get current SMTP status.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SMTP Status", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SmtpStatus" + } + } + } + }, + "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" @@ -34798,111 +35286,152 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "db_query", + "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/reports/search": { + "/folders/search": { "get": { "tags": [ - "Report" + "Folder" ], - "operationId": "search_reports", - "summary": "Search Reports", - "description": "### Search Reports\n\nReturns an **array of Report objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", + "operationId": "search_folders", + "summary": "Search Folders", + "description": "Search for folders by creator id, parent id, name, etc", "parameters": [ { - "name": "folder_id", + "name": "fields", "in": "query", - "description": "Select reports in a particular folder.", + "description": "Requested fields.", "required": false, "schema": { "type": "string" } }, { - "name": "favorite", + "name": "page", "in": "query", - "description": "Select favorite reports.", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", "required": false, + "deprecated": true, "schema": { - "type": "boolean" + "type": "integer", + "format": "int64" } }, { - "name": "recent", + "name": "per_page", "in": "query", - "description": "Select reports viewed recently.", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", "required": false, + "deprecated": true, "schema": { - "type": "boolean" + "type": "integer", + "format": "int64" } }, { - "name": "id", + "name": "limit", "in": "query", - "description": "Match report id.", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", "required": false, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } }, { - "name": "title", + "name": "offset", "in": "query", - "description": "Match report title.", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", "required": false, "schema": { - "type": "string" + "type": "integer", + "format": "int64" } }, { "name": "sorts", "in": "query", - "description": "One or more fields to sort results by.", + "description": "Fields to sort by.", "required": false, "schema": { "type": "string" } }, { - "name": "limit", + "name": "name", "in": "query", - "description": "Number of results to return.(used with next_page_token)", + "description": "Match Space title.", "required": false, "schema": { - "type": "integer", - "format": "int64" + "type": "string" } }, { - "name": "fields", + "name": "id", "in": "query", - "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response.", + "description": "Match Space id", "required": false, "schema": { "type": "string" } }, { - "name": "next_page_token", + "name": "parent_id", "in": "query", - "description": "Contains a token that can be used to return up to Number of results to return.(used with next_page_token) additional results. A next_page_token will not be returned if there are no additional results to display.", + "description": "Filter on a children of a particular folder.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "creator_id", + "in": "query", + "description": "Filter on folder created by a particular user.", "required": false, "schema": { "type": "string" } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "is_shared_root", + "in": "query", + "description": "Match is shared root", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "is_users_root", + "in": "query", + "description": "Match is users root", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "returns a list of reports.", + "description": "folders", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Report" + "$ref": "#/components/schemas/Folder" } } } @@ -34939,20 +35468,29 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/support_access/allowlist": { + "/folders/{folder_id}": { "get": { "tags": [ - "Auth" + "Folder" ], - "operationId": "get_support_access_allowlist_entries", - "summary": "Get Support Access Allowlist Users", - "description": "### Get Support Access Allowlist Users\n\nReturns the users that have been added to the Support Access Allowlist\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "folder", + "summary": "Get Folder", + "description": "### Get information about the folder with a specific id.", "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -34965,14 +35503,11 @@ ], "responses": { "200": { - "description": "Support Access Allowlist Entries", + "description": "Folder", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportAccessAllowlistEntry" - } + "$ref": "#/components/schemas/Folder" } } } @@ -34987,16 +35522,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -35022,23 +35547,31 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "delete": { "tags": [ - "Auth" + "Folder" + ], + "operationId": "delete_folder", + "summary": "Delete Folder", + "description": "### Delete the folder with a specific id including any children folders.\n**DANGER** this will delete all looks and dashboards in the folder.\n", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "add_support_access_allowlist_entries", - "summary": "Add Support Access Allowlist Users", - "description": "### Add Support Access Allowlist Users\n\nAdds a list of emails to the Allowlist, using the provided reason\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "200": { - "description": "Support Access Allowlist Entries", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportAccessAllowlistEntry" - } + "type": "string" } } } @@ -35053,16 +35586,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -35096,33 +35619,20 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportAccessAddEntries" - } - } - }, - "description": "Request params.", - "required": true - } - } - }, - "/support_access/allowlist/{entry_id}": { - "delete": { + "x-looker-rate-limited": true + }, + "patch": { "tags": [ - "Auth" + "Folder" ], - "operationId": "delete_support_access_allowlist_entry", - "summary": "Delete Support Access Allowlist Entry", - "description": "### Delete Support Access Allowlist User\n\nDeletes the specified Allowlist Entry Id\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "update_folder", + "summary": "Update Folder", + "description": "### Update the folder with a specific id.", "parameters": [ { - "name": "entry_id", + "name": "folder_id", "in": "path", - "description": "Id of Allowlist Entry", + "description": "Id of folder", "required": true, "schema": { "type": "string" @@ -35130,12 +35640,12 @@ } ], "responses": { - "204": { - "description": "Entry successfully deleted.", + "200": { + "description": "Folder", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Folder" } } } @@ -35150,8 +35660,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -35160,12 +35670,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -35183,24 +35693,49 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateFolder" + } + } + }, + "description": "Folder parameters", + "required": true + } } }, - "/support_access/enable": { - "put": { + "/folders": { + "get": { "tags": [ - "Auth" + "Folder" + ], + "operationId": "all_folders", + "summary": "Get All Folders", + "description": "### Get information about all folders.\n\nAll personal folders will be returned.\n\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "enable_support_access", - "summary": "Enable Support Access", - "description": "### Enable Support Access\n\nEnables Support Access for the provided duration\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Support Access Status", + "description": "Folder", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SupportAccessStatus" + "type": "array", + "items": { + "$ref": "#/components/schemas/FolderBase" + } } } } @@ -35215,8 +35750,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -35225,8 +35760,8 @@ } } }, - "404": { - "description": "Not Found", + "429": { + "description": "Too Many Requests", "content": { "application/json": { "schema": { @@ -35234,7 +35769,50 @@ } } } - }, + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "post": { + "tags": [ + "Folder" + ], + "operationId": "create_folder", + "summary": "Create Folder", + "description": "### Create a folder with specified information.\n\nCaller must have permission to edit the parent folder and to create folders, otherwise the request\nreturns 404 Not Found.\n", + "responses": { + "200": { + "description": "Folder", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Folder" + } + } + } + }, + "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": { @@ -35273,30 +35851,104 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SupportAccessEnable" + "$ref": "#/components/schemas/CreateFolder" } } }, - "description": "Enable Support Access request params.", + "description": "Folder parameters", "required": true } } }, - "/support_access/disable": { - "put": { + "/folders/{folder_id}/children": { + "get": { "tags": [ - "Auth" + "Folder" + ], + "operationId": "folder_children", + "summary": "Get Folder Children", + "description": "### Get the children of a folder.", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "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" + } + } ], - "operationId": "disable_support_access", - "summary": "Disable Support Access", - "description": "### Disable Support Access\n\nDisables Support Access immediately\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Support Access Status", + "description": "Folders", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SupportAccessStatus" + "type": "array", + "items": { + "$ref": "#/components/schemas/Folder" + } } } } @@ -35311,16 +35963,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -35347,21 +35989,62 @@ "x-looker-rate-limited": true } }, - "/support_access/status": { + "/folders/{folder_id}/children/search": { "get": { "tags": [ - "Auth" + "Folder" + ], + "operationId": "folder_children_search", + "summary": "Search Folder Children", + "description": "### Search the children of a folder", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Match folder name.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "support_access_status", - "summary": "Support Access Status", - "description": "### Support Access Status\n\nReturns the current Support Access Status\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "Support Access Status", + "description": "Folders", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SupportAccessStatus" + "type": "array", + "items": { + "$ref": "#/components/schemas/Folder" + } } } } @@ -35376,16 +36059,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -35412,15 +36085,24 @@ "x-looker-rate-limited": true } }, - "/themes": { + "/folders/{folder_id}/parent": { "get": { "tags": [ - "Theme" + "Folder" ], - "operationId": "all_themes", - "summary": "Get All Themes", - "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "folder_parent", + "summary": "Get Folder Parent", + "description": "### Get the parent of a folder", "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -35433,14 +36115,11 @@ ], "responses": { "200": { - "description": "Themes", + "description": "Folder", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Theme" - } + "$ref": "#/components/schemas/Folder" } } } @@ -35479,21 +36158,46 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/folders/{folder_id}/ancestors": { + "get": { "tags": [ - "Theme" + "Folder" + ], + "operationId": "folder_ancestors", + "summary": "Get Folder Ancestors", + "description": "### Get the ancestors of a folder", + "parameters": [ + { + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "create_theme", - "summary": "Create Theme", - "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://docs.cloud.google.com/looker/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "responses": { "200": { - "description": "Theme", + "description": "Folders", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Theme" + "type": "array", + "items": { + "$ref": "#/components/schemas/Folder" + } } } } @@ -35518,26 +36222,6 @@ } } }, - "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": { @@ -35551,92 +36235,23 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Theme" - } - } - }, - "description": "Theme", - "required": true - } + "x-looker-rate-limited": true } }, - "/themes/search": { + "/folders/{folder_id}/looks": { "get": { "tags": [ - "Theme" + "Folder" ], - "operationId": "search_themes", - "summary": "Search Themes", - "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "folder_looks", + "summary": "Get Folder Looks", + "description": "### Get all looks in a folder.\nIn API 4.0+, all looks in a folder will be returned, excluding looks in the trash.\n", "parameters": [ { - "name": "id", - "in": "query", - "description": "Match theme id.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "name", - "in": "query", - "description": "Match theme name.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "begin_at", - "in": "query", - "description": "Timestamp for activation.", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "end_at", - "in": "query", - "description": "Timestamp for expiration.", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return (used with `offset`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any (used with `limit`).", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, "schema": { "type": "string" } @@ -35649,35 +36264,17 @@ "schema": { "type": "string" } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "theme_type", - "in": "query", - "description": "Match theme type ('internal', 'embed', or 'all').", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Themes", + "description": "Looks", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Theme" + "$ref": "#/components/schemas/LookWithQuery" } } } @@ -35693,16 +36290,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -35713,16 +36300,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -35739,33 +36316,44 @@ "x-looker-rate-limited": true } }, - "/themes/default": { + "/folders/{folder_id}/dashboards": { "get": { "tags": [ - "Theme" + "Folder" ], - "operationId": "default_theme", - "summary": "Get Default Theme", - "description": "### Get the default theme\n\nThis endpoint is deprecated. [Get Default Theme (with type)](#!/Theme/default_theme_by_type) should be used instead.\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", + "operationId": "folder_dashboards", + "summary": "Get Folder Dashboards", + "description": "### Get the dashboards in a folder", "parameters": [ { - "name": "ts", + "name": "folder_id", + "in": "path", + "description": "Id of folder", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", "in": "query", - "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "description": "Requested fields.", "required": false, "schema": { - "type": "string", - "format": "date-time" + "type": "string" } } ], "responses": { "200": { - "description": "Theme", + "description": "Dashboard", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Theme" + "type": "array", + "items": { + "$ref": "#/components/schemas/Dashboard" + } } } } @@ -35801,24 +36389,25 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/sql_interface_queries/metadata": { + "get": { "tags": [ - "Theme" + "SqlInterfaceQuery" ], - "operationId": "set_default_theme", - "summary": "Set Default Theme", - "description": "### Set the global default theme by theme name\n\nThis endpoint is deprecated. [Set Default Theme (with type)](#!/Theme/set_default_theme_by_type) should be used instead.\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "sql_interface_metadata", + "summary": "Get SQL Interface Query Metadata", + "description": "### Handles Avatica RPC metadata requests for SQL Interface queries", "parameters": [ { - "name": "name", + "name": "avatica_request", "in": "query", - "description": "Name of theme to set as default", - "required": true, + "description": "Avatica RPC request", + "required": false, "schema": { "type": "string" } @@ -35826,11 +36415,11 @@ ], "responses": { "200": { - "description": "Theme", + "description": null, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Theme" + "$ref": "#/components/schemas/SqlInterfaceQueryMetadata" } } } @@ -35845,8 +36434,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -35855,12 +36444,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -35876,35 +36465,34 @@ } } }, - "deprecated": true, - "x-looker-status": "deprecated", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/themes/default_theme": { + "/sql_interface_queries/{query_id}/run/{result_format}": { "get": { "tags": [ - "Theme" + "SqlInterfaceQuery" ], - "operationId": "default_theme_by_type", - "summary": "Get Default Theme (with type)", - "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n\nThe optional `theme_type` parameter can specify the theme type to select for.\n", - "parameters": [ + "operationId": "run_sql_interface_query", + "summary": "Run SQL Interface Query", + "description": "### Run a saved SQL interface query.\n\nThis runs a previously created SQL interface query.\n\nThe 'result_format' parameter specifies the desired structure and format of the response.\n\nSupported formats:\n\n| result_format | Description\n| :-----------: | :--- |\n| json_bi | Row data plus metadata describing the fields, pivots, table calcs, and other aspects of the query\n\n\n", + "parameters": [ { - "name": "ts", - "in": "query", - "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", - "required": false, + "name": "query_id", + "in": "path", + "description": "Integer id of query", + "required": true, "schema": { - "type": "string", - "format": "date-time" + "type": "integer", + "format": "int64" } }, { - "name": "theme_type", - "in": "query", - "description": "Theme type.", + "name": "result_format", + "in": "path", + "description": "Format of result, options are: [\"json_bi\"]", "required": true, "schema": { "type": "string" @@ -35913,11 +36501,16 @@ ], "responses": { "200": { - "description": "Theme", + "description": "Query Result", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/JsonBi" + } + }, "application/json": { "schema": { - "$ref": "#/components/schemas/Theme" + "$ref": "#/components/schemas/JsonBi" } } } @@ -35925,6 +36518,26 @@ "400": { "description": "Bad Request", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -35935,6 +36548,11 @@ "404": { "description": "Not Found", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -35945,6 +36563,11 @@ "422": { "description": "Validation Error", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/ValidationError" @@ -35955,6 +36578,11 @@ "429": { "description": "Too Many Requests", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -35964,43 +36592,25 @@ } }, "x-looker-status": "beta", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/sql_interface_queries": { + "post": { "tags": [ - "Theme" - ], - "operationId": "set_default_theme_by_type", - "summary": "Set Default Theme (with type)", - "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\nThe optional `theme_type` parameter can specify the theme type to select for.\n", - "parameters": [ - { - "name": "name", - "in": "query", - "description": "Name of theme to set as default", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "theme_type", - "in": "query", - "description": "Theme type.", - "required": true, - "schema": { - "type": "string" - } - } + "SqlInterfaceQuery" ], + "operationId": "create_sql_interface_query", + "summary": "Create SQL Interface Query", + "description": "### Create a SQL interface query.\n\nThis allows you to create a new SQL interface query that you can later run. Looker queries are immutable once created\nand are not deleted. If you create a query that is exactly like an existing query then the existing query\nwill be returned and no new query will be created. Whether a new query is created or not, you can use\nthe 'id' in the returned query with the 'run' method.\n\nThe query parameters are passed as json in the body of the request.\n\n", "responses": { "200": { - "description": "Theme", + "description": "SQL Interface Query", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Theme" + "$ref": "#/components/schemas/SqlInterfaceQuery" } } } @@ -36035,6 +36645,16 @@ } } }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -36054,70 +36674,49 @@ } } } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } } }, "x-looker-status": "beta", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqlInterfaceQueryCreate" + } + } + }, + "description": "SQL Interface Query Create", + "required": true + } } }, - "/themes/active": { - "get": { + "/sql_queries": { + "post": { "tags": [ - "Theme" - ], - "operationId": "active_themes", - "summary": "Get Active Themes", - "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", - "parameters": [ - { - "name": "name", - "in": "query", - "description": "Name of theme", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "ts", - "in": "query", - "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "name": "theme_type", - "in": "query", - "description": "Theme type.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } + "Query" ], + "operationId": "create_sql_query", + "summary": "Create SQL Runner Query", + "description": "### Create a SQL Runner Query\n\nEither the `connection_name` or `model_name` parameter MUST be provided.\n", "responses": { "200": { - "description": "Themes", + "description": "SQL Runner Query", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Theme" - } + "$ref": "#/components/schemas/SqlQuery" } } } @@ -36132,8 +36731,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -36142,8 +36741,8 @@ } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -36174,46 +36773,47 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqlQueryCreate" + } + } + }, + "description": "SQL Runner Query", + "required": true + } } }, - "/themes/theme_or_default": { + "/sql_queries/{slug}": { "get": { "tags": [ - "Theme" + "Query" ], - "operationId": "theme_or_default", - "summary": "Get Theme or Default", - "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "sql_query", + "summary": "Get SQL Runner Query", + "description": "Get a SQL Runner query.", "parameters": [ { - "name": "name", - "in": "query", - "description": "Name of theme", + "name": "slug", + "in": "path", + "description": "slug of query", "required": true, "schema": { "type": "string" } - }, - { - "name": "ts", - "in": "query", - "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", - "required": false, - "schema": { - "type": "string", - "format": "date-time" - } } ], "responses": { "200": { - "description": "Theme", + "description": "SQL Runner Query", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Theme" + "$ref": "#/components/schemas/SqlQuery" } } } @@ -36250,32 +36850,56 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/themes/validate": { + "/sql_queries/{slug}/run/{result_format}": { "post": { "tags": [ - "Theme" + "Query" + ], + "operationId": "run_sql_query", + "summary": "Run SQL Runner Query", + "description": "Execute a SQL Runner query in a given result_format.", + "parameters": [ + { + "name": "slug", + "in": "path", + "description": "slug of query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "result_format", + "in": "path", + "description": "Format of result, options are: [\"inline_json\", \"json\", \"json_detail\", \"json_fe\", \"json_bi\", \"csv\", \"html\", \"md\", \"txt\", \"xlsx\", \"gsxml\", \"sql\", \"odc\", \"json_label\"]", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "download", + "in": "query", + "description": "Defaults to false. If set to true, the HTTP response will have content-disposition and other headers set to make the HTTP response behave as a downloadable attachment instead of as inline content.", + "required": false, + "schema": { + "type": "string" + } + } ], - "operationId": "validate_theme", - "summary": "Validate Theme", - "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "responses": { "200": { - "description": "Theme validation results", + "description": "SQL Runner Query", "content": { - "application/json": { + "text": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "type": "string" } - } - } - }, - "204": { - "description": "No errors detected with the theme", - "content": { + }, "application/json": { "schema": { "type": "string" @@ -36286,6 +36910,11 @@ "400": { "description": "Bad Request", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -36296,16 +36925,11 @@ "404": { "description": "Not Found", "content": { - "application/json": { + "text": { "schema": { "$ref": "#/components/schemas/Error" } - } - } - }, - "409": { - "description": "Resource Already Exists", - "content": { + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -36316,6 +36940,11 @@ "422": { "description": "Validation Error", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/ValidationError" @@ -36326,6 +36955,11 @@ "429": { "description": "Too Many Requests", "content": { + "text": { + "schema": { + "$ref": "#/components/schemas/Error" + } + }, "application/json": { "schema": { "$ref": "#/components/schemas/Error" @@ -36335,43 +36969,96 @@ } }, "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Theme" - } - } - }, - "description": "Theme", - "required": true - } + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true } }, - "/themes/{theme_id}": { + "/reports/search": { "get": { "tags": [ - "Theme" + "Report" ], - "operationId": "theme", - "summary": "Get Theme", - "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "search_reports", + "summary": "Search Reports", + "description": "### Search Reports\n\nReturns an **array of Report objects** that match the specified search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n", "parameters": [ { - "name": "theme_id", - "in": "path", - "description": "Id of theme", - "required": true, + "name": "folder_id", + "in": "query", + "description": "Select reports in a particular folder.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "favorite", + "in": "query", + "description": "Select favorite reports.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "recent", + "in": "query", + "description": "Select reports viewed recently.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "id", + "in": "query", + "description": "Match report id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "title", + "in": "query", + "description": "Match report title.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sorts", + "in": "query", + "description": "One or more fields to sort results by.", + "required": false, "schema": { "type": "string" } }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return.(used with next_page_token)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Comma delimited list of field names. If provided, only the fields specified will be included in the response.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "next_page_token", + "in": "query", + "description": "Contains a token that can be used to return up to Number of results to return.(used with next_page_token) additional results. A next_page_token will not be returned if there are no additional results to display.", "required": false, "schema": { "type": "string" @@ -36380,11 +37067,14 @@ ], "responses": { "200": { - "description": "Theme", + "description": "returns a list of reports.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Theme" + "type": "array", + "items": { + "$ref": "#/components/schemas/Report" + } } } } @@ -36420,23 +37110,25 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "alpha", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/support_access/allowlist": { + "get": { "tags": [ - "Theme" + "Auth" ], - "operationId": "update_theme", - "summary": "Update Theme", - "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "operationId": "get_support_access_allowlist_entries", + "summary": "Get Support Access Allowlist Users", + "description": "### Get Support Access Allowlist Users\n\nReturns the users that have been added to the Support Access Allowlist\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "theme_id", - "in": "path", - "description": "Id of theme", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } @@ -36444,11 +37136,14 @@ ], "responses": { "200": { - "description": "Theme", + "description": "Support Access Allowlist Entries", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Theme" + "type": "array", + "items": { + "$ref": "#/components/schemas/SupportAccessAllowlistEntry" + } } } } @@ -36463,8 +37158,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -36473,12 +37168,12 @@ } } }, - "422": { - "description": "Validation Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" } } } @@ -36496,44 +37191,25 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Theme" - } - } - }, - "description": "Theme", - "required": true - } + "x-looker-rate-limited": true }, - "delete": { + "post": { "tags": [ - "Theme" - ], - "operationId": "delete_theme", - "summary": "Delete Theme", - "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", - "parameters": [ - { - "name": "theme_id", - "in": "path", - "description": "Id of theme", - "required": true, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "add_support_access_allowlist_entries", + "summary": "Add Support Access Allowlist Users", + "description": "### Add Support Access Allowlist Users\n\nAdds a list of emails to the Allowlist, using the provided reason\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Support Access Allowlist Entries", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/SupportAccessAllowlistEntry" + } } } } @@ -36548,18 +37224,8 @@ } } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "429": { - "description": "Too Many Requests", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -36567,37 +37233,9 @@ } } } - } - }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/timezones": { - "get": { - "tags": [ - "Config" - ], - "operationId": "all_timezones", - "summary": "Get All Timezones", - "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", - "responses": { - "200": { - "description": "Timezone", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Timezone" - } - } - } - } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -36606,12 +37244,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -36629,38 +37267,46 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SupportAccessAddEntries" + } + } + }, + "description": "Request params.", + "required": true + } } }, - "/ssh_servers": { - "get": { + "/support_access/allowlist/{entry_id}": { + "delete": { "tags": [ - "Connection" + "Auth" ], - "operationId": "all_ssh_servers", - "summary": "Get All SSH Servers", - "description": "### Get information about all SSH Servers.\n", + "operationId": "delete_support_access_allowlist_entry", + "summary": "Delete Support Access Allowlist Entry", + "description": "### Delete Support Access Allowlist User\n\nDeletes the specified Allowlist Entry Id\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "entry_id", + "in": "path", + "description": "Id of Allowlist Entry", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "SSH Server", + "204": { + "description": "Entry successfully deleted.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SshServer" - } + "type": "string" } } } @@ -36675,6 +37321,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -36699,21 +37355,23 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/support_access/enable": { + "put": { "tags": [ - "Connection" + "Auth" ], - "operationId": "create_ssh_server", - "summary": "Create SSH Server", - "description": "### Create an SSH Server.\n", + "operationId": "enable_support_access", + "summary": "Enable Support Access", + "description": "### Enable Support Access\n\nEnables Support Access for the provided duration\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "SSH Server", + "description": "Support Access Status", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshServer" + "$ref": "#/components/schemas/SupportAccessStatus" } } } @@ -36728,6 +37386,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -36776,41 +37444,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshServer" + "$ref": "#/components/schemas/SupportAccessEnable" } } }, - "description": "SSH Server", + "description": "Enable Support Access request params.", "required": true } } }, - "/ssh_server/{ssh_server_id}": { - "get": { + "/support_access/disable": { + "put": { "tags": [ - "Connection" - ], - "operationId": "ssh_server", - "summary": "Get SSH Server", - "description": "### Get information about an SSH Server.\n", - "parameters": [ - { - "name": "ssh_server_id", - "in": "path", - "description": "Id of SSH Server", - "required": true, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "disable_support_access", + "summary": "Disable Support Access", + "description": "### Disable Support Access\n\nDisables Support Access immediately\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { "200": { - "description": "SSH Server", + "description": "Support Access Status", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshServer" + "$ref": "#/components/schemas/SupportAccessStatus" } } } @@ -36825,62 +37482,8 @@ } } }, - "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 - }, - "patch": { - "tags": [ - "Connection" - ], - "operationId": "update_ssh_server", - "summary": "Update SSH Server", - "description": "### Update an SSH Server.\n", - "parameters": [ - { - "name": "ssh_server_id", - "in": "path", - "description": "Id of SSH Server", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "SSH Server", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshServer" - } - } - } - }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -36899,16 +37502,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -36922,44 +37515,24 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshServer" - } - } - }, - "description": "SSH Server", - "required": true - } - }, - "delete": { + "x-looker-rate-limited": true + } + }, + "/support_access/status": { + "get": { "tags": [ - "Connection" - ], - "operationId": "delete_ssh_server", - "summary": "Delete SSH Server", - "description": "### Delete an SSH Server.\n", - "parameters": [ - { - "name": "ssh_server_id", - "in": "path", - "description": "Id of SSH Server", - "required": true, - "schema": { - "type": "string" - } - } + "Auth" ], + "operationId": "support_access_status", + "summary": "Support Access Status", + "description": "### Support Access Status\n\nReturns the current Support Access Status\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Support Access Status", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/SupportAccessStatus" } } } @@ -36974,64 +37547,8 @@ } } }, - "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 - } - }, - "/ssh_server/{ssh_server_id}/test": { - "get": { - "tags": [ - "Connection" - ], - "operationId": "test_ssh_server", - "summary": "Test SSH Server", - "description": "### Test the SSH Server\n", - "parameters": [ - { - "name": "ssh_server_id", - "in": "path", - "description": "Id of SSH Server", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Test SSH Server", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshServer" - } - } - } - }, - "400": { - "description": "Bad Request", + "403": { + "description": "Permission Denied", "content": { "application/json": { "schema": { @@ -37066,14 +37583,14 @@ "x-looker-rate-limited": true } }, - "/ssh_tunnels": { + "/themes": { "get": { "tags": [ - "Connection" + "Theme" ], - "operationId": "all_ssh_tunnels", - "summary": "Get All SSH Tunnels", - "description": "### Get information about all SSH Tunnels.\n", + "operationId": "all_themes", + "summary": "Get All Themes", + "description": "### Get an array of all existing themes\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\nThis method returns an array of all existing themes. The active time for the theme is not considered.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { "name": "fields", @@ -37087,13 +37604,13 @@ ], "responses": { "200": { - "description": "SSH Tunnel", + "description": "Themes", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/SshTunnel" + "$ref": "#/components/schemas/Theme" } } } @@ -37136,18 +37653,18 @@ }, "post": { "tags": [ - "Connection" + "Theme" ], - "operationId": "create_ssh_tunnel", - "summary": "Create SSH Tunnel", - "description": "### Create an SSH Tunnel\n", + "operationId": "create_theme", + "summary": "Create Theme", + "description": "### Create a theme\n\nCreates a new theme object, returning the theme details, including the created id.\n\nIf `settings` are not specified, the default theme settings will be copied into the new theme.\n\nThe theme `name` can only contain alphanumeric characters or underscores. Theme names should not contain any confidential information, such as customer names.\n\n**Update** an existing theme with [Update Theme](#!/Theme/update_theme)\n\n**Permanently delete** an existing theme with [Delete Theme](#!/Theme/delete_theme)\n\nFor more information, see [Creating and Applying Themes](https://docs.cloud.google.com/looker/docs/r/admin/themes).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "responses": { "200": { - "description": "SSH Tunnel", + "description": "Theme", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshTunnel" + "$ref": "#/components/schemas/Theme" } } } @@ -37210,29 +37727,114 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshTunnel" + "$ref": "#/components/schemas/Theme" } } }, - "description": "SSH Tunnel", + "description": "Theme", "required": true } } }, - "/ssh_tunnel/{ssh_tunnel_id}": { + "/themes/search": { "get": { "tags": [ - "Connection" + "Theme" ], - "operationId": "ssh_tunnel", - "summary": "Get SSH Tunnel", - "description": "### Get information about an SSH Tunnel.\n", + "operationId": "search_themes", + "summary": "Search Themes", + "description": "### Search all themes for matching criteria.\n\nReturns an **array of theme objects** that match the specified search criteria.\n\n| Search Parameters | Description\n| :-------------------: | :------ |\n| `begin_at` only | Find themes active at or after `begin_at`\n| `end_at` only | Find themes active at or before `end_at`\n| both set | Find themes with an active inclusive period between `begin_at` and `end_at`\n\nNote: Range matching requires boolean AND logic.\nWhen using `begin_at` and `end_at` together, do not use `filter_or`=TRUE\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\nGet a **single theme** by id with [Theme](#!/Theme/theme)\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "ssh_tunnel_id", - "in": "path", - "description": "Id of SSH Tunnel", - "required": true, + "name": "id", + "in": "query", + "description": "Match theme id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "name", + "in": "query", + "description": "Match theme name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "begin_at", + "in": "query", + "description": "Timestamp for activation.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "end_at", + "in": "query", + "description": "Timestamp for expiration.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return (used with `offset`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any (used with `limit`).", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "theme_type", + "in": "query", + "description": "Match theme type ('internal', 'embed', or 'all').", + "required": false, "schema": { "type": "string" } @@ -37240,11 +37842,14 @@ ], "responses": { "200": { - "description": "SSH Tunnel", + "description": "Themes", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshTunnel" + "type": "array", + "items": { + "$ref": "#/components/schemas/Theme" + } } } } @@ -37259,6 +37864,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -37269,6 +37884,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -37283,32 +37908,35 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/themes/default": { + "get": { "tags": [ - "Connection" + "Theme" ], - "operationId": "update_ssh_tunnel", - "summary": "Update SSH Tunnel", - "description": "### Update an SSH Tunnel\n", + "operationId": "default_theme", + "summary": "Get Default Theme", + "description": "### Get the default theme\n\nThis endpoint is deprecated. [Get Default Theme (with type)](#!/Theme/default_theme_by_type) should be used instead.\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n", "parameters": [ { - "name": "ssh_tunnel_id", - "in": "path", - "description": "Id of SSH Tunnel", - "required": true, + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, "schema": { - "type": "string" + "type": "string", + "format": "date-time" } } ], "responses": { "200": { - "description": "SSH Tunnel", + "description": "Theme", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshTunnel" + "$ref": "#/components/schemas/Theme" } } } @@ -37333,16 +37961,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -37354,33 +37972,23 @@ } } }, - "x-looker-status": "stable", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshTunnel" - } - } - }, - "description": "SSH Tunnel", - "required": true - } + "x-looker-rate-limited": true }, - "delete": { + "put": { "tags": [ - "Connection" + "Theme" ], - "operationId": "delete_ssh_tunnel", - "summary": "Delete SSH Tunnel", - "description": "### Delete an SSH Tunnel\n", + "operationId": "set_default_theme", + "summary": "Set Default Theme", + "description": "### Set the global default theme by theme name\n\nThis endpoint is deprecated. [Set Default Theme (with type)](#!/Theme/set_default_theme_by_type) should be used instead.\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "ssh_tunnel_id", - "in": "path", - "description": "Id of SSH Tunnel", + "name": "name", + "in": "query", + "description": "Name of theme to set as default", "required": true, "schema": { "type": "string" @@ -37388,12 +37996,12 @@ } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Theme", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/Theme" } } } @@ -37418,6 +38026,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -37429,24 +38047,35 @@ } } }, - "x-looker-status": "stable", + "deprecated": true, + "x-looker-status": "deprecated", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/ssh_tunnel/{ssh_tunnel_id}/test": { + "/themes/default_theme": { "get": { "tags": [ - "Connection" + "Theme" ], - "operationId": "test_ssh_tunnel", - "summary": "Test SSH Tunnel", - "description": "### Test the SSH Tunnel\n", + "operationId": "default_theme_by_type", + "summary": "Get Default Theme (with type)", + "description": "### Get the default theme\n\nReturns the active theme object set as the default.\n\nThe **default** theme name can be set in the UI on the Admin|Theme UI page\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\" If specified, it returns the default theme at the time indicated.\n\nThe optional `theme_type` parameter can specify the theme type to select for.\n", "parameters": [ { - "name": "ssh_tunnel_id", - "in": "path", - "description": "Id of SSH Tunnel", + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "theme_type", + "in": "query", + "description": "Theme type.", "required": true, "schema": { "type": "string" @@ -37455,11 +38084,11 @@ ], "responses": { "200": { - "description": "Test SSH Tunnel", + "description": "Theme", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshTunnel" + "$ref": "#/components/schemas/Theme" } } } @@ -37484,6 +38113,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -37495,26 +38134,44 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/ssh_public_key": { - "get": { + }, + "put": { "tags": [ - "Connection" + "Theme" + ], + "operationId": "set_default_theme_by_type", + "summary": "Set Default Theme (with type)", + "description": "### Set the global default theme by theme name\n\nOnly Admin users can call this function.\n\nOnly an active theme with no expiration (`end_at` not set) can be assigned as the default theme. As long as a theme has an active record with no expiration, it can be set as the default.\n\n[Create Theme](#!/Theme/create) has detailed information on rules for default and active themes\n\nReturns the new specified default theme object.\n\nThe optional `theme_type` parameter can specify the theme type to select for.\n", + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Name of theme to set as default", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "theme_type", + "in": "query", + "description": "Theme type.", + "required": true, + "schema": { + "type": "string" + } + } ], - "operationId": "ssh_public_key", - "summary": "Get SSH Public Key", - "description": "### Get the SSH public key\n\nGet the public key created for this instance to identify itself to a remote SSH server.\n", "responses": { "200": { - "description": "SSH Public Key", + "description": "Theme", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SshPublicKey" + "$ref": "#/components/schemas/Theme" } } } @@ -37529,6 +38186,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -37539,6 +38206,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -37550,33 +38227,52 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "beta", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true } }, - "/user_attributes": { + "/themes/active": { "get": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "all_user_attributes", - "summary": "Get All User Attributes", - "description": "### Get information about all user attributes.\n", + "operationId": "active_themes", + "summary": "Get Active Themes", + "description": "### Get active themes\n\nReturns an array of active themes.\n\nIf the `name` parameter is specified, it will return an array with one theme if it's active and found.\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "fields", + "name": "name", "in": "query", - "description": "Requested fields.", + "description": "Name of theme", "required": false, "schema": { "type": "string" } }, { - "name": "sorts", + "name": "ts", "in": "query", - "description": "Fields to order the results by. Sortable fields include: name, label", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "theme_type", + "in": "query", + "description": "Theme type.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", "required": false, "schema": { "type": "string" @@ -37585,13 +38281,13 @@ ], "responses": { "200": { - "description": "User Attribute", + "description": "Themes", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserAttribute" + "$ref": "#/components/schemas/Theme" } } } @@ -37607,6 +38303,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -37617,6 +38323,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -37631,32 +38347,109 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/themes/theme_or_default": { + "get": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "create_user_attribute", - "summary": "Create User Attribute", - "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", + "operationId": "theme_or_default", + "summary": "Get Theme or Default", + "description": "### Get the named theme if it's active. Otherwise, return the default theme\n\nThe optional `ts` parameter can specify a different timestamp than \"now.\"\nNote: API users with `show` ability can call this function\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "fields", + "name": "name", "in": "query", - "description": "Requested fields.", - "required": false, + "description": "Name of theme", + "required": true, "schema": { "type": "string" } + }, + { + "name": "ts", + "in": "query", + "description": "Timestamp representing the target datetime for the active period. Defaults to 'now'", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } } ], "responses": { "200": { - "description": "User Attribute", + "description": "Theme", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttribute" + "$ref": "#/components/schemas/Theme" + } + } + } + }, + "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 + } + }, + "/themes/validate": { + "post": { + "tags": [ + "Theme" + ], + "operationId": "validate_theme", + "summary": "Validate Theme", + "description": "### Validate a theme with the specified information\n\nValidates all values set for the theme, returning any errors encountered, or 200 OK if valid\n\nSee [Create Theme](#!/Theme/create_theme) for constraints\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", + "responses": { + "200": { + "description": "Theme validation results", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "204": { + "description": "No errors detected with the theme", + "content": { + "application/json": { + "schema": { + "type": "string" } } } @@ -37719,28 +38512,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttribute" + "$ref": "#/components/schemas/Theme" } } }, - "description": "User Attribute", + "description": "Theme", "required": true } } }, - "/user_attributes/{user_attribute_id}": { + "/themes/{theme_id}": { "get": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "user_attribute", - "summary": "Get User Attribute", - "description": "### Get information about a user attribute.\n", + "operationId": "theme", + "summary": "Get Theme", + "description": "### Get a theme by ID\n\nUse this to retrieve a specific theme, whether or not it's currently active.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "user_attribute_id", + "name": "theme_id", "in": "path", - "description": "Id of user attribute", + "description": "Id of theme", "required": true, "schema": { "type": "string" @@ -37758,11 +38551,11 @@ ], "responses": { "200": { - "description": "User Attribute", + "description": "Theme", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttribute" + "$ref": "#/components/schemas/Theme" } } } @@ -37804,38 +38597,29 @@ }, "patch": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "update_user_attribute", - "summary": "Update User Attribute", - "description": "### Update a user attribute definition.\n", + "operationId": "update_theme", + "summary": "Update Theme", + "description": "### Update the theme by id.\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "user_attribute_id", + "name": "theme_id", "in": "path", - "description": "Id of user attribute", + "description": "Id of theme", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "User Attribute", + "description": "Theme", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttribute" + "$ref": "#/components/schemas/Theme" } } } @@ -37888,26 +38672,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttribute" + "$ref": "#/components/schemas/Theme" } } }, - "description": "User Attribute", + "description": "Theme", "required": true } }, "delete": { "tags": [ - "UserAttribute" + "Theme" ], - "operationId": "delete_user_attribute", - "summary": "Delete User Attribute", - "description": "### Delete a user attribute (admin only).\n", + "operationId": "delete_theme", + "summary": "Delete Theme", + "description": "### Delete a specific theme by id\n\nThis operation permanently deletes the identified theme from the database.\n\nBecause multiple themes can have the same name (with different activation time spans) themes can only be deleted by ID.\n\nAll IDs associated with a theme name can be retrieved by searching for the theme name with [Theme Search](#!/Theme/search).\n\n**Note**: Custom themes needs to be enabled by Looker. Unless custom themes are enabled, only the automatically generated default theme can be used. Please contact your Account Manager or https://console.cloud.google.com/support/cases/ to update your license for this feature.\n\n", "parameters": [ { - "name": "user_attribute_id", + "name": "theme_id", "in": "path", - "description": "Id of user attribute", + "description": "Id of theme", "required": true, "schema": { "type": "string" @@ -37961,24 +38745,73 @@ "x-looker-rate-limited": true } }, - "/user_attributes/{user_attribute_id}/group_values": { + "/timezones": { "get": { "tags": [ - "UserAttribute" + "Config" ], - "operationId": "all_user_attribute_group_values", - "summary": "Get User Attribute Group Values", - "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", - "parameters": [ - { - "name": "user_attribute_id", - "in": "path", - "description": "Id of user attribute", - "required": true, - "schema": { - "type": "string" + "operationId": "all_timezones", + "summary": "Get All Timezones", + "description": "### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks).\n", + "responses": { + "200": { + "description": "Timezone", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + } + } + }, + "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 + } + }, + "/ssh_servers": { + "get": { + "tags": [ + "Connection" + ], + "operationId": "all_ssh_servers", + "summary": "Get All SSH Servers", + "description": "### Get information about all SSH Servers.\n", + "parameters": [ { "name": "fields", "in": "query", @@ -37991,13 +38824,13 @@ ], "responses": { "200": { - "description": "All group values for attribute.", + "description": "SSH Server", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserAttributeGroupValue" + "$ref": "#/components/schemas/SshServer" } } } @@ -38040,32 +38873,18 @@ }, "post": { "tags": [ - "UserAttribute" - ], - "operationId": "set_user_attribute_group_values", - "summary": "Set User Attribute Group Values", - "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", - "parameters": [ - { - "name": "user_attribute_id", - "in": "path", - "description": "Id of user attribute", - "required": true, - "schema": { - "type": "string" - } - } + "Connection" ], + "operationId": "create_ssh_server", + "summary": "Create SSH Server", + "description": "### Create an SSH Server.\n", "responses": { "200": { - "description": "Array of group values.", + "description": "SSH Server", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserAttributeGroupValue" - } + "$ref": "#/components/schemas/SshServer" } } } @@ -38128,32 +38947,29 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserAttributeGroupValue" - } + "$ref": "#/components/schemas/SshServer" } } }, - "description": "Array of group values.", + "description": "SSH Server", "required": true } } }, - "/user_login_lockouts": { + "/ssh_server/{ssh_server_id}": { "get": { "tags": [ - "Auth" + "Connection" ], - "operationId": "all_user_login_lockouts", - "summary": "Get All User Login Lockouts", - "description": "### Get currently locked-out users.\n", + "operationId": "ssh_server", + "summary": "Get SSH Server", + "description": "### Get information about an SSH Server.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Include only these fields in the response", - "required": false, + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, "schema": { "type": "string" } @@ -38161,14 +38977,11 @@ ], "responses": { "200": { - "description": "User Login Lockout", + "description": "SSH Server", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserLoginLockout" - } + "$ref": "#/components/schemas/SshServer" } } } @@ -38207,133 +39020,32 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/user_login_lockouts/search": { - "get": { + }, + "patch": { "tags": [ - "Auth" + "Connection" ], - "operationId": "search_user_login_lockouts", - "summary": "Search User Login Lockouts", - "description": "### Search currently locked-out users.\n", + "operationId": "update_ssh_server", + "summary": "Update SSH Server", + "description": "### Update an SSH Server.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Include only these fields in the response", - "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": "auth_type", - "in": "query", - "description": "Auth type user is locked out for (email, ldap, totp, api)", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "full_name", - "in": "query", - "description": "Match name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "email", - "in": "query", - "description": "Match email", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "remote_id", - "in": "query", - "description": "Match remote LDAP ID", - "required": false, + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, "schema": { "type": "string" } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "User Login Lockout", + "description": "SSH Server", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserLoginLockout" - } + "$ref": "#/components/schemas/SshServer" } } } @@ -38358,6 +39070,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -38371,22 +39093,31 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/user_login_lockout/{key}": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshServer" + } + } + }, + "description": "SSH Server", + "required": true + } + }, "delete": { "tags": [ - "Auth" + "Connection" ], - "operationId": "delete_user_login_lockout", - "summary": "Delete User Login Lockout", - "description": "### Removes login lockout for the associated user.\n", + "operationId": "delete_ssh_server", + "summary": "Delete SSH Server", + "description": "### Delete an SSH Server.\n", "parameters": [ { - "name": "key", + "name": "ssh_server_id", "in": "path", - "description": "The key associated with the locked user", + "description": "Id of SSH Server", "required": true, "schema": { "type": "string" @@ -38440,20 +39171,20 @@ "x-looker-rate-limited": true } }, - "/user": { + "/ssh_server/{ssh_server_id}/test": { "get": { "tags": [ - "User" + "Connection" ], - "operationId": "me", - "summary": "Get Current User", - "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", + "operationId": "test_ssh_server", + "summary": "Test SSH Server", + "description": "### Test the SSH Server\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "ssh_server_id", + "in": "path", + "description": "Id of SSH Server", + "required": true, "schema": { "type": "string" } @@ -38461,11 +39192,21 @@ ], "responses": { "200": { - "description": "Current user.", + "description": "Test SSH Server", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/SshServer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" } } } @@ -38496,14 +39237,14 @@ "x-looker-rate-limited": true } }, - "/users": { + "/ssh_tunnels": { "get": { "tags": [ - "User" + "Connection" ], - "operationId": "all_users", - "summary": "Get All Users", - "description": "### Get information about all users.\n", + "operationId": "all_ssh_tunnels", + "summary": "Get All SSH Tunnels", + "description": "### Get information about all SSH Tunnels.\n", "parameters": [ { "name": "fields", @@ -38513,82 +39254,17 @@ "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 list of ids to get specific users.", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } } ], "responses": { "200": { - "description": "All users.", + "description": "SSH Tunnel", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/SshTunnel" } } } @@ -38631,29 +39307,18 @@ }, "post": { "tags": [ - "User" - ], - "operationId": "create_user", - "summary": "Create User", - "description": "### Create a user with the specified information.\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - } + "Connection" ], + "operationId": "create_ssh_tunnel", + "summary": "Create SSH Tunnel", + "description": "### Create an SSH Tunnel\n", "responses": { "200": { - "description": "Created User", + "description": "SSH Tunnel", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/SshTunnel" } } } @@ -38716,212 +39381,190 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/SshTunnel" } } }, - "description": "User", - "required": false + "description": "SSH Tunnel", + "required": true } } }, - "/users/search": { + "/ssh_tunnel/{ssh_tunnel_id}": { "get": { "tags": [ - "User" + "Connection" ], - "operationId": "search_users", - "summary": "Search Users", - "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", + "operationId": "ssh_tunnel", + "summary": "Get SSH Tunnel", + "description": "### Get information about an SSH Tunnel.\n", "parameters": [ { - "name": "fields", - "in": "query", - "description": "Include only these fields in the response", - "required": false, + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, "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" + } + ], + "responses": { + "200": { + "description": "SSH Tunnel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } } }, - { - "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" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "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" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "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" + "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 + }, + "patch": { + "tags": [ + "Connection" + ], + "operationId": "update_ssh_tunnel", + "summary": "Update SSH Tunnel", + "description": "### Update an SSH Tunnel\n", + "parameters": [ { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, "schema": { "type": "string" } - }, - { - "name": "id", - "in": "query", - "description": "Match User Id.", - "required": false, - "schema": { - "type": "string" + } + ], + "responses": { + "200": { + "description": "SSH Tunnel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } } }, - { - "name": "first_name", - "in": "query", - "description": "Match First name.", - "required": false, - "schema": { - "type": "string" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "last_name", - "in": "query", - "description": "Match Last name.", - "required": false, - "schema": { - "type": "string" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "full_name", - "in": "query", - "description": "Match Full name (First Last).", - "required": false, - "schema": { - "type": "string" + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } } }, - { - "name": "verified_looker_employee", - "in": "query", - "description": "Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "embed_user", - "in": "query", - "description": "Search for only embed users", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "email", - "in": "query", - "description": "Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "is_disabled", - "in": "query", - "description": "Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "filter_or", - "in": "query", - "description": "Combine given search criteria in a boolean OR expression", - "required": false, - "schema": { - "type": "boolean" + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } - }, - { - "name": "content_metadata_id", - "in": "query", - "description": "Search for users who have access to this content_metadata item", - "required": false, - "schema": { - "type": "string" + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } } }, + "description": "SSH Tunnel", + "required": true + } + }, + "delete": { + "tags": [ + "Connection" + ], + "operationId": "delete_ssh_tunnel", + "summary": "Delete SSH Tunnel", + "description": "### Delete an SSH Tunnel\n", + "parameters": [ { - "name": "group_id", - "in": "query", - "description": "Search for users who are direct members of this group", - "required": false, + "name": "ssh_tunnel_id", + "in": "path", + "description": "Id of SSH Tunnel", + "required": true, "schema": { "type": "string" } - }, - { - "name": "can_manage_api3_creds", - "in": "query", - "description": "Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "is_service_account", - "in": "query", - "description": "Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { - "200": { - "description": "Matching users.", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } + "type": "string" } } } @@ -38962,149 +39605,87 @@ "x-looker-rate-limited": true } }, - "/users/search/names/{pattern}": { + "/ssh_tunnel/{ssh_tunnel_id}/test": { "get": { "tags": [ - "User" + "Connection" ], - "operationId": "search_users_names", - "summary": "Search User Names", - "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", + "operationId": "test_ssh_tunnel", + "summary": "Test SSH Tunnel", + "description": "### Test the SSH Tunnel\n", "parameters": [ { - "name": "pattern", + "name": "ssh_tunnel_id", "in": "path", - "description": "Pattern to match", + "description": "Id of SSH Tunnel", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Include only these fields in the response", - "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": "id", - "in": "query", - "description": "Match User Id", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "first_name", - "in": "query", - "description": "Match First name", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "last_name", - "in": "query", - "description": "Match Last name", - "required": false, - "schema": { - "type": "string" + } + ], + "responses": { + "200": { + "description": "Test SSH Tunnel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SshTunnel" + } + } } }, - { - "name": "verified_looker_employee", - "in": "query", - "description": "Match Verified Looker employee", - "required": false, - "schema": { - "type": "boolean" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "email", - "in": "query", - "description": "Match Email Address", - "required": false, - "schema": { - "type": "string" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } } }, - { - "name": "is_disabled", - "in": "query", - "description": "Include or exclude disabled accounts in the results", - "required": false, - "schema": { - "type": "boolean" + "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 + } + }, + "/ssh_public_key": { + "get": { + "tags": [ + "Connection" ], + "operationId": "ssh_public_key", + "summary": "Get SSH Public Key", + "description": "### Get the SSH public key\n\nGet the public key created for this instance to identify itself to a remote SSH server.\n", "responses": { "200": { - "description": "Matching users.", + "description": "SSH Public Key", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } + "$ref": "#/components/schemas/SshPublicKey" } } } @@ -39145,28 +39726,28 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}": { + "/user_attributes": { "get": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "user", - "summary": "Get User by Id", - "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", + "operationId": "all_user_attributes", + "summary": "Get All User Attributes", + "description": "### Get information about all user attributes.\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } }, { - "name": "fields", + "name": "sorts", "in": "query", - "description": "Requested fields.", + "description": "Fields to order the results by. Sortable fields include: name, label", "required": false, "schema": { "type": "string" @@ -39175,11 +39756,14 @@ ], "responses": { "200": { - "description": "Specified user.", + "description": "User Attribute", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttribute" + } } } } @@ -39219,23 +39803,14 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "patch": { + "post": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "update_user", - "summary": "Update User", - "description": "### Update information about the user with a specific id.\n", + "operationId": "create_user_attribute", + "summary": "Create User Attribute", + "description": "### Create a new user attribute\n\nPermission information for a user attribute is conveyed through the `can` and `user_can_edit` fields.\nThe `user_can_edit` field indicates whether an attribute is user-editable _anywhere_ in the application.\nThe `can` field gives more granular access information, with the `set_value` child field indicating whether\nan attribute's value can be set by [Setting the User Attribute User Value](#!/User/set_user_attribute_user_value).\n\nNote: `name` and `label` fields must be unique across all user attributes in the Looker instance.\nAttempting to create a new user attribute with a name or label that duplicates an existing\nuser attribute will fail with a 422 error.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -39248,11 +39823,11 @@ ], "responses": { "200": { - "description": "New state for specified user.", + "description": "User Attribute", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/UserAttribute" } } } @@ -39267,8 +39842,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -39277,8 +39852,8 @@ } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -39315,39 +39890,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/UserAttribute" } } }, - "description": "User", + "description": "User Attribute", "required": true } - }, - "delete": { + } + }, + "/user_attributes/{user_attribute_id}": { + "get": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "delete_user", - "summary": "Delete User", - "description": "### Delete the user with a specific id.\n\n**This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them.\n\nDeletion will have the following impact:\n* Their reports, Looks and dashboards will be moved to Trash.\n* Any public URLs owned by them will no longer work.\n* Schedules created by the users or that use their content will be deleted.\n* Alerts will continue to run, but will not be visible or editable from the dashboard.\n\nThe user cannot delete themselves.\nThe last administrator user cannot be deleted.\n\nDeleting Service Accounts via this endpoint is deprecated and can be blocked in future versions.\nPlease use the dedicated `delete_service_account` endpoint.\n", + "operationId": "user_attribute", + "summary": "Get User Attribute", + "description": "### Get information about a user attribute.\n", "parameters": [ { - "name": "user_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of user", + "description": "Id of user attribute", "required": true, "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "User successfully deleted.", + "200": { + "description": "User Attribute", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/UserAttribute" } } } @@ -39362,16 +39948,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -39396,30 +39972,19 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/credential/{credential_type}/{credential_id}": { - "get": { + }, + "patch": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "user_for_credential", - "summary": "Get User by Credential Id", - "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "update_user_attribute", + "summary": "Update User Attribute", + "description": "### Update a user attribute definition.\n", "parameters": [ { - "name": "credential_type", - "in": "path", - "description": "Type name of credential", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "credential_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of credential", + "description": "Id of user attribute", "required": true, "schema": { "type": "string" @@ -39437,11 +40002,11 @@ ], "responses": { "200": { - "description": "Specified user.", + "description": "User Attribute", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/UserAttribute" } } } @@ -39456,8 +40021,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -39466,12 +40031,12 @@ } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/ValidationError" } } } @@ -39489,22 +40054,31 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/users/service_accounts/{user_id}": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttribute" + } + } + }, + "description": "User Attribute", + "required": true + } + }, "delete": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "delete_service_account", - "summary": "Delete Service Account", - "description": "### Delete the service account with a specific id.\n\n**This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them.\n\nDeletion will have the following impact:\n* Their reports, Looks and dashboards will be moved to Trash.\n* Any public URLs owned by them will no longer work.\n* Schedules created by the service account or that use their content will be deleted.\n* Alerts will continue to run, but will not be visible or editable from the dashboard.\n\nThe service account cannot delete itself.\n", + "operationId": "delete_user_attribute", + "summary": "Delete User Attribute", + "description": "### Delete a user attribute (admin only).\n", "parameters": [ { - "name": "user_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of service account user", + "description": "Id of user attribute", "required": true, "schema": { "type": "string" @@ -39513,7 +40087,7 @@ ], "responses": { "204": { - "description": "Service Account successfully deleted.", + "description": "Successfully deleted.", "content": { "application/json": { "schema": { @@ -39532,16 +40106,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -39563,22 +40127,24 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/user_attributes/{user_attribute_id}/group_values": { + "get": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "update_service_account", - "summary": "Update Service Account", - "description": "### Update information for a specific service account. This action is restricted to Looker admins.\n\nThis endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead.\n", + "operationId": "all_user_attribute_group_values", + "summary": "Get User Attribute Group Values", + "description": "### Returns all values of a user attribute defined by user groups, in precedence order.\n\nA user may be a member of multiple groups which define different values for a given user attribute.\nThe order of group-values in the response determines precedence for selecting which group-value applies\nto a given user. For more information, see [Set User Attribute Group Values](#!/UserAttribute/set_user_attribute_group_values).\n\nResults will only include groups that the caller's user account has permission to see.\n", "parameters": [ { - "name": "user_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of service account", + "description": "Id of user attribute", "required": true, "schema": { "type": "string" @@ -39596,11 +40162,14 @@ ], "responses": { "200": { - "description": "New state for specified service account.", + "description": "All group values for attribute.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ServiceAccount" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttributeGroupValue" + } } } } @@ -39615,8 +40184,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -39625,26 +40194,6 @@ } } }, - "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": { @@ -39656,57 +40205,38 @@ } } }, - "x-looker-status": "alpha", + "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceAccount" - } - } - }, - "description": "Service Account", - "required": true - } - } - }, - "/users/{user_id}/credentials_email": { - "get": { + "x-looker-rate-limited": true + }, + "post": { "tags": [ - "User" + "UserAttribute" ], - "operationId": "user_credentials_email", - "summary": "Get Email/Password Credential", - "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "set_user_attribute_group_values", + "summary": "Set User Attribute Group Values", + "description": "### Define values for a user attribute across a set of groups, in priority order.\n\nThis function defines all values for a user attribute defined by user groups. This is a global setting, potentially affecting\nall users in the system. This function replaces any existing group value definitions for the indicated user attribute.\n\nThe value of a user attribute for a given user is determined by searching the following locations, in this order:\n\n1. the user's account settings\n2. the groups that the user is a member of\n3. the default value of the user attribute, if any\n\nThe user may be a member of multiple groups which define different values for that user attribute. The order of items in the group_values parameter\ndetermines which group takes priority for that user. Lowest array index wins.\n\nAn alternate method to indicate the selection precedence of group-values is to assign numbers to the 'rank' property of each\ngroup-value object in the array. Lowest 'rank' value wins. If you use this technique, you must assign a\nrank value to every group-value object in the array.\n\n To set a user attribute value for a single user, see [Set User Attribute User Value](#!/User/set_user_attribute_user_value).\nTo set a user attribute value for all members of a group, see [Set User Attribute Group Value](#!/Group/update_user_attribute_group_value).\n", "parameters": [ { - "name": "user_id", + "name": "user_attribute_id", "in": "path", - "description": "Id of user", + "description": "Id of user attribute", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Email/Password Credential", + "description": "Array of group values.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsEmail" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttributeGroupValue" + } } } } @@ -39721,8 +40251,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -39731,8 +40261,8 @@ } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -39741,6 +40271,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -39754,25 +40294,32 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "post": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttributeGroupValue" + } + } + } + }, + "description": "Array of group values.", + "required": true + } + } + }, + "/user_db_connections": { + "get": { "tags": [ - "User" + "Connection" ], - "operationId": "create_user_credentials_email", - "summary": "Create Email/Password Credential", - "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "all_user_db_connections", + "summary": "Get All User DB Connections", + "description": "### Get All User DB Connections\n\nReturns a list of user DB connections.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -39785,11 +40332,14 @@ ], "responses": { "200": { - "description": "Email/Password Credential", + "description": "User DB Connections", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsEmail" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserDbConnection" + } } } } @@ -39804,16 +40354,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -39824,26 +40364,6 @@ } } }, - "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": { @@ -39855,55 +40375,37 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CredentialsEmail" - } - } - }, - "description": "Email/Password Credential", - "required": true - } - }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true + } + }, + "/user_db_connections/{user_db_connection_id}": { "patch": { "tags": [ - "User" + "Connection" ], - "operationId": "update_user_credentials_email", - "summary": "Update Email/Password Credential", - "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "update_user_db_connection", + "summary": "Update User DB Connection", + "description": "### Update User DB Connection\n\nUpdates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper).\n", "parameters": [ { - "name": "user_id", + "name": "user_db_connection_id", "in": "path", - "description": "Id of user", + "description": "Id of user DB connection", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { "200": { - "description": "Email/Password Credential", + "description": "User DB Connection", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsEmail" + "$ref": "#/components/schemas/UserDbConnection" } } } @@ -39959,33 +40461,33 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true, "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsEmail" + "$ref": "#/components/schemas/UserDbConnection" } } }, - "description": "Email/Password Credential", + "description": "User DB Connection", "required": true } }, "delete": { "tags": [ - "User" + "Connection" ], - "operationId": "delete_user_credentials_email", - "summary": "Delete Email/Password Credential", - "description": "### Email/password login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "delete_user_db_connection", + "summary": "Delete User DB Connection", + "description": "### Delete User DB Connection\n\nDeletes an existing user DB connection.\n", "parameters": [ { - "name": "user_id", + "name": "user_db_connection_id", "in": "path", - "description": "Id of user", + "description": "Id of user DB connection", "required": true, "schema": { "type": "string" @@ -39994,24 +40496,7 @@ ], "responses": { "204": { - "description": "Successfully deleted.", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } + "description": "Successfully deleted." }, "403": { "description": "Permission Denied", @@ -40044,33 +40529,24 @@ } } }, - "x-looker-status": "stable", - "x-looker-activity-type": "non_query", + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_totp": { + "/user_login_lockouts": { "get": { "tags": [ - "User" + "Auth" ], - "operationId": "user_credentials_totp", - "summary": "Get Two-Factor Credential", - "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "all_user_login_lockouts", + "summary": "Get All User Login Lockouts", + "description": "### Get currently locked-out users.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Include only these fields in the response", "required": false, "schema": { "type": "string" @@ -40079,11 +40555,14 @@ ], "responses": { "200": { - "description": "Two-Factor Credential", + "description": "User Login Lockout", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsTotp" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserLoginLockout" + } } } } @@ -40098,16 +40577,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -40132,41 +40601,133 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "post": { + } + }, + "/user_login_lockouts/search": { + "get": { "tags": [ - "User" + "Auth" ], - "operationId": "create_user_credentials_totp", - "summary": "Create Two-Factor Credential", - "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "search_user_login_lockouts", + "summary": "Search User Login Lockouts", + "description": "### Search currently locked-out users.\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "required": false, "schema": { "type": "string" } }, { - "name": "fields", + "name": "page", "in": "query", - "description": "Requested fields.", + "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": "auth_type", + "in": "query", + "description": "Auth type user is locked out for (email, ldap, totp, api)", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "full_name", + "in": "query", + "description": "Match name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "email", + "in": "query", + "description": "Match email", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "remote_id", + "in": "query", + "description": "Match remote LDAP ID", "required": false, "schema": { "type": "string" } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "Two-Factor Credential", + "description": "User Login Lockout", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsTotp" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserLoginLockout" + } } } } @@ -40181,16 +40742,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -40201,26 +40752,6 @@ } } }, - "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": { @@ -40234,31 +40765,22 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CredentialsTotp" - } - } - }, - "description": "Two-Factor Credential", - "required": false - } - }, + "x-looker-rate-limited": true + } + }, + "/user_login_lockout/{key}": { "delete": { "tags": [ - "User" + "Auth" ], - "operationId": "delete_user_credentials_totp", - "summary": "Delete Two-Factor Credential", - "description": "### Two-factor login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "delete_user_login_lockout", + "summary": "Delete User Login Lockout", + "description": "### Removes login lockout for the associated user.\n", "parameters": [ { - "name": "user_id", + "name": "key", "in": "path", - "description": "Id of user", + "description": "The key associated with the locked user", "required": true, "schema": { "type": "string" @@ -40286,16 +40808,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -40322,24 +40834,15 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_ldap": { + "/user": { "get": { "tags": [ "User" ], - "operationId": "user_credentials_ldap", - "summary": "Get LDAP Credential", - "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "me", + "summary": "Get Current User", + "description": "### Get information about the current user; i.e. the user account currently calling the API.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -40352,31 +40855,11 @@ ], "responses": { "200": { - "description": "LDAP Credential", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CredentialsLDAP" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "403": { - "description": "Permission Denied", + "description": "Current user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Error" + "$ref": "#/components/schemas/User" } } } @@ -40405,32 +40888,102 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/users": { + "get": { "tags": [ "User" ], - "operationId": "delete_user_credentials_ldap", - "summary": "Delete LDAP Credential", - "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "all_users", + "summary": "Get All Users", + "description": "### Get information about all users.\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, + "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 list of ids to get specific users.", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "All users.", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } } } } @@ -40445,16 +40998,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -40479,26 +41022,15 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_google": { - "get": { + }, + "post": { "tags": [ "User" ], - "operationId": "user_credentials_google", - "summary": "Get Google Auth Credential", - "description": "### Google authentication login information for the specified user.", + "operationId": "create_user", + "summary": "Create User", + "description": "### Create a user with the specified information.\n", "parameters": [ - { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -40511,11 +41043,11 @@ ], "responses": { "200": { - "description": "Google Auth Credential", + "description": "Created User", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsGoogle" + "$ref": "#/components/schemas/User" } } } @@ -40530,8 +41062,8 @@ } } }, - "403": { - "description": "Permission Denied", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -40540,8 +41072,8 @@ } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Resource Already Exists", "content": { "application/json": { "schema": { @@ -40550,6 +41082,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -40563,33 +41105,217 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - }, - "delete": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "description": "User", + "required": false + } + } + }, + "/users/search": { + "get": { "tags": [ "User" ], - "operationId": "delete_user_credentials_google", - "summary": "Delete Google Auth Credential", - "description": "### Google authentication login information for the specified user.", + "operationId": "search_users", + "summary": "Search Users", + "description": "### Search users\n\nReturns all* user records that match the given search criteria.\n\nIf multiple search params are given and `filter_or` is FALSE or not specified,\nsearch params are combined in a logical AND operation.\nOnly rows that match *all* search param criteria will be returned.\n\nIf `filter_or` is TRUE, multiple search params are combined in a logical OR operation.\nResults will include rows that match **any** of the search criteria.\n\nString search params use case-insensitive matching.\nString search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions.\nexample=\"dan%\" will match \"danger\" and \"Danzig\" but not \"David\"\nexample=\"D_m%\" will match \"Damage\" and \"dump\"\n\nInteger search params can accept a single value or a comma separated list of values. The multiple\nvalues will be combined under a logical OR operation - results will match at least one of\nthe given values.\n\nMost search params can accept \"IS NULL\" and \"NOT NULL\" as special expressions to match\nor exclude (respectively) rows where the column is null.\n\nBoolean search params accept only \"true\" and \"false\" as values.\n\n\n(*) Results are always filtered to the level of information the caller is permitted to view.\nLooker admins can see all user details; normal users in an open system can see\nnames of other users but no details; normal users in a closed system can only see\nnames of other users who are members of the same group as the user.\n\n", "parameters": [ { - "name": "user_id", - "in": "path", - "description": "Id of user", - "required": true, + "name": "fields", + "in": "query", + "description": "Include only these fields in the response", + "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": "id", + "in": "query", + "description": "Match User Id.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "first_name", + "in": "query", + "description": "Match First name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "last_name", + "in": "query", + "description": "Match Last name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "full_name", + "in": "query", + "description": "Match Full name (First Last).", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "verified_looker_employee", + "in": "query", + "description": "Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "embed_user", + "in": "query", + "description": "Search for only embed users", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "email", + "in": "query", + "description": "Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "is_disabled", + "in": "query", + "description": "Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "filter_or", + "in": "query", + "description": "Combine given search criteria in a boolean OR expression", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Search for users who have access to this content_metadata item", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "group_id", + "in": "query", + "description": "Search for users who are direct members of this group", + "required": false, "schema": { "type": "string" } + }, + { + "name": "can_manage_api3_creds", + "in": "query", + "description": "Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "is_service_account", + "in": "query", + "description": "Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details.", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Matching users.", "content": { "application/json": { "schema": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } } } } @@ -40604,16 +41330,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -40640,19 +41356,19 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_saml": { + "/users/search/names/{pattern}": { "get": { "tags": [ "User" ], - "operationId": "user_credentials_saml", - "summary": "Get Saml Auth Credential", - "description": "### Saml authentication login information for the specified user.", + "operationId": "search_users_names", + "summary": "Search User Names", + "description": "### Search for user accounts by name\n\nReturns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern.\nThe pattern can contain `%` and `_` wildcards as in SQL LIKE expressions.\n\nAny additional search params will be combined into a logical AND expression.\n", "parameters": [ { - "name": "user_id", + "name": "pattern", "in": "path", - "description": "Id of user", + "description": "Pattern to match", "required": true, "schema": { "type": "string" @@ -40661,20 +41377,128 @@ { "name": "fields", "in": "query", - "description": "Requested fields.", + "description": "Include only these fields in the response", + "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": "id", + "in": "query", + "description": "Match User Id", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "first_name", + "in": "query", + "description": "Match First name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "last_name", + "in": "query", + "description": "Match Last name", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "verified_looker_employee", + "in": "query", + "description": "Match Verified Looker employee", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "email", + "in": "query", + "description": "Match Email Address", "required": false, "schema": { "type": "string" } + }, + { + "name": "is_disabled", + "in": "query", + "description": "Include or exclude disabled accounts in the results", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "Saml Auth Credential", + "description": "Matching users.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsSaml" + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } } } } @@ -40689,16 +41513,6 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, "404": { "description": "Not Found", "content": { @@ -40723,14 +41537,16 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "delete": { + } + }, + "/users/{user_id}": { + "get": { "tags": [ "User" ], - "operationId": "delete_user_credentials_saml", - "summary": "Delete Saml Auth Credential", - "description": "### Saml authentication login information for the specified user.", + "operationId": "user", + "summary": "Get User by Id", + "description": "### Get information about the user with a specific id.\n\nIf the caller is an admin or the caller is the user being specified, then full user information will\nbe returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains\nThe user name and avatar url, but no sensitive information.\n", "parameters": [ { "name": "user_id", @@ -40740,15 +41556,24 @@ "schema": { "type": "string" } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "Specified user.", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/User" } } } @@ -40763,18 +41588,8 @@ } } }, - "403": { - "description": "Permission Denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "404": { - "description": "Not Found", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -40797,16 +41612,14 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_oidc": { - "get": { + }, + "patch": { "tags": [ "User" ], - "operationId": "user_credentials_oidc", - "summary": "Get OIDC Auth Credential", - "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", + "operationId": "update_user", + "summary": "Update User", + "description": "### Update information about the user with a specific id.\n", "parameters": [ { "name": "user_id", @@ -40829,11 +41642,11 @@ ], "responses": { "200": { - "description": "OIDC Auth Credential", + "description": "New state for specified user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsOIDC" + "$ref": "#/components/schemas/User" } } } @@ -40868,6 +41681,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -40881,15 +41704,26 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "description": "User", + "required": true + } }, "delete": { "tags": [ "User" ], - "operationId": "delete_user_credentials_oidc", - "summary": "Delete OIDC Auth Credential", - "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", + "operationId": "delete_user", + "summary": "Delete User", + "description": "### Delete the user with a specific id.\n\n**This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them.\n\nDeletion will have the following impact:\n* Their reports, Looks and dashboards will be moved to Trash.\n* Any public URLs owned by them will no longer work.\n* Schedules created by the users or that use their content will be deleted.\n* Alerts owned by the users will be deleted.\n\nThe user cannot delete themselves.\nThe last administrator user cannot be deleted.\n\nDeleting Service Accounts via this endpoint is deprecated and can be blocked in future versions.\nPlease use the dedicated `delete_service_account` endpoint.\n", "parameters": [ { "name": "user_id", @@ -40903,7 +41737,7 @@ ], "responses": { "204": { - "description": "Successfully deleted.", + "description": "User successfully deleted.", "content": { "application/json": { "schema": { @@ -40958,28 +41792,28 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_api3/{credentials_api3_id}": { + "/users/credential/{credential_type}/{credential_id}": { "get": { "tags": [ "User" ], - "operationId": "user_credentials_api3", - "summary": "Get API Credential", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "user_for_credential", + "summary": "Get User by Credential Id", + "description": "### Get information about the user with a credential of given type with specific id.\n\nThis is used to do things like find users by their embed external_user_id. Or, find the user with\na given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential\ntypes. It must be one of the values listed in the table below. The 'credential_id' is your unique Id\nfor the user and is specific to each type of credential.\n\nAn example using the Ruby sdk might look like:\n\n`sdk.user_for_credential('embed', 'customer-4959425')`\n\nThis table shows the supported 'Credential Type' strings. The right column is for reference; it shows\nwhich field in the given credential type is actually searched when finding a user with the supplied\n'credential_id'.\n\n| Credential Types | Id Field Matched |\n| ---------------- | ---------------- |\n| email | email |\n| google | google_user_id |\n| saml | saml_user_id |\n| oidc | oidc_user_id |\n| ldap | ldap_id |\n| api | token |\n| api3 | client_id |\n| embed | external_user_id |\n| looker_openid | email |\n\n**NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", "parameters": [ { - "name": "user_id", + "name": "credential_type", "in": "path", - "description": "Id of user", + "description": "Type name of credential", "required": true, "schema": { "type": "string" } }, { - "name": "credentials_api3_id", + "name": "credential_id", "in": "path", - "description": "Id of API Credential", + "description": "Id of credential", "required": true, "schema": { "type": "string" @@ -40997,11 +41831,11 @@ ], "responses": { "200": { - "description": "API Credential", + "description": "Specified user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsApi3" + "$ref": "#/components/schemas/User" } } } @@ -41050,50 +41884,34 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "patch": { + } + }, + "/users/service_accounts/{user_id}": { + "delete": { "tags": [ "User" ], - "operationId": "update_user_credentials_api3", - "summary": "Update API Credential", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "delete_service_account", + "summary": "Delete Service Account", + "description": "### Delete the service account with a specific id.\n\n**This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them.\n\nDeletion will have the following impact:\n* Their reports, Looks and dashboards will be moved to Trash.\n* Any public URLs owned by them will no longer work.\n* Schedules created by the service account or that use their content will be deleted.\n* Alerts owned by the service account will be deleted.\n\nThe service account cannot delete itself.\n", "parameters": [ { "name": "user_id", "in": "path", - "description": "Id of user", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "credentials_api3_id", - "in": "path", - "description": "Id of API Credential", + "description": "Id of service account user", "required": true, "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { - "200": { - "description": "API Credential", + "204": { + "description": "Service Account successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsApi3" + "type": "string" } } } @@ -41128,16 +41946,6 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidationError" - } - } - } - }, "429": { "description": "Too Many Requests", "content": { @@ -41149,55 +41957,44 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "alpha", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CredentialsApi3" - } - } - }, - "description": "API Credential", - "required": true - } + "x-looker-rate-limited": true }, - "delete": { + "patch": { "tags": [ "User" ], - "operationId": "delete_user_credentials_api3", - "summary": "Delete API Credential", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "update_service_account", + "summary": "Update Service Account", + "description": "### Update information for a specific service account. This action is restricted to Looker admins.\n\nThis endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead.\n", "parameters": [ { "name": "user_id", "in": "path", - "description": "Id of user", + "description": "Id of service account", "required": true, "schema": { "type": "string" } }, { - "name": "credentials_api3_id", - "in": "path", - "description": "Id of API Credential", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "New state for specified service account.", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/ServiceAccount" } } } @@ -41232,6 +42029,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -41243,19 +42050,30 @@ } } }, - "x-looker-status": "stable", + "x-looker-status": "alpha", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceAccount" + } + } + }, + "description": "Service Account", + "required": true + } } }, - "/users/{user_id}/credentials_api3": { + "/users/{user_id}/credentials_ldap": { "get": { "tags": [ "User" ], - "operationId": "all_user_credentials_api3s", - "summary": "Get All API Credentials", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "user_credentials_ldap", + "summary": "Get LDAP Credential", + "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -41278,14 +42096,11 @@ ], "responses": { "200": { - "description": "API Credential", + "description": "LDAP Credential", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CredentialsApi3" - } + "$ref": "#/components/schemas/CredentialsLDAP" } } } @@ -41335,13 +42150,13 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "post": { + "delete": { "tags": [ "User" ], - "operationId": "create_user_credentials_api3", - "summary": "Create API Credential", - "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", + "operationId": "delete_user_credentials_ldap", + "summary": "Delete LDAP Credential", + "description": "### LDAP login information for the specified user.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", "parameters": [ { "name": "user_id", @@ -41351,24 +42166,15 @@ "schema": { "type": "string" } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } } ], "responses": { - "200": { - "description": "API Credential", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCredentialsApi3" + "type": "string" } } } @@ -41403,26 +42209,6 @@ } } }, - "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": { @@ -41439,14 +42225,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_embed/{credentials_embed_id}": { + "/users/{user_id}/credentials_oidc": { "get": { "tags": [ "User" ], - "operationId": "user_credentials_embed", - "summary": "Get Embedding Credential", - "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", + "operationId": "user_credentials_oidc", + "summary": "Get OIDC Auth Credential", + "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", "parameters": [ { "name": "user_id", @@ -41457,15 +42243,6 @@ "type": "string" } }, - { - "name": "credentials_embed_id", - "in": "path", - "description": "Id of Embedding Credential", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -41478,11 +42255,11 @@ ], "responses": { "200": { - "description": "Embedding Credential", + "description": "OIDC Auth Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsEmbed" + "$ref": "#/components/schemas/CredentialsOIDC" } } } @@ -41536,9 +42313,9 @@ "tags": [ "User" ], - "operationId": "delete_user_credentials_embed", - "summary": "Delete Embedding Credential", - "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", + "operationId": "delete_user_credentials_oidc", + "summary": "Delete OIDC Auth Credential", + "description": "### OpenID Connect (OIDC) authentication login information for the specified user.", "parameters": [ { "name": "user_id", @@ -41548,15 +42325,6 @@ "schema": { "type": "string" } - }, - { - "name": "credentials_embed_id", - "in": "path", - "description": "Id of Embedding Credential", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { @@ -41616,14 +42384,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/credentials_embed": { + "/users/{user_id}/credentials_api3/{credentials_api3_id}": { "get": { "tags": [ "User" ], - "operationId": "all_user_credentials_embeds", - "summary": "Get All Embedding Credentials", - "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", + "operationId": "user_credentials_api3", + "summary": "Get API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -41634,6 +42402,15 @@ "type": "string" } }, + { + "name": "credentials_api3_id", + "in": "path", + "description": "Id of API Credential", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -41646,14 +42423,11 @@ ], "responses": { "200": { - "description": "Embedding Credential", + "description": "API Credential", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CredentialsEmbed" - } + "$ref": "#/components/schemas/CredentialsApi3" } } } @@ -41702,16 +42476,14 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_looker_openid": { - "get": { + }, + "patch": { "tags": [ "User" ], - "operationId": "user_credentials_looker_openid", - "summary": "Get Looker OpenId Credential", - "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "update_user_credentials_api3", + "summary": "Update API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -41722,6 +42494,15 @@ "type": "string" } }, + { + "name": "credentials_api3_id", + "in": "path", + "description": "Id of API Credential", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -41734,11 +42515,11 @@ ], "responses": { "200": { - "description": "Looker OpenId Credential", + "description": "API Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsLookerOpenid" + "$ref": "#/components/schemas/CredentialsApi3" } } } @@ -41773,6 +42554,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -41786,15 +42577,26 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialsApi3" + } + } + }, + "description": "API Credential", + "required": true + } }, "delete": { "tags": [ "User" ], - "operationId": "delete_user_credentials_looker_openid", - "summary": "Delete Looker OpenId Credential", - "description": "### Looker Openid login information for the specified user. Used by Looker Analysts.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).", + "operationId": "delete_user_credentials_api3", + "summary": "Delete API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -41804,6 +42606,15 @@ "schema": { "type": "string" } + }, + { + "name": "credentials_api3_id", + "in": "path", + "description": "Id of API Credential", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -41863,14 +42674,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/sessions/{session_id}": { + "/users/{user_id}/credentials_api3": { "get": { "tags": [ "User" ], - "operationId": "user_session", - "summary": "Get Web Login Session", - "description": "### Web login session for the specified user.", + "operationId": "all_user_credentials_api3s", + "summary": "Get All API Credentials", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -41881,15 +42692,6 @@ "type": "string" } }, - { - "name": "session_id", - "in": "path", - "description": "Id of Web Login Session", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "fields", "in": "query", @@ -41902,11 +42704,14 @@ ], "responses": { "200": { - "description": "Web Login Session", + "description": "API Credential", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Session" + "type": "array", + "items": { + "$ref": "#/components/schemas/CredentialsApi3" + } } } } @@ -41956,13 +42761,13 @@ "x-looker-activity-type": "non_query", "x-looker-rate-limited": true }, - "delete": { + "post": { "tags": [ "User" ], - "operationId": "delete_user_session", - "summary": "Delete Web Login Session", - "description": "### Web login session for the specified user.", + "operationId": "create_user_credentials_api3", + "summary": "Create API Credential", + "description": "### API login information for the specified user. This is for the newer API keys that can be added for any user.", "parameters": [ { "name": "user_id", @@ -41974,22 +42779,22 @@ } }, { - "name": "session_id", - "in": "path", - "description": "Id of Web Login Session", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "Successfully deleted.", + "200": { + "description": "API Credential", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/CreateCredentialsApi3" } } } @@ -42024,6 +42829,26 @@ } } }, + "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": { @@ -42040,14 +42865,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/sessions": { + "/users/{user_id}/credentials_embed/{credentials_embed_id}": { "get": { "tags": [ "User" ], - "operationId": "all_user_sessions", - "summary": "Get All Web Login Sessions", - "description": "### Web login session for the specified user.", + "operationId": "user_credentials_embed", + "summary": "Get Embedding Credential", + "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", "parameters": [ { "name": "user_id", @@ -42058,6 +42883,15 @@ "type": "string" } }, + { + "name": "credentials_embed_id", + "in": "path", + "description": "Id of Embedding Credential", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -42070,14 +42904,11 @@ ], "responses": { "200": { - "description": "Web Login Session", + "description": "Embedding Credential", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Session" - } + "$ref": "#/components/schemas/CredentialsEmbed" } } } @@ -42126,16 +42957,14 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_email/password_reset": { - "post": { + }, + "delete": { "tags": [ "User" ], - "operationId": "create_user_credentials_email_password_reset", - "summary": "Create Password Reset Token", - "description": "### Create a password reset token.\nThis will create a cryptographically secure random password reset token for the user.\nIf the user already has a password reset token then this invalidates the old token and creates a new one.\nThe token is expressed as the 'password_reset_url' of the user's email/password credential object.\nThis takes an optional 'expires' param to indicate if the new token should be an expiring token.\nTokens that expire are typically used for self-service password resets for existing users.\nInvitation emails for new users typically are not set to expire.\nThe expire period is always 60 minutes when expires is enabled.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "delete_user_credentials_embed", + "summary": "Delete Embedding Credential", + "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", "parameters": [ { "name": "user_id", @@ -42147,31 +42976,22 @@ } }, { - "name": "expires", - "in": "query", - "description": "Expiring token.", - "required": false, - "schema": { - "type": "boolean" - } - }, - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "credentials_embed_id", + "in": "path", + "description": "Id of Embedding Credential", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "email/password credential", + "204": { + "description": "Successfully deleted.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CredentialsEmail" + "type": "string" } } } @@ -42222,14 +43042,14 @@ "x-looker-rate-limited": true } }, - "/users/{user_id}/roles": { + "/users/{user_id}/credentials_embed": { "get": { "tags": [ "User" ], - "operationId": "user_roles", - "summary": "Get User Roles", - "description": "### Get information about roles of a given user\n", + "operationId": "all_user_credentials_embeds", + "summary": "Get All Embedding Credentials", + "description": "### Embed login information for the specified user.\n\n**NOTE**: Calls to this endpoint require [Embedding](https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed) to be enabled. Usage of this endpoint is not authorized for Looker Core Standard and Looker Core Enterprise.", "parameters": [ { "name": "user_id", @@ -42248,26 +43068,17 @@ "schema": { "type": "string" } - }, - { - "name": "direct_association_only", - "in": "query", - "description": "Get only roles associated directly with the user: exclude those only associated through groups.", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { "200": { - "description": "Roles of user.", + "description": "Embedding Credential", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Role" + "$ref": "#/components/schemas/CredentialsEmbed" } } } @@ -42283,6 +43094,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -42307,14 +43128,16 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - }, - "put": { + } + }, + "/users/{user_id}/sessions/{session_id}": { + "get": { "tags": [ "User" ], - "operationId": "set_user_roles", - "summary": "Set User Roles", - "description": "### Set roles of the user with a specific id.\n", + "operationId": "user_session", + "summary": "Get Web Login Session", + "description": "### Web login session for the specified user.", "parameters": [ { "name": "user_id", @@ -42325,6 +43148,15 @@ "type": "string" } }, + { + "name": "session_id", + "in": "path", + "description": "Id of Web Login Session", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "fields", "in": "query", @@ -42337,14 +43169,11 @@ ], "responses": { "200": { - "description": "Roles of user.", + "description": "Web Login Session", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Role" - } + "$ref": "#/components/schemas/Session" } } } @@ -42379,12 +43208,85 @@ } } }, - "422": { - "description": "Validation Error", + "429": { + "description": "Too Many Requests", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + }, + "delete": { + "tags": [ + "User" + ], + "operationId": "delete_user_session", + "summary": "Delete Web Login Session", + "description": "### Web login session for the specified user.", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "session_id", + "in": "path", + "description": "Id of Web Login Session", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "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" } } } @@ -42402,31 +43304,17 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true, - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "description": "array of roles ids for user", - "required": true - } + "x-looker-rate-limited": true } }, - "/users/{user_id}/attribute_values": { + "/users/{user_id}/sessions": { "get": { "tags": [ "User" ], - "operationId": "user_attribute_user_values", - "summary": "Get User Attribute Values", - "description": "### Get user attribute values for a given user.\n\nReturns the values of specified user attributes (or all user attributes) for a certain user.\n\nA value for each user attribute is searched for in the following locations, in this order:\n\n1. in the user's account information\n1. in groups that the user is a member of\n1. the default value of the user attribute\n\nIf more than one group has a value defined for a user attribute, the group with the lowest rank wins.\n\nThe response will only include user attributes for which values were found. Use `include_unset=true` to include\nempty records for user attributes with no value.\n\nThe value of all hidden user attributes will be blank.\n", + "operationId": "all_user_sessions", + "summary": "Get All Web Login Sessions", + "description": "### Web login session for the specified user.", "parameters": [ { "name": "user_id", @@ -42445,34 +43333,99 @@ "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "Web Login Session", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Session" + } + } + } + } }, + "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": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/users/{user_id}/roles": { + "get": { + "tags": [ + "User" + ], + "operationId": "user_roles", + "summary": "Get User Roles", + "description": "### Get information about roles of a given user\n", + "parameters": [ { - "name": "user_attribute_ids", - "in": "query", - "description": "Specific user attributes to request. Omit or leave blank to request all user attributes.", - "required": false, - "style": "simple", - "explode": false, + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } }, { - "name": "all_values", + "name": "fields", "in": "query", - "description": "If true, returns all values in the search path instead of just the first value found. Useful for debugging group precedence.", + "description": "Requested fields.", "required": false, "schema": { - "type": "boolean" + "type": "string" } }, { - "name": "include_unset", + "name": "direct_association_only", "in": "query", - "description": "If true, returns an empty record for each requested attribute that has no user, group, or default value.", + "description": "Get only roles associated directly with the user: exclude those only associated through groups.", "required": false, "schema": { "type": "boolean" @@ -42481,18 +43434,28 @@ ], "responses": { "200": { - "description": "Value of user attribute.", + "description": "Roles of user.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/UserAttributeWithValue" + "$ref": "#/components/schemas/Role" } } } } }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -42517,16 +43480,14 @@ "x-looker-status": "stable", "x-looker-activity-type": "non_query", "x-looker-rate-limited": true - } - }, - "/users/{user_id}/attribute_values/{user_attribute_id}": { - "patch": { + }, + "put": { "tags": [ "User" ], - "operationId": "set_user_attribute_user_value", - "summary": "Set User Attribute User Value", - "description": "### Store a custom value for a user attribute in a user's account settings.\n\nPer-user user attribute values take precedence over group or default values.\n", + "operationId": "set_user_roles", + "summary": "Set User Roles", + "description": "### Set roles of the user with a specific id.\n", "parameters": [ { "name": "user_id", @@ -42538,10 +43499,10 @@ } }, { - "name": "user_attribute_id", - "in": "path", - "description": "Id of user attribute", - "required": true, + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, "schema": { "type": "string" } @@ -42549,11 +43510,14 @@ ], "responses": { "200": { - "description": "User attribute value.", + "description": "Roles of user.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttributeWithValue" + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + } } } } @@ -42616,21 +43580,126 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserAttributeWithValue" + "type": "array", + "items": { + "type": "string" + } } } }, - "description": "New attribute value for user.", + "description": "array of roles ids for user", "required": true } - }, - "delete": { + } + }, + "/users/{user_id}/attribute_values": { + "get": { "tags": [ "User" ], - "operationId": "delete_user_attribute_user_value", - "summary": "Delete User Attribute User Value", - "description": "### Delete a user attribute value from a user's account settings.\n\nAfter the user attribute value is deleted from the user's account settings, subsequent requests\nfor the user attribute value for this user will draw from the user's groups or the default\nvalue of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more\ninformation about how user attribute values are resolved.\n", + "operationId": "user_attribute_user_values", + "summary": "Get User Attribute Values", + "description": "### Get user attribute values for a given user.\n\nReturns the values of specified user attributes (or all user attributes) for a certain user.\n\nA value for each user attribute is searched for in the following locations, in this order:\n\n1. in the user's account information\n1. in groups that the user is a member of\n1. the default value of the user attribute\n\nIf more than one group has a value defined for a user attribute, the group with the lowest rank wins.\n\nThe response will only include user attributes for which values were found. Use `include_unset=true` to include\nempty records for user attributes with no value.\n\nThe value of all hidden user attributes will be blank.\n", + "parameters": [ + { + "name": "user_id", + "in": "path", + "description": "Id of user", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "user_attribute_ids", + "in": "query", + "description": "Specific user attributes to request. Omit or leave blank to request all user attributes.", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "all_values", + "in": "query", + "description": "If true, returns all values in the search path instead of just the first value found. Useful for debugging group precedence.", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "include_unset", + "in": "query", + "description": "If true, returns an empty record for each requested attribute that has no user, group, or default value.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Value of user attribute.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAttributeWithValue" + } + } + } + } + }, + "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 + } + }, + "/users/{user_id}/attribute_values/{user_attribute_id}": { + "patch": { + "tags": [ + "User" + ], + "operationId": "set_user_attribute_user_value", + "summary": "Set User Attribute User Value", + "description": "### Store a custom value for a user attribute in a user's account settings.\n\nPer-user user attribute values take precedence over group or default values.\n", "parameters": [ { "name": "user_id", @@ -42652,8 +43721,15 @@ } ], "responses": { - "204": { - "description": "Deleted" + "200": { + "description": "User attribute value.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttributeWithValue" + } + } + } }, "400": { "description": "Bad Request", @@ -42685,6 +43761,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -42698,17 +43784,26 @@ }, "x-looker-status": "stable", "x-looker-activity-type": "non_query", - "x-looker-rate-limited": true - } - }, - "/users/{user_id}/credentials_email/send_password_reset": { - "post": { + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserAttributeWithValue" + } + } + }, + "description": "New attribute value for user.", + "required": true + } + }, + "delete": { "tags": [ "User" ], - "operationId": "send_user_credentials_email_password_reset", - "summary": "Send Password Reset Token", - "description": "### Send a password reset token.\nThis will send a password reset email to the user. If a password reset token does not already exist\nfor this user, it will create one and then send it.\nIf the user has not yet set up their account, it will send a setup email to the user.\nThe URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object.\nPassword reset URLs will expire in 60 minutes.\nThis method can be called with an empty body.\n\nCalls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview).\n", + "operationId": "delete_user_attribute_user_value", + "summary": "Delete User Attribute User Value", + "description": "### Delete a user attribute value from a user's account settings.\n\nAfter the user attribute value is deleted from the user's account settings, subsequent requests\nfor the user attribute value for this user will draw from the user's groups or the default\nvalue of the user attribute. See [Get User Attribute Values](#!/User/user_attribute_user_values) for more\ninformation about how user attribute values are resolved.\n", "parameters": [ { "name": "user_id", @@ -42720,25 +43815,18 @@ } }, { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, + "name": "user_attribute_id", + "in": "path", + "description": "Id of user attribute", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "email/password credential", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CredentialsEmail" - } - } - } + "204": { + "description": "Deleted" }, "400": { "description": "Bad Request", @@ -44056,6 +45144,23 @@ }, "x-looker-status": "stable" }, + "AgentLookml": { + "properties": { + "agent_id": { + "type": "string", + "readOnly": true, + "description": "Id of Agent", + "nullable": true + }, + "lookml": { + "type": "string", + "readOnly": true, + "description": "lookml of UDD Agent", + "nullable": true + } + }, + "x-looker-status": "beta" + }, "Agent": { "properties": { "can": { @@ -44191,6 +45296,25 @@ }, "workflow_params": { "$ref": "#/components/schemas/WorkflowParams" + }, + "is_lookml": { + "type": "boolean", + "readOnly": true, + "description": "Whether the agent is defined in LookML", + "nullable": false + }, + "lookml_agent_id": { + "type": "string", + "readOnly": true, + "description": "LookML Agent ID", + "nullable": true + }, + "lookml_edit_uri": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "URI to edit the LookML definition of this agent", + "nullable": true } }, "x-looker-status": "beta" @@ -44216,6 +45340,16 @@ "type": "string", "description": "Agent instructions", "nullable": false + }, + "show_analytical_details": { + "type": "boolean", + "description": "Show analytical details in preview", + "nullable": true + }, + "show_debug": { + "type": "boolean", + "description": "Show debug info in preview", + "nullable": true } }, "x-looker-status": "beta" @@ -45454,6 +46588,21 @@ "description": "Git target URL of the CI run", "nullable": true }, + "dbt_cloud_git_branch_name": { + "type": "string", + "description": "Git branch name in dbt Cloud", + "nullable": true + }, + "dbt_cloud_git_commit_ref": { + "type": "string", + "description": "Git commit ref in dbt Cloud", + "nullable": true + }, + "dbt_cloud_git_repository_name": { + "type": "string", + "description": "Git repository name in dbt Cloud", + "nullable": true + }, "created_at": { "type": "string", "format": "date-time", @@ -45517,9 +46666,19 @@ "readOnly": true, "description": "User attributes for the CI run", "nullable": true + }, + "project_imports": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "readOnly": true, + "description": "Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run", + "nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIGenericError": { "properties": { @@ -45549,7 +46708,7 @@ "nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIRunResult": { "properties": { @@ -45577,11 +46736,17 @@ "lookml_error": { "$ref": "#/components/schemas/CIGenericError" }, + "style_result": { + "$ref": "#/components/schemas/CIStyleValidatorResult" + }, + "style_error": { + "$ref": "#/components/schemas/CIGenericError" + }, "generic_error": { "$ref": "#/components/schemas/CIGenericError" } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorResult": { "properties": { @@ -45604,7 +46769,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorTestedExplore": { "properties": { @@ -45656,7 +46821,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorTestSuccess": { "properties": { @@ -45686,7 +46851,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorErrorItem": { "properties": { @@ -45697,7 +46862,7 @@ "$ref": "#/components/schemas/CIGenericError" } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIAssertValidatorTestError": { "properties": { @@ -45732,7 +46897,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIContentValidatorResult": { "properties": { @@ -45760,7 +46925,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIContentValidatorTestedExplore": { "properties": { @@ -45799,7 +46964,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIContentValidatorErrorItem": { "properties": { @@ -45810,7 +46975,7 @@ "$ref": "#/components/schemas/CIGenericError" } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CIContentValidatorContentError": { "properties": { @@ -45885,7 +47050,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CILookMLValidatorResult": { "properties": { @@ -45914,7 +47079,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CILookMLValidatorErrorItem": { "properties": { @@ -45925,7 +47090,7 @@ "$ref": "#/components/schemas/CIGenericError" } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CILookMLValidatorError": { "properties": { @@ -45995,7 +47160,7 @@ "nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CISqlValidatorResult": { "properties": { @@ -46023,7 +47188,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CISqlValidatorTestedExplore": { "properties": { @@ -46062,7 +47227,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CISqlValidatorErrorItem": { "properties": { @@ -46073,7 +47238,7 @@ "$ref": "#/components/schemas/CIGenericError" } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CISqlValidatorError": { "properties": { @@ -46138,7 +47303,173 @@ "nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" + }, + "CIStyleValidatorResult": { + "properties": { + "name": { + "type": "string", + "description": "Name of the validator (style)", + "nullable": false + }, + "incremental": { + "type": "boolean", + "description": "Whether the validation was incremental", + "nullable": true + }, + "status": { + "type": "string", + "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", + "nullable": false + }, + "error_count": { + "type": "integer", + "format": "int64", + "description": "Total number of failed style validations", + "nullable": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CIStyleValidatorErrorItem" + }, + "description": "Details of the LookML that failed style validation", + "nullable": false + } + }, + "x-looker-status": "stable" + }, + "CIStyleValidatorErrorItem": { + "properties": { + "style_error": { + "$ref": "#/components/schemas/CIStyleValidatorError" + }, + "generic_error": { + "$ref": "#/components/schemas/CIGenericError" + } + }, + "x-looker-status": "stable" + }, + "CIStyleValidatorError": { + "properties": { + "type": { + "type": "string", + "description": "A URI reference that identifies the problem type", + "nullable": false + }, + "title": { + "type": "string", + "description": "Overview of the error", + "nullable": false + }, + "detail": { + "type": "string", + "description": "Detail of the error", + "nullable": false + }, + "status": { + "type": "string", + "description": "The HTTP status code for the problem", + "nullable": true + }, + "instance": { + "type": "string", + "description": "URI reference that identifies the specific occurrence of the problem", + "nullable": true + }, + "model": { + "type": "string", + "description": "LookML model that contains the error", + "nullable": true + }, + "explore": { + "type": "string", + "description": "LookML Explore that contains the error", + "nullable": true + }, + "field_name": { + "type": "string", + "description": "LookML field that caused the error", + "nullable": true + }, + "message": { + "type": "string", + "description": "Message returned by the style validator", + "nullable": true + }, + "severity": { + "type": "string", + "description": "Severity of the error (warning, error, fatal, info, success)", + "nullable": true + }, + "line_number": { + "type": "integer", + "format": "int64", + "description": "Line number of the error in the LookML file", + "nullable": true + }, + "character": { + "type": "integer", + "format": "int64", + "description": "Character offset of the error in the LookML file", + "nullable": true + }, + "lookml_url": { + "type": "string", + "description": "URL to the LookML that caused the error", + "nullable": true + }, + "file_path": { + "type": "string", + "description": "IDE folder path to the LookML file that caused the error", + "nullable": true + }, + "rule_name": { + "type": "string", + "description": "Name of the style rule", + "nullable": true + }, + "entity_type": { + "type": "string", + "description": "Type of LookML entity evaluated", + "nullable": true + }, + "entity_name": { + "type": "string", + "description": "Name of LookML entity evaluated", + "nullable": true + }, + "is_incremental": { + "type": "boolean", + "description": "Whether the error was newly introduced", + "nullable": true + }, + "error_id": { + "type": "string", + "description": "Deterministic fingerprint of the violation", + "nullable": true + }, + "documentation_url": { + "type": "string", + "description": "URL to documentation for the style rule", + "nullable": true + }, + "context": { + "type": "array", + "items": { + "type": "string" + }, + "description": "LookML source code snippet lines surrounding the error", + "nullable": true + }, + "context_line_number": { + "type": "integer", + "format": "int64", + "description": "Line number where the context code snippet begins", + "nullable": true + } + }, + "x-looker-status": "stable" }, "CIRunUserAttribute": { "properties": { @@ -46159,7 +47490,7 @@ "nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "UserAttributeOverride": { "properties": { @@ -46174,7 +47505,7 @@ "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "CreateContinuousIntegrationRunRequest": { "properties": { @@ -46200,9 +47531,18 @@ }, "description": "User attributes to override for the CI run.", "nullable": true + }, + "project_imports": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "description": "Map of upstream project names to commit SHAs or git configurations to pin for the CI run.", + "nullable": true } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, "ColorStop": { "properties": { @@ -46589,6 +47929,12 @@ "readOnly": true, "description": "Name of the parent folder of the content", "nullable": true + }, + "parent_project_name": { + "type": "string", + "readOnly": true, + "description": "Name of the parent project of the content", + "nullable": true } }, "x-looker-status": "beta" @@ -47421,44 +48767,6 @@ }, "x-looker-status": "beta" }, - "CreateCIRunRequest": { - "properties": { - "suite_id": { - "type": "string", - "description": "ID of the CI suite", - "nullable": false - }, - "branch": { - "type": "string", - "description": "Branch that the CI run should validate. Omit to test production.", - "nullable": true - }, - "commit": { - "type": "string", - "format": "uri-reference", - "description": "Commit that the CI run should validate. Omit to test production.", - "nullable": true - } - }, - "x-looker-status": "beta" - }, - "CreateCIRunResponse": { - "properties": { - "run_id": { - "type": "string", - "readOnly": true, - "description": "ID of the CI run", - "nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running)", - "nullable": false - } - }, - "x-looker-status": "beta" - }, "CreateEmbedUserRequest": { "properties": { "external_user_id": { @@ -48385,6 +49693,47 @@ "type": "boolean", "description": "Whether to modernize visualizations on this dashboard", "nullable": true + }, + "show_dashboard_header": { + "type": "boolean", + "description": "Toggle to show dashboard header. Defaults to true.", + "nullable": true + }, + "show_title": { + "type": "boolean", + "description": "Toggle to show dashboard title. Defaults to true.", + "nullable": true + }, + "show_filters_bar": { + "type": "boolean", + "description": "Toggle to show filters bar. Defaults to true.", + "nullable": true + }, + "show_filters_toggle": { + "type": "boolean", + "description": "Toggle to show filters toggle button. Defaults to true.", + "nullable": true + }, + "show_reload_data_icon": { + "type": "boolean", + "description": "Toggle to show reload data icon/button. Defaults to true.", + "nullable": true + }, + "show_dashboard_menu": { + "type": "boolean", + "description": "Toggle to show dashboard actions menu. Defaults to true.", + "nullable": true + }, + "show_last_updated_indicator": { + "type": "boolean", + "description": "Toggle to show last updated indicator. Defaults to true.", + "nullable": true + }, + "background_opacity": { + "type": "number", + "format": "float", + "description": "Background image opacity (0.0 to 1.0)", + "nullable": true } }, "x-looker-status": "stable" @@ -48422,6 +49771,11 @@ "format": "int64", "description": "Columns limit", "nullable": true + }, + "append_excel_metadata": { + "type": "boolean", + "description": "Append Excel metadata", + "nullable": true } }, "x-looker-status": "stable" @@ -48458,6 +49812,12 @@ "description": "Id of Dashboard Layout", "nullable": true }, + "group_id": { + "type": "string", + "readOnly": true, + "description": "ID of the group to place this element under in the layout", + "nullable": true + }, "edit_uri": { "type": "string", "format": "uri-reference", @@ -48605,6 +49965,20 @@ }, "certification_metadata": { "$ref": "#/components/schemas/Certification" + }, + "image_id": { + "type": "string", + "description": "ID of Dashboard Image", + "nullable": true + }, + "images": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Image" + }, + "readOnly": true, + "description": "Images", + "nullable": true } }, "x-looker-status": "stable" @@ -48910,6 +50284,11 @@ "format": "int64", "description": "Height (granular layout)", "nullable": true + }, + "group_id": { + "type": "string", + "description": "Id of parent Dashboard Layout Component group", + "nullable": true } }, "x-looker-status": "stable" @@ -49330,6 +50709,11 @@ "description": "Relative URL of the dashboard", "nullable": true }, + "layout_granularity": { + "type": "string", + "description": "The layout granularity to apply to this dashboard (ie: default or granular)", + "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.", @@ -49613,6 +50997,11 @@ "readOnly": true, "description": "True if PDTs are enabled on this connection", "nullable": false + }, + "project_id": { + "type": "string", + "description": "ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified.", + "nullable": true } }, "x-looker-status": "stable" @@ -49651,6 +51040,11 @@ "description": "True if PDTs are enabled on this connection", "nullable": false }, + "project_id": { + "type": "string", + "description": "ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified.", + "nullable": true + }, "named_driver_version_requested": { "type": "string", "description": "Requested JDBC driver version name", @@ -49689,6 +51083,11 @@ "description": "Whether or not the password is present", "nullable": false }, + "service_account_auth_enabled": { + "type": "boolean", + "description": "Whether Service Account OAuth authentication is enabled for this connection", + "nullable": false + }, "uses_oauth": { "type": "boolean", "readOnly": true, @@ -49718,6 +51117,11 @@ "description": "(Write-Only) Base64 encoded Certificate body for server authentication (when appropriate for dialect).", "nullable": true }, + "user_attr_certificate": { + "type": "string", + "description": "The name of the user attribute containing the connection certificate.", + "nullable": true + }, "file_type": { "type": "string", "x-looker-write-only": true, @@ -50324,6 +51728,12 @@ "description": "Disable this connection. This will prevent any queries from running on this connection.", "nullable": false }, + "query_holding_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Disable query holding for this connection.", + "nullable": false + }, "disable_context_comment": { "type": "boolean", "readOnly": true, @@ -50431,6 +51841,12 @@ "readOnly": true, "description": "Has support for connection pooling", "nullable": false + }, + "user_attribute_certificate": { + "type": "boolean", + "readOnly": true, + "description": "Has user attribute certificate support", + "nullable": false } }, "x-looker-status": "stable" @@ -50609,6 +52025,12 @@ "description": "Is embed content management enabled for this Looker", "nullable": false }, + "embed_vis_modernization_default": { + "type": "boolean", + "readOnly": true, + "description": "Default net new visualizations in embedded context to Modern theme", + "nullable": false + }, "strict_sameorigin_for_login": { "type": "boolean", "description": "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.", @@ -52256,148 +53678,6 @@ }, "x-looker-status": "stable" }, - "GitDiagnosticIssue": { - "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": "string", - "readOnly": true, - "description": "Unique ID of the diagnostic issue.", - "nullable": false - }, - "report_id": { - "type": "string", - "readOnly": true, - "description": "Parent diagnostic report ID.", - "nullable": true - }, - "project_id": { - "type": "string", - "readOnly": true, - "description": "Target Looker Project ID.", - "nullable": true - }, - "project_type": { - "type": "string", - "readOnly": true, - "description": "Environment scope (developer/production).", - "nullable": true - }, - "issue_type": { - "type": "string", - "readOnly": true, - "description": "Git diagnostic issue category.", - "nullable": true - }, - "issue_version": { - "type": "string", - "readOnly": true, - "description": "Version schema.", - "nullable": true - }, - "state": { - "type": "string", - "readOnly": true, - "description": "Current execution status.", - "nullable": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Creation timestamp.", - "nullable": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Last update timestamp.", - "nullable": true - } - }, - "x-looker-status": "beta" - }, - "GitDiagnosticReport": { - "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": "string", - "readOnly": true, - "description": "Unique ID of the git diagnostic report.", - "nullable": false - }, - "project_id": { - "type": "string", - "readOnly": true, - "description": "Target Looker Project ID.", - "nullable": true - }, - "user_id": { - "type": "string", - "readOnly": true, - "description": "ID of the user initiating the diagnosis.", - "nullable": true - }, - "state": { - "type": "string", - "readOnly": true, - "description": "Raw lifecycle state.", - "nullable": true - }, - "status": { - "type": "string", - "readOnly": true, - "description": "Status derived from state.", - "nullable": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Creation time.", - "nullable": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Update time.", - "nullable": true - }, - "project_type": { - "type": "string", - "description": "Project structure type.", - "nullable": true - }, - "issues": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GitDiagnosticIssue" - }, - "readOnly": true, - "description": "Diagnostic issues associated with this report.", - "nullable": true - } - }, - "x-looker-status": "beta" - }, "GitStatus": { "properties": { "action": { @@ -52467,6 +53747,7 @@ }, "is_active": { "type": "boolean", + "readOnly": true, "description": "Whether this golden question should be utilized by the agent", "nullable": false }, @@ -52548,6 +53829,21 @@ "readOnly": true, "description": "Client ID of the associated Looker Query", "nullable": true + }, + "pivots": { + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true, + "description": "Pivots of the associated Looker Query", + "nullable": true + }, + "dynamic_fields": { + "type": "string", + "readOnly": true, + "description": "Dynamic fields of the associated Looker Query", + "nullable": true } }, "x-looker-status": "beta" @@ -52784,6 +54080,63 @@ }, "x-looker-status": "stable" }, + "Image": { + "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": "string", + "readOnly": true, + "description": "Unique Id", + "nullable": false + }, + "file_name": { + "type": "string", + "readOnly": true, + "description": "Original file name", + "nullable": true + }, + "format": { + "type": "string", + "readOnly": true, + "description": "Image format (e.g. PNG, JPG)", + "nullable": true + }, + "label": { + "type": "string", + "description": "Accessibility label", + "nullable": true + }, + "url": { + "type": "string", + "readOnly": true, + "description": "URL of the image", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Creation timestamp", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Update timestamp", + "nullable": true + } + }, + "x-looker-status": "stable" + }, "ImportedProject": { "properties": { "name": { @@ -56663,6 +58016,9 @@ "get_explores": { "$ref": "#/components/schemas/McpToolSetting" }, + "get_field_value_suggestions": { + "$ref": "#/components/schemas/McpToolSetting" + }, "get_filters": { "$ref": "#/components/schemas/McpToolSetting" }, @@ -56740,6 +58096,12 @@ }, "create_view_from_table": { "$ref": "#/components/schemas/McpToolSetting" + }, + "render_visualization": { + "$ref": "#/components/schemas/McpToolSetting" + }, + "render_dashboard": { + "$ref": "#/components/schemas/McpToolSetting" } }, "x-looker-status": "stable" @@ -57005,7 +58367,16 @@ }, "redirect_uri": { "type": "string", - "description": "The uri with which this application will receive an auth code by browser redirect.", + "deprecated": true, + "description": "(DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead)", + "nullable": false + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The authorized uris for which this application will receive an auth code by browser redirect.", "nullable": false }, "display_name": { @@ -57518,7 +58889,7 @@ }, "x-looker-status": "stable" }, - "ProjectFile": { + "ProjectCISuite": { "properties": { "can": { "type": "object", @@ -57532,1076 +58903,534 @@ "id": { "type": "string", "readOnly": true, - "description": "An opaque token uniquely identifying a file within a project. Avoid parsing or decomposing the text of this token. This token is stable within a Looker release but may change between Looker releases", - "nullable": false - }, - "path": { - "type": "string", - "readOnly": true, - "description": "Path, file name, and extension of the file relative to the project root directory", + "description": "ID of the CI suite", "nullable": true }, - "title": { + "name": { "type": "string", - "readOnly": true, - "description": "Display name", + "description": "Name of the CI suite", "nullable": true }, - "type": { + "project_id": { "type": "string", "readOnly": true, - "description": "File type: model, view, etc", + "description": "ID of the LookML project", "nullable": true }, - "extension": { + "created_at": { "type": "string", + "format": "date-time", "readOnly": true, - "description": "The extension of the file: .view.lkml, .model.lkml, etc", + "description": "Time and date that the CI suite was created", "nullable": true }, - "mime_type": { + "updated_at": { "type": "string", + "format": "date-time", "readOnly": true, - "description": "File mime type", + "description": "Time and date that the CI suite was updated", "nullable": true }, - "editable": { - "type": "boolean", - "readOnly": true, - "description": "State of editability for the file.", - "nullable": false - }, - "git_status": { - "$ref": "#/components/schemas/GitStatus" - } - }, - "x-looker-status": "stable" - }, - "Project": { - "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": "string", - "readOnly": true, - "description": "Project Id", - "nullable": false - }, - "name": { - "type": "string", - "description": "Project display name", - "nullable": false - }, - "uses_git": { - "type": "boolean", - "readOnly": true, - "description": "If true the project is configured with a git repository", - "nullable": false - }, - "is_git_dev_locked": { + "schedule_trigger_is_enabled": { "type": "boolean", - "readOnly": true, - "description": "If true, the project git repository is locked.", - "nullable": false - }, - "git_remote_url": { - "type": "string", - "description": "Git remote repository url", + "description": "Whether the CI suite schedule trigger is active", "nullable": true }, - "git_username": { + "schedule_trigger_crontab": { "type": "string", - "description": "Git username for HTTPS authentication. (For production only, if using user attributes.)", + "description": "Crontab that the CI suite is scheduled to run", "nullable": true }, - "git_password": { + "schedule_trigger_timezone": { "type": "string", - "x-looker-write-only": true, - "description": "(Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.)", + "description": "Timezone for the CI suite schedule", "nullable": true }, - "git_production_branch_name": { - "type": "string", - "description": "Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher.", - "nullable": false - }, - "use_git_cookie_auth": { + "alerting_enabled": { "type": "boolean", - "description": "If true, the project uses a git cookie for authentication.", - "nullable": false - }, - "git_username_user_attribute": { - "type": "string", - "description": "User attribute name for username in per-user HTTPS authentication.", - "nullable": true - }, - "git_password_user_attribute": { - "type": "string", - "description": "User attribute name for password in per-user HTTPS authentication.", - "nullable": true - }, - "git_service_name": { - "type": "string", - "description": "Name of the git service provider", - "nullable": true - }, - "git_application_server_http_port": { - "type": "integer", - "format": "int64", - "description": "Port that HTTP(S) application server is running on (for PRs, file browsing, etc.)", + "description": "Whether alerting is enabled for the CI suite", "nullable": true }, - "git_application_server_http_scheme": { - "type": "string", - "description": "Scheme that is running on application server (for PRs, file browsing, etc.)", - "nullable": true - }, - "deploy_secret": { - "type": "string", - "x-looker-write-only": true, - "description": "(Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated.", + "alert_email_addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Email addresses to send alerts to", "nullable": true }, - "unset_deploy_secret": { + "alert_on_failed_status": { "type": "boolean", - "x-looker-write-only": true, - "description": "(Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint.", - "nullable": false - }, - "pull_request_mode": { - "type": "string", - "enum": [ - "off", - "links", - "recommended", - "required" - ], - "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", - "nullable": false - }, - "validation_required": { - "type": "boolean", - "description": "Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository", - "nullable": false + "description": "Whether to alert on failed status", + "nullable": true }, - "git_release_mgmt_enabled": { + "alert_on_error_status": { "type": "boolean", - "description": "If true, advanced git release management is enabled for this project", - "nullable": false + "description": "Whether to alert on error status", + "nullable": true }, - "allow_warnings": { + "alert_on_passed_status": { "type": "boolean", - "description": "Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false).", - "nullable": false + "description": "Whether to alert on passed status", + "nullable": true }, - "is_example": { + "alert_on_cancelled_status": { "type": "boolean", - "readOnly": true, - "description": "If true the project is an example project and cannot be modified", - "nullable": false + "description": "Whether to alert on cancelled status", + "nullable": true }, - "has_production_counterpart": { + "change_request_trigger_is_enabled": { "type": "boolean", - "readOnly": true, - "description": "If true the project has been pushed to production.", - "nullable": false - }, - "dependency_status": { - "type": "string", - "description": "Status of dependencies in your manifest & lockfile", + "description": "Whether the CI suite change request trigger is active", "nullable": true - } - }, - "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": { + "change_request_trigger_hook_id": { "type": "string", "readOnly": true, - "description": "Error message if the deploy failed", + "description": "ID of the hook that triggers the CI Suite to run", "nullable": true }, - "commit_sha": { + "change_request_trigger_target_branch": { "type": "string", - "readOnly": true, - "description": "Commit SHA of the deployment", + "description": "Git branch that should be compared against when the CI suite is run, used when the run is incremental", "nullable": true - } - }, - "x-looker-status": "beta" - }, - "ProjectRun": { - "properties": { - "run": { - "$ref": "#/components/schemas/Run" - } - }, - "x-looker-status": "beta" - }, - "Run": { - "properties": { - "run_id": { - "type": "string", - "readOnly": true, - "description": "ID of the CI run", - "nullable": false }, - "created_at": { + "guid": { "type": "string", - "format": "date-time", "readOnly": true, - "description": "Time and date that the CI run was initiated", - "nullable": false - }, - "started_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Time and date that the CI run began executing", + "description": "GUID of the CI suite", "nullable": true }, - "finished_at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "description": "Time and date that the CI run completed", + "dbt_cloud_trigger_is_enabled": { + "type": "boolean", + "description": "Whether the CI suite dbt Cloud trigger is active", "nullable": true }, - "status_url": { - "type": "string", - "format": "uri-reference", - "readOnly": true, - "description": "Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite", + "dbt_cloud_trigger_job_id": { + "type": "integer", + "format": "int64", + "description": "Job ID of the dbt Cloud job", "nullable": true }, - "status": { + "dbt_cloud_trigger_user_attribute_id": { "type": "string", - "readOnly": true, - "description": "Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running)", - "nullable": false - }, - "git_service": { - "type": "string", - "readOnly": true, - "description": "Git service for CI run (e.g. GitHub)", + "description": "User Attribute ID used for schema substitution", "nullable": true }, - "git_state": { - "$ref": "#/components/schemas/CIGitState" - }, - "result": { - "$ref": "#/components/schemas/RunResult" - }, - "schedule": { - "$ref": "#/components/schemas/CIScheduleTrigger" - }, - "target_branch": { + "dbt_cloud_webhook_id": { "type": "string", "readOnly": true, - "description": "Git branch that the CI run compares against during validation, used for incremental runs", + "description": "Webhook ID registered in dbt Cloud", "nullable": true }, - "title": { - "type": "string", - "readOnly": true, - "description": "Name of the CI suite", - "nullable": false - }, - "trigger": { + "webhook_secret": { "type": "string", - "readOnly": true, - "description": "Trigger for CI run (unknown, manual, schedule, change_request)", - "nullable": false - }, - "change_request": { - "$ref": "#/components/schemas/CIChangeRequest" + "x-looker-write-only": true, + "description": "(Write-Only) Webhook secret used to authenticate incoming webhook requests", + "nullable": true }, - "suite_id": { - "type": "string", + "has_webhook_secret": { + "type": "boolean", "readOnly": true, - "description": "ID of the CI suite", + "description": "Whether the CI suite has a webhook secret configured", "nullable": false }, - "username": { - "type": "string", - "readOnly": true, - "description": "Username of the user who triggered the CI run, if the CI run was manually triggered", - "nullable": true - } - }, - "x-looker-status": "beta" - }, - "CIGitState": { - "properties": { - "branch": { - "type": "string", - "readOnly": true, - "description": "Git branch that the CI run validates", + "assert_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether assert validation is enabled for the CI suite", "nullable": true }, - "repository": { - "type": "string", - "readOnly": true, - "description": "Git repository that contains the Git branch being validated", + "assert_validator_config_concurrency": { + "type": "integer", + "format": "int64", + "description": "Number of tests that should run concurrently during assert validation", "nullable": true }, - "commit_ref": { - "type": "string", - "readOnly": true, - "description": "Git commit that the CI run validates", + "assert_validator_config_selectors": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Explores that assert validation should run for (model_name/explore_name)", "nullable": true }, - "target": { - "type": "string", - "readOnly": true, - "description": "For incremental runs, the Git branch that the CI run compares against during validation", + "assert_validator_config_exclusions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Explores that should be excluded from assert validation (model_name/explore_name)", "nullable": true - } - }, - "x-looker-status": "beta" - }, - "CIScheduleTrigger": { - "properties": { - "enabled": { - "type": "boolean", - "readOnly": true, - "description": "Whether the CI run schedule is active", - "nullable": false }, - "day": { - "type": "string", - "readOnly": true, - "description": "For scheduled runs, day of the week that the CI run is scheduled", + "content_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether content validation is enabled for the CI suite", "nullable": true }, - "hour": { - "type": "string", - "readOnly": true, - "description": "For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled", + "content_validator_config_exclude_personal": { + "type": "boolean", + "description": "Whether content validation should ignore personal folders", "nullable": true }, - "frequency": { - "type": "string", - "readOnly": true, - "description": "For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly)", - "nullable": false - } - }, - "x-looker-status": "beta" - }, - "CIChangeRequest": { - "properties": { - "change_request_number": { - "type": "integer", - "format": "int64", - "readOnly": true, - "description": "Numeric identifier of the change request", - "nullable": false - }, - "change_request_url": { - "type": "string", - "format": "uri-reference", - "readOnly": true, - "description": "URL of the change request", - "nullable": false - }, - "change_request_name": { - "type": "string", - "readOnly": true, - "description": "Name of the change request", - "nullable": false - }, - "change_request_commits_url": { - "type": "string", - "format": "uri-reference", - "readOnly": true, - "description": "For PR-triggered CI runs, the URL to the change request commit that triggered the run.", - "nullable": false - } - }, - "x-looker-status": "beta" - }, - "GenericError": { - "properties": { - "type": { - "type": "string", - "readOnly": true, - "description": "A URI reference that identifies the problem type", - "nullable": false - }, - "title": { - "type": "string", - "readOnly": true, - "description": "Overview of the error", - "nullable": false - }, - "detail": { - "type": "string", - "readOnly": true, - "description": "Detail of the error", - "nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "The HTTP status code for the problem", + "content_validator_config_incremental": { + "type": "boolean", + "description": "Whether content should validate incrementally", "nullable": true }, - "instance": { - "type": "string", - "readOnly": true, - "description": "URI reference that identifies the specific occurrence of the problem", + "content_validator_config_exclude_folders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Folders whose content should not be validated", "nullable": true - } - }, - "x-looker-status": "beta" - }, - "RunResult": { - "properties": { - "sql_result": { - "$ref": "#/components/schemas/SqlValidatorResult" - }, - "sql_error": { - "$ref": "#/components/schemas/GenericError" - }, - "assert_result": { - "$ref": "#/components/schemas/AssertValidatorResult" - }, - "assert_error": { - "$ref": "#/components/schemas/GenericError" - }, - "content_result": { - "$ref": "#/components/schemas/ContentValidatorResult" - }, - "content_error": { - "$ref": "#/components/schemas/GenericError" - }, - "lookml_result": { - "$ref": "#/components/schemas/LookMLValidatorResult" - }, - "lookml_error": { - "$ref": "#/components/schemas/GenericError" - }, - "generic_error": { - "$ref": "#/components/schemas/GenericError" - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorResult": { - "properties": { - "name": { - "type": "string", - "readOnly": true, - "description": "Name of the validator (assert)", - "nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", - "nullable": false }, - "results": { + "content_validator_config_include_folders": { "type": "array", "items": { - "$ref": "#/components/schemas/AssertValidatorTestedExplore" + "type": "string" }, - "readOnly": true, - "description": "Results of the validation", - "nullable": false - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorTestedExplore": { - "properties": { - "error_count": { - "type": "integer", - "format": "int64", - "readOnly": true, - "description": "Total number of failed data tests", + "description": "Folders whose content should be validated", "nullable": true }, - "errors": { + "content_validator_config_selectors": { "type": "array", "items": { - "$ref": "#/components/schemas/AssertValidatorErrorItem" + "type": "string" }, - "readOnly": true, - "description": "Details of data tests that failed validation", - "nullable": false - }, - "success_count": { - "type": "string", - "readOnly": true, - "description": "Total number of successful data tests", - "nullable": false + "description": "Explores whose content should be validated (model_name/explore_name)", + "nullable": true }, - "successes": { + "content_validator_config_exclusions": { "type": "array", "items": { - "$ref": "#/components/schemas/AssertValidatorTestSuccess" + "type": "string" }, - "readOnly": true, - "description": "Details of data tests that passed validation", - "nullable": false - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorTestSuccess": { - "properties": { - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that contains the data test", - "nullable": false - }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that is used as the explore_source for the data test", - "nullable": false - }, - "test_name": { - "type": "string", - "readOnly": true, - "description": "Name of the data test", - "nullable": false + "description": "Explores that should be excluded from content validation (model_name/explore_name)", + "nullable": true }, - "explore_url": { - "type": "string", - "readOnly": true, - "description": "URL to the Explore", - "nullable": false + "lookml_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether LookML validation is enabled for the CI suite", + "nullable": true }, - "lookml_url": { + "lookml_validator_config_severity": { "type": "string", - "readOnly": true, - "description": "URL to the LookML file where the data test is defined", - "nullable": false - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorErrorItem": { - "properties": { - "assert_error": { - "$ref": "#/components/schemas/AssertValidatorTestError" + "description": "Severity of the error that the LookML validator should report (warning, error, fatal, info, success)", + "nullable": true }, - "generic_error": { - "$ref": "#/components/schemas/GenericError" - } - }, - "x-looker-status": "beta" - }, - "AssertValidatorTestError": { - "properties": { - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that contains the data test", - "nullable": false + "lookml_validator_config_timeout": { + "type": "integer", + "format": "int64", + "description": "Amount of time after which LookML Validation should stop running", + "nullable": true }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that is used as the explore_source for the data test", - "nullable": false + "style_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether LookML Style Validator is enabled for the CI suite", + "nullable": true }, - "test_name": { - "type": "string", - "readOnly": true, - "description": "Name of the data test", - "nullable": false + "style_validator_config_incremental": { + "type": "boolean", + "description": "Whether LookML Style Validator should run incrementally on changed LookML files only", + "nullable": true }, - "explore_url": { - "type": "string", - "readOnly": true, - "description": "URL to the Explore", - "nullable": false + "sql_validator_config_is_enabled": { + "type": "boolean", + "description": "Whether SQL validation is enabled for the CI suite", + "nullable": true }, - "lookml_url": { - "type": "string", - "readOnly": true, - "description": "URL to the LookML file where the data test is defined", - "nullable": false + "sql_validator_config_fail_fast": { + "type": "boolean", + "description": "Whether SQL validation should stop after the first failure", + "nullable": true }, - "message": { - "type": "string", - "readOnly": true, - "description": "Message returned by the data test", - "nullable": false - } - }, - "x-looker-status": "beta" - }, - "ContentValidatorResult": { - "properties": { - "name": { - "type": "string", - "readOnly": true, - "description": "Name of the validator (content)", - "nullable": false + "sql_validator_config_incremental": { + "type": "boolean", + "description": "Whether SQL should validate incrementally", + "nullable": true }, - "incremental": { + "sql_validator_config_ignore_hidden": { "type": "boolean", - "readOnly": true, - "description": "Whether the validation was incremental", - "nullable": false + "description": "Whether SQL validation should ignore hidden fields", + "nullable": true }, - "status": { - "type": "string", - "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", - "nullable": false + "sql_validator_config_query_concurrency": { + "type": "integer", + "format": "int64", + "description": "Number of queries that should run concurrently during SQL validation", + "nullable": true }, - "result": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ContentValidatorTestedExplore" - }, - "readOnly": true, - "description": "Results of the content validation", - "nullable": false - } - }, - "x-looker-status": "beta" - }, - "ContentValidatorTestedExplore": { - "properties": { - "error_count": { + "sql_validator_config_chunk_size": { "type": "integer", "format": "int64", - "readOnly": true, - "description": "Total number of failed content validations", + "description": "The max number of rows that should be returned for each query", "nullable": true }, - "errors": { + "sql_validator_config_selectors": { "type": "array", "items": { - "$ref": "#/components/schemas/ContentValidatorErrorItem" + "type": "string" }, - "readOnly": true, - "description": "Details of the content that failed validation", - "nullable": false - } - }, - "x-looker-status": "beta" - }, - "ContentValidatorErrorItem": { - "properties": { - "content_error": { - "$ref": "#/components/schemas/ContentValidatorContentError" - }, - "generic_error": { - "$ref": "#/components/schemas/GenericError" - } - }, - "x-looker-status": "beta" - }, - "ContentValidatorContentError": { - "properties": { - "type": { - "type": "string", - "readOnly": true, - "description": "A URI reference that identifies the problem type", - "nullable": false - }, - "title": { - "type": "string", - "readOnly": true, - "description": "Overview of the error", - "nullable": false - }, - "detail": { - "type": "string", - "readOnly": true, - "description": "Detail of the error", - "nullable": false - }, - "status": { - "type": "string", - "readOnly": true, - "description": "The HTTP status code for the problem", + "description": "Explores whose sql should be validated (model_name/explore_name)", "nullable": true }, - "instance": { - "type": "string", - "readOnly": true, - "description": "URI reference that identifies the specific occurrence of the problem", + "sql_validator_config_exclusions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Explores that should be excluded from SQL validation (model_name/explore_name)", "nullable": true }, - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that contains the error", + "upstream_trigger_is_enabled": { + "type": "boolean", + "description": "Whether the CI suite upstream project imports trigger is active", "nullable": true }, - "explore": { - "type": "string", + "upstream_projects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Names of upstream projects subscribed for pull request triggers", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ProjectFile": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, "readOnly": true, - "description": "LookML Explore that contains the error", - "nullable": true + "description": "Operations the current user is able to perform on this object", + "nullable": false }, - "field_name": { + "id": { "type": "string", "readOnly": true, - "description": "LookML field that caused the error", + "description": "An opaque token uniquely identifying a file within a project. Avoid parsing or decomposing the text of this token. This token is stable within a Looker release but may change between Looker releases", "nullable": false }, - "content_type": { + "path": { "type": "string", "readOnly": true, - "description": "Type of the content (dashboard, look)", - "nullable": false + "description": "Path, file name, and extension of the file relative to the project root directory", + "nullable": true }, - "folder": { + "title": { "type": "string", "readOnly": true, - "description": "Folder of the content", + "description": "Display name", "nullable": true }, - "url": { + "type": { "type": "string", "readOnly": true, - "description": "URL of the content", - "nullable": false + "description": "File type: model, view, etc", + "nullable": true }, - "tile_type": { + "extension": { "type": "string", "readOnly": true, - "description": "Type of the tile (dashboard_element, dashboard_filter)", + "description": "The extension of the file: .view.lkml, .model.lkml, etc", "nullable": true }, - "tile_title": { + "mime_type": { "type": "string", "readOnly": true, - "description": "Title of the tile", + "description": "File mime type", "nullable": true }, - "message": { - "type": "string", + "editable": { + "type": "boolean", "readOnly": true, - "description": "Message returned by the content validator", + "description": "State of editability for the file.", "nullable": false + }, + "git_status": { + "$ref": "#/components/schemas/GitStatus" } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, - "LookMLValidatorResult": { + "Project": { "properties": { - "name": { - "type": "string", + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, "readOnly": true, - "description": "Name of the validator (lookml)", + "description": "Operations the current user is able to perform on this object", "nullable": false }, - "status": { + "id": { "type": "string", "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", - "nullable": false - }, - "error_count": { - "type": "integer", - "format": "int64", - "readOnly": true, - "description": "Total number of failed LookML validations", - "nullable": true - }, - "errors": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LookMLValidatorErrorItem" - }, - "readOnly": true, - "description": "Details of the LookML that failed validation", + "description": "Project Id", "nullable": false - } - }, - "x-looker-status": "beta" - }, - "LookMLValidatorErrorItem": { - "properties": { - "lookml_error": { - "$ref": "#/components/schemas/LookMLValidatorError" }, - "generic_error": { - "$ref": "#/components/schemas/GenericError" - } - }, - "x-looker-status": "beta" - }, - "LookMLValidatorError": { - "properties": { - "type": { + "name": { "type": "string", - "readOnly": true, - "description": "A URI reference that identifies the problem type", + "description": "Project display name", "nullable": false }, - "title": { - "type": "string", + "uses_git": { + "type": "boolean", "readOnly": true, - "description": "Overview of the error", + "description": "If true the project is configured with a git repository", "nullable": false }, - "detail": { - "type": "string", + "is_git_dev_locked": { + "type": "boolean", "readOnly": true, - "description": "Detail of the error", + "description": "If true, the project git repository is locked.", "nullable": false }, - "status": { + "git_remote_url": { "type": "string", - "readOnly": true, - "description": "The HTTP status code for the problem", + "description": "Git remote repository url", "nullable": true }, - "instance": { + "git_username": { "type": "string", - "readOnly": true, - "description": "URI reference that identifies the specific occurrence of the problem", + "description": "Git username for HTTPS authentication. (For production only, if using user attributes.)", "nullable": true }, - "model": { + "git_password": { "type": "string", - "readOnly": true, - "description": "LookML model that contains the error", + "x-looker-write-only": true, + "description": "(Write-Only) Git password for HTTPS authentication. (For production only, if using user attributes.)", "nullable": true }, - "explore": { + "git_production_branch_name": { "type": "string", - "readOnly": true, - "description": "LookML Explore that contains the error", - "nullable": true + "description": "Git production branch name. Defaults to master. Supported only in Looker 21.0 and higher.", + "nullable": false }, - "field_name": { + "use_git_cookie_auth": { + "type": "boolean", + "description": "If true, the project uses a git cookie for authentication.", + "nullable": false + }, + "git_username_user_attribute": { "type": "string", - "readOnly": true, - "description": "LookML field that caused the error", + "description": "User attribute name for username in per-user HTTPS authentication.", "nullable": true }, - "message": { + "git_password_user_attribute": { "type": "string", - "readOnly": true, - "description": "Message returned by the LookML validator", + "description": "User attribute name for password in per-user HTTPS authentication.", "nullable": true }, - "severity": { + "git_service_name": { "type": "string", - "readOnly": true, - "description": "Severity of the error (warning, error, fatal, info, success)", + "description": "Name of the git service provider", "nullable": true }, - "line_number": { - "type": "string", - "readOnly": true, - "description": "Line number of the error in the LookML file", + "git_application_server_http_port": { + "type": "integer", + "format": "int64", + "description": "Port that HTTP(S) application server is running on (for PRs, file browsing, etc.)", "nullable": true }, - "lookml_url": { + "git_application_server_http_scheme": { "type": "string", - "readOnly": true, - "description": "URL to the LookML that caused the error", + "description": "Scheme that is running on application server (for PRs, file browsing, etc.)", "nullable": true }, - "file_path": { + "deploy_secret": { "type": "string", - "readOnly": true, - "description": "IDE folder path to the LookML file that caused the error", + "x-looker-write-only": true, + "description": "(Write-Only) Optional secret token with which to authenticate requests to the webhook deploy endpoint. If not set, endpoint is unauthenticated.", "nullable": true - } - }, - "x-looker-status": "beta" - }, - "SqlValidatorResult": { - "properties": { - "name": { - "type": "string", - "readOnly": true, - "description": "Name of the validator (sql)", - "nullable": false }, - "incremental": { + "unset_deploy_secret": { "type": "boolean", - "readOnly": true, - "description": "Whether the validation was incremental", + "x-looker-write-only": true, + "description": "(Write-Only) When true, unsets the deploy secret to allow unauthenticated access to the webhook deploy endpoint.", "nullable": false }, - "status": { + "pull_request_mode": { "type": "string", - "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", + "enum": [ + "off", + "links", + "recommended", + "required" + ], + "description": "The git pull request policy for this project. Valid values are: \"off\", \"links\", \"recommended\", \"required\".", "nullable": false }, - "result": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SqlValidatorTestedExplore" - }, - "readOnly": true, - "description": "The results of tested Explores", + "validation_required": { + "type": "boolean", + "description": "Validation policy: If true, the project must pass validation checks before project changes can be committed to the git repository", "nullable": false - } - }, - "x-looker-status": "beta" - }, - "SqlValidatorTestedExplore": { - "properties": { - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that was tested", + }, + "git_release_mgmt_enabled": { + "type": "boolean", + "description": "If true, advanced git release management is enabled for this project", "nullable": false }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that was tested", + "allow_warnings": { + "type": "boolean", + "description": "Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false).", "nullable": false }, - "status": { - "type": "string", + "is_example": { + "type": "boolean", "readOnly": true, - "description": "Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running)", + "description": "If true the project is an example project and cannot be modified", "nullable": false }, - "skip_reason": { - "type": "string", + "has_production_counterpart": { + "type": "boolean", "readOnly": true, - "description": "Reason the validation was skipped", - "nullable": true + "description": "If true the project has been pushed to production.", + "nullable": false }, - "error_count": { - "type": "integer", - "format": "int64", - "readOnly": true, - "description": "Total number of failed validations", + "dependency_status": { + "type": "string", + "description": "Status of dependencies in your manifest & lockfile", "nullable": true - }, - "errors": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SqlValidatorErrorItem" - }, - "readOnly": true, - "description": "Details of the LookML that failed SQL validation", - "nullable": false } }, - "x-looker-status": "beta" + "x-looker-status": "stable" }, - "SqlValidatorErrorItem": { + "AsyncDeployResponse": { "properties": { - "sql_error": { - "$ref": "#/components/schemas/SqlValidatorError" - }, - "generic_error": { - "$ref": "#/components/schemas/GenericError" + "status": { + "type": "string", + "readOnly": true, + "description": "Status of the async deploy request (e.g., 'queued')", + "nullable": false } }, "x-looker-status": "beta" }, - "SqlValidatorError": { + "DeployStatusResponse": { "properties": { - "type": { - "type": "string", - "readOnly": true, - "description": "A URI reference that identifies the problem type", - "nullable": false - }, - "title": { - "type": "string", - "readOnly": true, - "description": "Overview of the error", - "nullable": false - }, - "detail": { - "type": "string", - "readOnly": true, - "description": "Detail of the error", - "nullable": false - }, "status": { "type": "string", "readOnly": true, - "description": "The HTTP status code for the problem", - "nullable": true - }, - "instance": { - "type": "string", - "readOnly": true, - "description": "URI reference that identifies the specific occurrence of the problem", - "nullable": true - }, - "model": { - "type": "string", - "readOnly": true, - "description": "LookML model that contains the Explore that failed SQL validation", - "nullable": false - }, - "explore": { - "type": "string", - "readOnly": true, - "description": "LookML Explore that failed SQL validation", - "nullable": false - }, - "message": { - "type": "string", - "readOnly": true, - "description": "Message returned by the SQL validation", + "description": "Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED')", "nullable": false }, - "explore_url": { - "type": "string", - "readOnly": true, - "description": "URL to the Explore", - "nullable": true - }, - "lookml_url": { - "type": "string", - "readOnly": true, - "description": "URL to the LookML that caused the error", - "nullable": true - }, - "dimension": { + "error": { "type": "string", "readOnly": true, - "description": "LookML dimension that caused the error", + "description": "Error message if the deploy failed", "nullable": true }, - "line_number": { + "commit_sha": { "type": "string", "readOnly": true, - "description": "Line of the error in the LookML file", + "description": "Commit SHA of the deployment", "nullable": true } }, @@ -60240,6 +61069,11 @@ "description": "(Write-Only) JSON object containing secret parameters for external scheduling. For Amazon S3, this requires a key and value for secret_access_key. For SFTP, this requires a key and value for password.", "nullable": true }, + "include_filters": { + "type": "boolean", + "description": "Whether or not to include filters context", + "nullable": false + }, "message": { "type": "string", "description": "Optional message to be included in scheduled emails", @@ -60404,182 +61238,192 @@ "description": "Whether or not to add page breaks between tabs", "nullable": false }, - "tab_ids": { - "type": "array", - "items": { - "type": "string" - }, - "description": "IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards)", - "nullable": true - }, - "inline_table_width": { - "type": "integer", - "format": "int64", - "description": "The pixel width at which we render the inline table visualizations", - "nullable": true - }, - "query_id": { - "type": "string", - "description": "Query id", - "nullable": true - } - }, - "x-looker-status": "stable" - }, - "ScheduledPlan": { - "properties": { - "name": { - "type": "string", - "description": "Name of this scheduled plan", - "nullable": true - }, - "user_id": { - "type": "string", - "description": "User Id which owns this scheduled plan", - "nullable": true - }, - "run_as_recipient": { - "type": "boolean", - "description": "Whether schedule is run as recipient (only applicable for email recipients)", - "nullable": false - }, - "enabled": { - "type": "boolean", - "description": "Whether the ScheduledPlan is enabled", - "nullable": false - }, - "look_id": { - "type": "string", - "description": "Id of a look", - "nullable": true - }, - "dashboard_id": { - "type": "string", - "description": "Id of a dashboard", - "nullable": true - }, - "lookml_dashboard_id": { - "type": "string", - "description": "Id of a LookML dashboard", - "nullable": true - }, - "filters_string": { - "type": "string", - "description": "Query string to run look or dashboard with", - "nullable": true - }, - "dashboard_filters": { - "type": "string", - "deprecated": true, - "description": "(DEPRECATED) Alias for filters_string field", - "nullable": true - }, - "require_results": { - "type": "boolean", - "description": "Delivery should occur if running the dashboard or look returns results", - "nullable": false - }, - "require_no_results": { - "type": "boolean", - "description": "Delivery should occur if the dashboard look does not return results", - "nullable": false - }, - "require_change": { - "type": "boolean", - "description": "Delivery should occur if data have changed since the last run", - "nullable": false - }, - "send_all_results": { - "type": "boolean", - "description": "Will run an unlimited query and send all results.", - "nullable": false - }, - "crontab": { - "type": "string", - "description": "Vixie-Style crontab specification when to run", - "nullable": true - }, - "datagroup": { - "type": "string", - "description": "Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string)", - "nullable": true - }, - "timezone": { - "type": "string", - "description": "Timezone for interpreting the specified crontab (default is Looker instance timezone)", - "nullable": true - }, - "scheduled_plan_destination": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ScheduledPlanDestination" - }, - "description": "Scheduled plan destinations", - "nullable": true - }, - "run_once": { - "type": "boolean", - "description": "Whether the plan in question should only be run once (usually for testing)", - "nullable": false - }, - "include_links": { - "type": "boolean", - "description": "Whether links back to Looker should be included in this ScheduledPlan", - "nullable": false - }, - "include_dashboard_summary": { - "type": "boolean", - "description": "Whether to include a dashboard summary in the scheduled email", - "nullable": false - }, - "custom_url_base": { - "type": "string", - "description": "Custom url domain for the scheduled entity", - "nullable": true - }, - "custom_url_params": { - "type": "string", - "description": "Custom url path and parameters for the scheduled entity", - "nullable": true - }, - "custom_url_label": { - "type": "string", - "description": "Custom url label for the scheduled entity", - "nullable": true - }, - "show_custom_url": { - "type": "boolean", - "description": "Whether to show custom link back instead of standard looker link", - "nullable": false - }, - "pdf_paper_size": { - "type": "string", - "description": "The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".", - "nullable": true - }, - "pdf_landscape": { - "type": "boolean", - "description": "Whether the PDF should be formatted for landscape orientation", - "nullable": false - }, - "embed": { - "type": "boolean", - "description": "Whether this schedule is in an embed context or not", - "nullable": false - }, - "color_theme": { - "type": "string", - "description": "Color scheme of the dashboard if applicable", - "nullable": true - }, - "long_tables": { - "type": "boolean", - "description": "Whether or not to expand table vis to full length", - "nullable": false - }, - "pdf_page_breaks": { + "include_filters": { + "type": "boolean", + "description": "Whether or not to include filters context", + "nullable": false + }, + "tab_ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards)", + "nullable": true + }, + "inline_table_width": { + "type": "integer", + "format": "int64", + "description": "The pixel width at which we render the inline table visualizations", + "nullable": true + }, + "query_id": { + "type": "string", + "description": "Query id", + "nullable": true + } + }, + "x-looker-status": "stable" + }, + "ScheduledPlan": { + "properties": { + "name": { + "type": "string", + "description": "Name of this scheduled plan", + "nullable": true + }, + "user_id": { + "type": "string", + "description": "User Id which owns this scheduled plan", + "nullable": true + }, + "run_as_recipient": { + "type": "boolean", + "description": "Whether schedule is run as recipient (only applicable for email recipients)", + "nullable": false + }, + "enabled": { + "type": "boolean", + "description": "Whether the ScheduledPlan is enabled", + "nullable": false + }, + "look_id": { + "type": "string", + "description": "Id of a look", + "nullable": true + }, + "dashboard_id": { + "type": "string", + "description": "Id of a dashboard", + "nullable": true + }, + "lookml_dashboard_id": { + "type": "string", + "description": "Id of a LookML dashboard", + "nullable": true + }, + "filters_string": { + "type": "string", + "description": "Query string to run look or dashboard with", + "nullable": true + }, + "dashboard_filters": { + "type": "string", + "deprecated": true, + "description": "(DEPRECATED) Alias for filters_string field", + "nullable": true + }, + "require_results": { + "type": "boolean", + "description": "Delivery should occur if running the dashboard or look returns results", + "nullable": false + }, + "require_no_results": { + "type": "boolean", + "description": "Delivery should occur if the dashboard look does not return results", + "nullable": false + }, + "require_change": { + "type": "boolean", + "description": "Delivery should occur if data have changed since the last run", + "nullable": false + }, + "send_all_results": { + "type": "boolean", + "description": "Will run an unlimited query and send all results.", + "nullable": false + }, + "crontab": { + "type": "string", + "description": "Vixie-Style crontab specification when to run", + "nullable": true + }, + "datagroup": { + "type": "string", + "description": "Name of a datagroup; if specified will run when datagroup triggered (can't be used with cron string)", + "nullable": true + }, + "timezone": { + "type": "string", + "description": "Timezone for interpreting the specified crontab (default is Looker instance timezone)", + "nullable": true + }, + "scheduled_plan_destination": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledPlanDestination" + }, + "description": "Scheduled plan destinations", + "nullable": true + }, + "run_once": { + "type": "boolean", + "description": "Whether the plan in question should only be run once (usually for testing)", + "nullable": false + }, + "include_links": { + "type": "boolean", + "description": "Whether links back to Looker should be included in this ScheduledPlan", + "nullable": false + }, + "include_dashboard_summary": { + "type": "boolean", + "description": "Whether to include a dashboard summary in the scheduled email", + "nullable": false + }, + "custom_url_base": { + "type": "string", + "description": "Custom url domain for the scheduled entity", + "nullable": true + }, + "custom_url_params": { + "type": "string", + "description": "Custom url path and parameters for the scheduled entity", + "nullable": true + }, + "custom_url_label": { + "type": "string", + "description": "Custom url label for the scheduled entity", + "nullable": true + }, + "show_custom_url": { + "type": "boolean", + "description": "Whether to show custom link back instead of standard looker link", + "nullable": false + }, + "pdf_paper_size": { + "type": "string", + "description": "The size of paper the PDF should be formatted to fit. Valid values are: \"letter\", \"legal\", \"tabloid\", \"a0\", \"a1\", \"a2\", \"a3\", \"a4\", \"a5\".", + "nullable": true + }, + "pdf_landscape": { + "type": "boolean", + "description": "Whether the PDF should be formatted for landscape orientation", + "nullable": false + }, + "embed": { + "type": "boolean", + "description": "Whether this schedule is in an embed context or not", + "nullable": false + }, + "color_theme": { + "type": "string", + "description": "Color scheme of the dashboard if applicable", + "nullable": true + }, + "long_tables": { + "type": "boolean", + "description": "Whether or not to expand table vis to full length", + "nullable": false + }, + "pdf_page_breaks": { + "type": "boolean", + "description": "Whether or not to add page breaks between tabs", + "nullable": false + }, + "include_filters": { "type": "boolean", - "description": "Whether or not to add page breaks between tabs", + "description": "Whether or not to include filters context", "nullable": false }, "tab_ids": { @@ -60627,6 +61471,12 @@ "description": "Title", "nullable": true }, + "content_title": { + "type": "string", + "readOnly": true, + "description": "Title of the underlying content (Dashboard, Look, LookML Dashboard, or Explore) associated with this ScheduledPlan", + "nullable": true + }, "user": { "$ref": "#/components/schemas/UserPublic" }, @@ -60644,6 +61494,12 @@ "description": "When the ScheduledPlan was last run", "nullable": true }, + "last_run_status": { + "type": "string", + "readOnly": true, + "description": "Status of the last run for this ScheduledPlan", + "nullable": true + }, "can": { "type": "object", "additionalProperties": { @@ -61358,6 +62214,11 @@ "description": "(DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value.", "nullable": false }, + "embed_vis_modernization_default": { + "type": "boolean", + "description": "Default net new visualizations in embedded context to Modern theme", + "nullable": false + }, "embed_enabled": { "type": "boolean", "readOnly": true, @@ -62050,6 +62911,22 @@ "description": "Default background color", "nullable": false }, + "background_image_url": { + "type": "string", + "description": "URL for background image", + "nullable": true + }, + "background_image_id": { + "type": "string", + "description": "Optional. ID of theme background image.", + "nullable": true + }, + "background_opacity": { + "type": "number", + "format": "float", + "description": "Background image opacity (0.0 to 1.0).", + "nullable": true + }, "base_font_size": { "type": "string", "description": "Base font size for scaling fonts (only supported by legacy dashboards)", @@ -62367,7 +63244,7 @@ }, "type": { "type": "string", - "description": "Type of user attribute (\"string\", \"number\", \"datetime\", \"yesno\", \"zipcode\", \"advanced_filter_string\", \"advanced_filter_number\")", + "description": "Type of user attribute (\"string\", \"number\", \"datetime\", \"yesno\", \"zipcode\", \"advanced_filter_string\", \"advanced_filter_number\", \"file\")", "nullable": true }, "default_value": { @@ -62550,6 +63427,107 @@ }, "x-looker-status": "stable" }, + "UserDbConnection": { + "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": "string", + "readOnly": true, + "description": "ID of the connection", + "nullable": false + }, + "name": { + "type": "string", + "readOnly": true, + "description": "Name of the connection (must match virtual namespace pattern)", + "nullable": true + }, + "user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the user who owns the connection", + "nullable": true + }, + "dialect": { + "type": "string", + "readOnly": true, + "description": "Database dialect name", + "nullable": true + }, + "auth_type": { + "type": "string", + "readOnly": true, + "description": "Authentication type (oauth, service_account, password)", + "nullable": true + }, + "host": { + "type": "string", + "readOnly": true, + "description": "Host name/address of server", + "nullable": true + }, + "port": { + "type": "string", + "readOnly": true, + "description": "Port number on server", + "nullable": true + }, + "database": { + "type": "string", + "readOnly": true, + "description": "Database name", + "nullable": true + }, + "schema": { + "type": "string", + "readOnly": true, + "description": "Schema name", + "nullable": true + }, + "jdbc_additional_params": { + "type": "string", + "readOnly": true, + "description": "Additional JDBC parameters", + "nullable": true + }, + "oauth_application_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "OAuth application ID (if auth_type is oauth)", + "nullable": true + }, + "enabled": { + "type": "boolean", + "description": "Whether this connection is enabled", + "nullable": false + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "When the connection was created", + "nullable": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "When the connection was last updated", + "nullable": true + } + }, + "x-looker-status": "beta" + }, "UserEmailOnly": { "properties": { "email": { diff --git a/swift/looker/rtl/constants.swift b/swift/looker/rtl/constants.swift index ea17e999c..1067df260 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.12" + public static let lookerVersion = "26.18" 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 dc0a4566b..ac4f8b7b9 100644 --- a/swift/looker/sdk/methods.swift +++ b/swift/looker/sdk/methods.swift @@ -25,7 +25,7 @@ */ /** - * 518 API methods + * 529 API methods */ @@ -2873,6 +2873,7 @@ open class LookerSDK: APIMethods { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -2920,6 +2921,7 @@ open class LookerSDK: APIMethods { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -3591,6 +3593,67 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Get All User DB Connections + * + * Returns a list of user DB connections. + * + * GET /user_db_connections -> [UserDbConnection] + */ + public func all_user_db_connections( + /** + * @param {String} fields Requested fields. + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse<[UserDbConnection], SDKError> { + let result: SDKResponse<[UserDbConnection], SDKError> = self.get("/user_db_connections", + ["fields": fields], nil, options) + return result + } + + /** + * ### Update User DB Connection + * + * Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + * + * PATCH /user_db_connections/{user_db_connection_id} -> UserDbConnection + */ + public func update_user_db_connection( + /** + * @param {String} user_db_connection_id Id of user DB connection + */ + _ user_db_connection_id: String, + /** + * @param {WriteUserDbConnection} body + */ + _ body: WriteUserDbConnection, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_db_connection_id = encodeParam(user_db_connection_id) + let result: SDKResponse = self.patch("/user_db_connections/\(path_user_db_connection_id)", nil, try! self.encode(body), options) + return result + } + + /** + * ### Delete User DB Connection + * + * Deletes an existing user DB connection. + * + * DELETE /user_db_connections/{user_db_connection_id} -> Voidable + */ + public func delete_user_db_connection( + /** + * @param {String} user_db_connection_id Id of user DB connection + */ + _ user_db_connection_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_db_connection_id = encodeParam(user_db_connection_id) + let result: SDKResponse = self.delete("/user_db_connections/\(path_user_db_connection_id)", nil, nil, options) + return result + } + // MARK Content: Manage Content @@ -4343,6 +4406,25 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Get LookML of a UDD Agent + * + * Returns the LookML representation of a user-defined (UDD) agent. + * + * GET /agents/lookml/{agent_id} -> AgentLookml + */ + public func agent_lookml( + /** + * @param {String} agent_id Id of agent + */ + _ agent_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_agent_id = encodeParam(agent_id) + let result: SDKResponse = self.get("/agents/lookml/\(path_agent_id)", nil, nil, options) + return result + } + /** * ### Get All Conversation Messages * @@ -4489,6 +4571,39 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Get Agent Responses for User Message + * + * Get all agent response messages generated for a specific user prompt. + * + * An agent response often consists of multiple message blocks (such as text explanations, + * visualizations, and follow-up suggestions). This endpoint returns all response messages + * following the specified user message up to the next user prompt. + * + * GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> [ConversationMessage] + */ + public func get_conversation_message_responses( + /** + * @param {String} conversation_id Conversation ID + */ + _ conversation_id: String, + /** + * @param {String} user_message_id User Conversation Message ID + */ + _ user_message_id: String, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse<[ConversationMessage], SDKError> { + let path_conversation_id = encodeParam(conversation_id) + let path_user_message_id = encodeParam(user_message_id) + let result: SDKResponse<[ConversationMessage], SDKError> = self.get("/conversations/\(path_conversation_id)/messages/\(path_user_message_id)/responses", + ["fields": fields], nil, options) + return result + } + /** * ### Search Conversations * @@ -5062,6 +5177,32 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Get Dashboard Image + * + * Returns the image content for a dashboard element. + * + * GET /dashboards/{dashboard_id}/images/{image_slug} -> binary + * + * **Note**: Binary content may be returned by this method. + */ + public func get_dashboard_image( + /** + * @param {String} dashboard_id Id of dashboard + */ + _ dashboard_id: String, + /** + * @param {String} image_slug Slug of image + */ + _ image_slug: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_dashboard_id = encodeParam(dashboard_id) + let path_image_slug = encodeParam(image_slug) + let result: SDKResponse = self.get("/dashboards/\(path_dashboard_id)/images/\(path_image_slug)", nil, nil, options) + return result + } + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -5109,6 +5250,8 @@ open class LookerSDK: APIMethods { * Boolean search params accept only "true" and "false" as values. * * + * **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + * * The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. * * Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -5121,7 +5264,7 @@ open class LookerSDK: APIMethods { */ folder_id: String? = nil, /** - * @param {String} title Match LookML Dashboard title. + * @param {String} title Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title. */ title: String? = nil, /** @@ -5141,7 +5284,7 @@ open class LookerSDK: APIMethods { */ offset: Int64? = nil, /** - * @param {String} sorts One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status] + * @param {String} sorts One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title. */ sorts: String? = nil, options: ITransportSettings? = nil @@ -5189,11 +5332,15 @@ open class LookerSDK: APIMethods { * @param {String} folder_id Folder id to move to. */ _ folder_id: String, + /** + * @param {String} project_name LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. + */ + project_name: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { let path_dashboard_id = encodeParam(dashboard_id) let result: SDKResponse = self.patch("/dashboards/\(path_dashboard_id)/move", - ["folder_id": folder_id], nil, options) + ["folder_id": folder_id, "project_name": project_name], nil, options) return result } @@ -7518,6 +7665,8 @@ open class LookerSDK: APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /looks/{look_id}/run/{result_format} -> String * * **Note**: Binary content may be returned by this method. @@ -8122,64 +8271,202 @@ open class LookerSDK: APIMethods { // MARK Project: Manage Projects /** - * ### Fetches a CI Run. + * ### Search Continuous Integration Runs for a project. * - * This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + * Returns an array of Continuous Integration Run objects that match the specified search criteria. * - * GET /projects/{project_id}/ci/runs/{run_id} -> ProjectRun + * GET /projects/{project_id}/continuous_integration/runs/search -> [CIRun] */ - @available(*, deprecated) - public func get_ci_run( + public func search_continuous_integration_runs( /** * @param {String} project_id Project Id */ _ project_id: String, /** - * @param {String} run_id Run Id + * @param {String} fields Requested fields */ - _ run_id: String, + fields: String? = nil, + /** + * @param {String} suite_id Filter by suite id. Can be a comma-separated list of ids. + */ + suite_id: String? = nil, + /** + * @param {String} status Filter by status. Can be a comma-separated list of statuses. + */ + status: String? = nil, + /** + * @param {String} user_id Filter by user id. Can be a comma-separated list of ids. + */ + user_id: String? = nil, + /** + * @param {String} trigger_type Filter by trigger type. Can be a comma-separated list of types. + */ + trigger_type: String? = nil, + /** + * @param {Int64} limit Number of results to return (min 1, max 100, default 50, used with offset) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Number of results to skip before returning. (used with limit) + */ + offset: Int64? = nil, + /** + * @param {String} sorts One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at + */ + sorts: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse<[CIRun], SDKError> { + let path_project_id = encodeParam(project_id) + let result: SDKResponse<[CIRun], SDKError> = self.get("/projects/\(path_project_id)/continuous_integration/runs/search", + ["fields": fields, "suite_id": suite_id, "status": status, "user_id": user_id, "trigger_type": trigger_type, "limit": limit, "offset": offset, "sorts": sorts], nil, options) + return result + } + + /** + * ### Fetches Multiple CI Suite Configurations for Project. + * + * GET /projects/{project_id}/continuous_integration/suites -> [ProjectCISuite] + */ + public func get_continuous_integration_suites( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, /** * @param {String} fields Requested fields */ fields: String? = nil, + /** + * @param {Int64} limit Number of suites to return (min 1, max 100, default 50) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Row offset at which to fetch suites + */ + offset: Int64? = nil, + /** + * @param {Date} created_at Time at which to fetch suites + */ + created_at: Date? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse<[ProjectCISuite], SDKError> { let path_project_id = encodeParam(project_id) - let path_run_id = encodeParam(run_id) - let result: SDKResponse = self.get("/projects/\(path_project_id)/ci/runs/\(path_run_id)", - ["fields": fields], nil, options) + let result: SDKResponse<[ProjectCISuite], SDKError> = self.get("/projects/\(path_project_id)/continuous_integration/suites", + ["fields": fields, "limit": limit, "offset": offset, "created_at": created_at as Any?], nil, options) return result } /** - * ### Creates a CI Run. + * ### Fetches a CI Suite Configuration. * - * This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + * POST /projects/{project_id}/continuous_integration/suites -> ProjectCISuite + */ + public func create_continuous_integration_suite( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {WriteProjectCISuite} body + */ + _ body: WriteProjectCISuite, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/continuous_integration/suites", + ["fields": fields], try! self.encode(body), options) + return result + } + + /** + * ### Fetches a CI Suite Configuration. * - * POST /projects/{project_id}/ci/run -> CreateCIRunResponse + * GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite */ - @available(*, deprecated) - public func create_ci_run( + public func get_continuous_integration_suite( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {String} suite_id Suite Id + */ + _ suite_id: String, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_suite_id = encodeParam(suite_id) + let result: SDKResponse = self.get("/projects/\(path_project_id)/continuous_integration/suites/\(path_suite_id)", + ["fields": fields], nil, options) + return result + } + + /** + * ### Updates a Continuous Integration Suite. + * + * PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite + */ + public func update_continuous_integration_suite( /** * @param {String} project_id Project Id */ _ project_id: String, /** - * @param {CreateCIRunRequest} body + * @param {String} suite_id Suite Id */ - _ body: CreateCIRunRequest, + _ suite_id: String, + /** + * @param {WriteProjectCISuite} body + */ + _ body: WriteProjectCISuite, /** * @param {String} fields Requested fields */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_project_id = encodeParam(project_id) - let result: SDKResponse = self.post("/projects/\(path_project_id)/ci/run", + let path_suite_id = encodeParam(suite_id) + let result: SDKResponse = self.patch("/projects/\(path_project_id)/continuous_integration/suites/\(path_suite_id)", ["fields": fields], try! self.encode(body), options) return result } + /** + * ### Deletes a Continuous Integration Suite. + * + * DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> String + */ + public func delete_continuous_integration_suite( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {String} suite_id Suite Id + */ + _ suite_id: String, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_suite_id = encodeParam(suite_id) + let result: SDKResponse = self.delete("/projects/\(path_project_id)/continuous_integration/suites/\(path_suite_id)", + ["fields": fields], nil, options) + return result + } + /** * ### Creates and queues a Continuous Integration Run. * @@ -8206,6 +8493,33 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Duplicates and queues a Continuous Integration Run. + * + * POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> CIRun + */ + public func duplicate_continuous_integration_run( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {String} run_id Run ID to duplicate and re-run + */ + _ run_id: String, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_run_id = encodeParam(run_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/continuous_integration/runs/\(path_run_id)/duplicate", + ["fields": fields], nil, options) + return result + } + /** * ### Gets a Continuous Integration run. * @@ -8233,6 +8547,28 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Cancels a Continuous Integration Run. + * + * DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> String + */ + public func cancel_continuous_integration_run( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {String} run_id Run Id + */ + _ run_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_run_id = encodeParam(run_id) + let result: SDKResponse = self.delete("/projects/\(path_project_id)/continuous_integration/runs/\(path_run_id)", nil, nil, options) + return result + } + /** * ### Generate Lockfile for All LookML Dependencies * @@ -8559,29 +8895,65 @@ open class LookerSDK: APIMethods { } /** - * ### Get All Projects - * - * Returns all projects visible to the current user + * ### Pull from Production + * Pulls changes from the remote production branch into the current development workspace. * - * GET /projects -> [Project] + * POST /projects/{project_id}/pull_from_production -> String */ - public func all_projects( + public func pull_project_from_production( /** - * @param {String} fields Requested fields + * @param {String} project_id Id of project */ - fields: String? = nil, + _ project_id: String, options: ITransportSettings? = nil - ) -> SDKResponse<[Project], SDKError> { - let result: SDKResponse<[Project], SDKError> = self.get("/projects", - ["fields": fields], nil, options) + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/pull_from_production", nil, nil, options) return result } /** - * ### Create A Project - * - * dev mode required. - * - Call `update_session` to select the 'dev' workspace. + * ### Pull from Remote + * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + * + * POST /projects/{project_id}/pull_from_remote -> String + */ + public func pull_project_from_remote( + /** + * @param {String} project_id Id of project + */ + _ project_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/pull_from_remote", nil, nil, options) + return result + } + + /** + * ### Get All Projects + * + * Returns all projects visible to the current user + * + * GET /projects -> [Project] + */ + public func all_projects( + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse<[Project], SDKError> { + let result: SDKResponse<[Project], SDKError> = self.get("/projects", + ["fields": fields], nil, options) + return result + } + + /** + * ### Create A Project + * + * dev mode required. + * - Call `update_session` to select the 'dev' workspace. * * `name` is required. * `git_remote_url` is not allowed. To configure Git for the newly created project, follow the instructions in `update_project`. @@ -9033,75 +9405,6 @@ open class LookerSDK: APIMethods { return result } - /** - * ### Initiate Git Diagnosis Suite - * - * POST /projects/{project_id}/git_diagnostic_report -> GitDiagnosticReport - */ - public func create_git_diagnostic_report( - /** - * @param {String} project_id Looker Project ID - */ - _ project_id: String, - /** - * @param {WriteGitDiagnosticReport} body - */ - _ body: WriteGitDiagnosticReport, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_project_id = encodeParam(project_id) - let result: SDKResponse = self.post("/projects/\(path_project_id)/git_diagnostic_report", nil, try! self.encode(body), options) - return result - } - - /** - * ### Retrieve Live Git Diagnostic Suite Execution Status - * - * GET /projects/{project_id}/git_diagnostic_report/{report_id} -> GitDiagnosticReport - */ - public func get_git_diagnostic_report( - /** - * @param {String} project_id Looker Project ID - */ - _ project_id: String, - /** - * @param {String} report_id Report ID - */ - _ report_id: String, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_project_id = encodeParam(project_id) - let path_report_id = encodeParam(report_id) - let result: SDKResponse = self.get("/projects/\(path_project_id)/git_diagnostic_report/\(path_report_id)", nil, nil, options) - return result - } - - /** - * ### Repair Git Configuration Issues - * - * POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> GitDiagnosticReport - */ - public func repair_git_diagnostic_report( - /** - * @param {String} project_id Looker Project ID - */ - _ project_id: String, - /** - * @param {String} report_id Report ID - */ - _ report_id: String, - /** - * @param {WriteGitDiagnosticReport} body - */ - _ body: WriteGitDiagnosticReport, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_project_id = encodeParam(project_id) - let path_report_id = encodeParam(report_id) - let result: SDKResponse = self.post("/projects/\(path_project_id)/git_diagnostic_report/\(path_report_id)/repair", nil, try! self.encode(body), options) - return result - } - /** * ### Configure Repository Credential for a remote dependency * @@ -9191,6 +9494,8 @@ open class LookerSDK: APIMethods { * Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. * After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /query_tasks -> QueryTask */ public func create_query_task( @@ -9467,6 +9772,8 @@ open class LookerSDK: APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/{query_id}/run/{result_format} -> String * * **Note**: Binary content may be returned by this method. @@ -9590,6 +9897,8 @@ open class LookerSDK: APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /queries/run/{result_format} -> String * * **Note**: Binary content may be returned by this method. @@ -9714,6 +10023,8 @@ open class LookerSDK: APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> String * * **Note**: Binary content may be returned by this method. @@ -11266,6 +11577,22 @@ open class LookerSDK: APIMethods { * @param {String} delivery_format Match scheduled plan's delivery format. */ delivery_format: String? = nil, + /** + * @param {Bool} all_states Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag). + */ + all_states: Bool? = nil, + /** + * @param {Bool} run_once Match Scheduled plan's run_once. + */ + run_once: Bool? = nil, + /** + * @param {Bool} enabled Match Scheduled plan's enabled status. + */ + enabled: Bool? = nil, + /** + * @param {String} last_run_status Match scheduled plan's last run status. + */ + last_run_status: String? = nil, /** * @param {Bool} filter_or Combine given search criteria in a boolean OR expression */ @@ -11273,7 +11600,7 @@ open class LookerSDK: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse<[ScheduledPlan], SDKError> { let result: SDKResponse<[ScheduledPlan], SDKError> = self.get("/scheduled_plans/search", - ["user_id": user_id, "fields": fields, "all_users": all_users as Any?, "limit": limit, "offset": offset, "sorts": sorts, "name": name, "user_first_name": user_first_name, "user_last_name": user_last_name, "dashboard_id": dashboard_id, "look_id": look_id, "lookml_dashboard_id": lookml_dashboard_id, "recipient": recipient, "destination_type": destination_type, "delivery_format": delivery_format, "filter_or": filter_or as Any?], nil, options) + ["user_id": user_id, "fields": fields, "all_users": all_users as Any?, "limit": limit, "offset": offset, "sorts": sorts, "name": name, "user_first_name": user_first_name, "user_last_name": user_last_name, "dashboard_id": dashboard_id, "look_id": look_id, "lookml_dashboard_id": lookml_dashboard_id, "recipient": recipient, "destination_type": destination_type, "delivery_format": delivery_format, "all_states": all_states as Any?, "run_once": run_once as Any?, "enabled": enabled as Any?, "last_run_status": last_run_status, "filter_or": filter_or as Any?], nil, options) return result } @@ -12153,283 +12480,217 @@ open class LookerSDK: APIMethods { } /** - * ### Get information about the current user; i.e. the user account currently calling the API. + * ### Email/password login information for the specified user. * - * GET /user -> User + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_email -> CredentialsEmail */ - public func me( + public func user_credentials_email( + /** + * @param {String} user_id Id of user + */ + _ user_id: String, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { - let result: SDKResponse = self.get("/user", + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_email", ["fields": fields], nil, options) return result } /** - * ### Get information about all users. + * ### Email/password login information for the specified user. * - * GET /users -> [User] + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * POST /users/{user_id}/credentials_email -> CredentialsEmail */ - public func all_users( + public func create_user_credentials_email( /** - * @param {String} fields Requested fields. + * @param {String} user_id Id of user */ - fields: String? = nil, + _ user_id: String, /** - * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results + * @param {WriteCredentialsEmail} body */ - page: Int64? = nil, + _ body: WriteCredentialsEmail, /** - * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page + * @param {String} fields Requested fields. */ - per_page: Int64? = nil, + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email", + ["fields": fields], try! self.encode(body), options) + return result + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * PATCH /users/{user_id}/credentials_email -> CredentialsEmail + */ + public func update_user_credentials_email( /** - * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) + * @param {String} user_id Id of user */ - limit: Int64? = nil, + _ user_id: String, /** - * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + * @param {WriteCredentialsEmail} body */ - offset: Int64? = nil, + _ body: WriteCredentialsEmail, /** - * @param {String} sorts Fields to sort by. + * @param {String} fields Requested fields. */ - sorts: String? = nil, + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.patch("/users/\(path_user_id)/credentials_email", + ["fields": fields], try! self.encode(body), options) + return result + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_email -> String + */ + public func delete_user_credentials_email( /** - * @param {DelimArray} ids Optional list of ids to get specific users. + * @param {String} user_id Id of user */ - ids: DelimArray? = nil, + _ user_id: String, options: ITransportSettings? = nil - ) -> SDKResponse<[User], SDKError> { - let result: SDKResponse<[User], SDKError> = self.get("/users", - ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "ids": ids as Any?], nil, options) + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_email", nil, nil, options) return result } /** - * ### Create a user with the specified information. + * ### Create a password reset token. + * This will create a cryptographically secure random password reset token for the user. + * If the user already has a password reset token then this invalidates the old token and creates a new one. + * The token is expressed as the 'password_reset_url' of the user's email/password credential object. + * This takes an optional 'expires' param to indicate if the new token should be an expiring token. + * Tokens that expire are typically used for self-service password resets for existing users. + * Invitation emails for new users typically are not set to expire. + * The expire period is always 60 minutes when expires is enabled. + * This method can be called with an empty body. * - * POST /users -> User + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail */ - public func create_user( + public func create_user_credentials_email_password_reset( /** - * @param {WriteUser} body + * @param {String} user_id Id of user */ - body: WriteUser?, + _ user_id: String, + /** + * @param {Bool} expires Expiring token. + */ + expires: Bool? = nil, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { - let result: SDKResponse = self.post("/users", - ["fields": fields], try! self.encode(body), options) + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email/password_reset", + ["expires": expires as Any?, "fields": fields], nil, options) return result } /** - * ### Search users - * - * Returns all* user records that match the given search criteria. - * - * If multiple search params are given and `filter_or` is FALSE or not specified, - * search params are combined in a logical AND operation. - * Only rows that match *all* search param criteria will be returned. - * - * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - * Results will include rows that match **any** of the search criteria. - * - * String search params use case-insensitive matching. - * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - * example="dan%" will match "danger" and "Danzig" but not "David" - * example="D_m%" will match "Damage" and "dump" - * - * Integer search params can accept a single value or a comma separated list of values. The multiple - * values will be combined under a logical OR operation - results will match at least one of - * the given values. - * - * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - * or exclude (respectively) rows where the column is null. - * - * Boolean search params accept only "true" and "false" as values. - * + * ### Send a password reset token. + * This will send a password reset email to the user. If a password reset token does not already exist + * for this user, it will create one and then send it. + * If the user has not yet set up their account, it will send a setup email to the user. + * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + * Password reset URLs will expire in 60 minutes. + * This method can be called with an empty body. * - * (*) Results are always filtered to the level of information the caller is permitted to view. - * Looker admins can see all user details; normal users in an open system can see - * names of other users but no details; normal users in a closed system can only see - * names of other users who are members of the same group as the user. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/search -> [User] + * POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail */ - public func search_users( + public func send_user_credentials_email_password_reset( /** - * @param {String} fields Include only these fields in the response + * @param {String} user_id Id of user */ - fields: String? = nil, + _ user_id: String, /** - * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results - */ - page: Int64? = nil, - /** - * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page - */ - per_page: Int64? = nil, - /** - * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) - */ - limit: Int64? = nil, - /** - * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - */ - offset: Int64? = nil, - /** - * @param {String} sorts Fields to sort by. - */ - sorts: String? = nil, - /** - * @param {String} id Match User Id. - */ - id: String? = nil, - /** - * @param {String} first_name Match First name. - */ - first_name: String? = nil, - /** - * @param {String} last_name Match Last name. - */ - last_name: String? = nil, - /** - * @param {String} full_name Match Full name (First Last). - */ - full_name: String? = nil, - /** - * @param {Bool} verified_looker_employee Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details. - */ - verified_looker_employee: Bool? = nil, - /** - * @param {Bool} embed_user Search for only embed users - */ - embed_user: Bool? = nil, - /** - * @param {String} email Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details. - */ - email: String? = nil, - /** - * @param {Bool} is_disabled Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details. - */ - is_disabled: Bool? = nil, - /** - * @param {Bool} filter_or Combine given search criteria in a boolean OR expression - */ - filter_or: Bool? = nil, - /** - * @param {String} content_metadata_id Search for users who have access to this content_metadata item - */ - content_metadata_id: String? = nil, - /** - * @param {String} group_id Search for users who are direct members of this group - */ - group_id: String? = nil, - /** - * @param {Bool} can_manage_api3_creds Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance. - */ - can_manage_api3_creds: Bool? = nil, - /** - * @param {Bool} is_service_account Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details. + * @param {String} fields Requested fields. */ - is_service_account: Bool? = nil, + fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse<[User], SDKError> { - let result: SDKResponse<[User], SDKError> = self.get("/users/search", - ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "id": id, "first_name": first_name, "last_name": last_name, "full_name": full_name, "verified_looker_employee": verified_looker_employee as Any?, "embed_user": embed_user as Any?, "email": email, "is_disabled": is_disabled as Any?, "filter_or": filter_or as Any?, "content_metadata_id": content_metadata_id, "group_id": group_id, "can_manage_api3_creds": can_manage_api3_creds as Any?, "is_service_account": is_service_account as Any?], nil, options) + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email/send_password_reset", + ["fields": fields], nil, options) return result } /** - * ### Search for user accounts by name - * - * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. - * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. - * - * Any additional search params will be combined into a logical AND expression. + * ### Google authentication login information for the specified user. * - * GET /users/search/names/{pattern} -> [User] + * GET /users/{user_id}/credentials_google -> CredentialsGoogle */ - public func search_users_names( + public func user_credentials_google( /** - * @param {String} pattern Pattern to match + * @param {String} user_id Id of user */ - _ pattern: String, + _ user_id: String, /** - * @param {String} fields Include only these fields in the response + * @param {String} fields Requested fields. */ fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_google", + ["fields": fields], nil, options) + return result + } + + /** + * ### Delete Google authentication login information for the specified user. + * + * DELETE /users/{user_id}/credentials_google -> String + */ + public func delete_user_credentials_google( /** - * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results - */ - page: Int64? = nil, - /** - * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page - */ - per_page: Int64? = nil, - /** - * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) - */ - limit: Int64? = nil, - /** - * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - */ - offset: Int64? = nil, - /** - * @param {String} sorts Fields to sort by - */ - sorts: String? = nil, - /** - * @param {String} id Match User Id - */ - id: String? = nil, - /** - * @param {String} first_name Match First name - */ - first_name: String? = nil, - /** - * @param {String} last_name Match Last name - */ - last_name: String? = nil, - /** - * @param {Bool} verified_looker_employee Match Verified Looker employee - */ - verified_looker_employee: Bool? = nil, - /** - * @param {String} email Match Email Address - */ - email: String? = nil, - /** - * @param {Bool} is_disabled Include or exclude disabled accounts in the results + * @param {String} user_id Id of user */ - is_disabled: Bool? = nil, + _ user_id: String, options: ITransportSettings? = nil - ) -> SDKResponse<[User], SDKError> { - let path_pattern = encodeParam(pattern) - let result: SDKResponse<[User], SDKError> = self.get("/users/search/names/\(path_pattern)", - ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "id": id, "first_name": first_name, "last_name": last_name, "verified_looker_employee": verified_looker_employee as Any?, "email": email, "is_disabled": is_disabled as Any?], nil, options) + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_google", nil, nil, options) return result } /** - * ### Get information about the user with a specific id. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * If the caller is an admin or the caller is the user being specified, then full user information will - * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains - * The user name and avatar url, but no sensitive information. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/{user_id} -> User + * GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid */ - public func user( + public func user_credentials_looker_openid( /** * @param {String} user_id Id of user */ @@ -12439,59 +12700,60 @@ open class LookerSDK: APIMethods { */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)", + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_looker_openid", ["fields": fields], nil, options) return result } /** - * ### Update information about the user with a specific id. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * PATCH /users/{user_id} -> User + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_looker_openid -> String */ - public func update_user( + public func delete_user_credentials_looker_openid( /** * @param {String} user_id Id of user */ _ user_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_looker_openid", nil, nil, options) + return result + } + + /** + * ### Saml authentication login information for the specified user. + * + * GET /users/{user_id}/credentials_saml -> CredentialsSaml + */ + public func user_credentials_saml( /** - * @param {WriteUser} body + * @param {String} user_id Id of user */ - _ body: WriteUser, + _ user_id: String, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.patch("/users/\(path_user_id)", - ["fields": fields], try! self.encode(body), options) + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_saml", + ["fields": fields], nil, options) return result } /** - * ### Delete the user with a specific id. - * - * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the users or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. + * ### Delete Saml authentication login information for the specified user. * - * The user cannot delete themselves. - * The last administrator user cannot be deleted. - * - * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - * Please use the dedicated `delete_service_account` endpoint. - * - * DELETE /users/{user_id} -> String + * DELETE /users/{user_id}/credentials_saml -> String */ - public func delete_user( + public func delete_user_credentials_saml( /** * @param {String} user_id Id of user */ @@ -12499,228 +12761,359 @@ open class LookerSDK: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)", nil, nil, options) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_saml", nil, nil, options) return result } /** - * ### Get information about the user with a credential of given type with specific id. - * - * This is used to do things like find users by their embed external_user_id. Or, find the user with - * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - * for the user and is specific to each type of credential. - * - * An example using the Ruby sdk might look like: - * - * `sdk.user_for_credential('embed', 'customer-4959425')` - * - * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - * which field in the given credential type is actually searched when finding a user with the supplied - * 'credential_id'. - * - * | Credential Types | Id Field Matched | - * | ---------------- | ---------------- | - * | email | email | - * | google | google_user_id | - * | saml | saml_user_id | - * | oidc | oidc_user_id | - * | ldap | ldap_id | - * | api | token | - * | api3 | client_id | - * | embed | external_user_id | - * | looker_openid | email | - * - * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. + * ### Get two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/credential/{credential_type}/{credential_id} -> User + * GET /users/{user_id}/credentials_totp -> CredentialsTotp */ - public func user_for_credential( - /** - * @param {String} credential_type Type name of credential - */ - _ credential_type: String, + public func user_credentials_totp( /** - * @param {String} credential_id Id of credential + * @param {String} user_id Id of user */ - _ credential_id: String, + _ user_id: String, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { - let path_credential_type = encodeParam(credential_type) - let path_credential_id = encodeParam(credential_id) - let result: SDKResponse = self.get("/users/credential/\(path_credential_type)/\(path_credential_id)", + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_totp", ["fields": fields], nil, options) return result } /** - * ### Update information for a specific service account. This action is restricted to Looker admins. + * ### Create two-factor login information for the specified user. * - * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * PATCH /users/service_accounts/{user_id} -> ServiceAccount + * POST /users/{user_id}/credentials_totp -> CredentialsTotp */ - public func update_service_account( + public func create_user_credentials_totp( /** - * @param {String} user_id Id of service account + * @param {String} user_id Id of user */ _ user_id: String, /** - * @param {WriteServiceAccount} body + * @param {CredentialsTotp} body WARNING: no writeable properties found for POST, PUT, or PATCH */ - _ body: WriteServiceAccount, + body: CredentialsTotp?, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.patch("/users/service_accounts/\(path_user_id)", + let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_totp", ["fields": fields], try! self.encode(body), options) return result } /** - * ### Delete the service account with a specific id. + * ### Delete two-factor login information for the specified user. * - * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the service account or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. + * DELETE /users/{user_id}/credentials_totp -> String + */ + public func delete_user_credentials_totp( + /** + * @param {String} user_id Id of user + */ + _ user_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_totp", nil, nil, options) + return result + } + + /** + * ### Get information about the current user; i.e. the user account currently calling the API. * - * The service account cannot delete itself. + * GET /user -> User + */ + public func me( + /** + * @param {String} fields Requested fields. + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.get("/user", + ["fields": fields], nil, options) + return result + } + + /** + * ### Get information about all users. * - * DELETE /users/service_accounts/{user_id} -> String + * GET /users -> [User] */ - public func delete_service_account( + public func all_users( + /** + * @param {String} fields Requested fields. + */ + fields: String? = nil, + /** + * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results + */ + page: Int64? = nil, + /** + * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page + */ + per_page: Int64? = nil, + /** + * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + */ + offset: Int64? = nil, + /** + * @param {String} sorts Fields to sort by. + */ + sorts: String? = nil, /** - * @param {String} user_id Id of service account user + * @param {DelimArray} ids Optional list of ids to get specific users. */ - _ user_id: String, + ids: DelimArray? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/service_accounts/\(path_user_id)", nil, nil, options) + ) -> SDKResponse<[User], SDKError> { + let result: SDKResponse<[User], SDKError> = self.get("/users", + ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "ids": ids as Any?], nil, options) return result } /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Create a user with the specified information. * - * GET /users/{user_id}/credentials_email -> CredentialsEmail + * POST /users -> User */ - public func user_credentials_email( + public func create_user( /** - * @param {String} user_id Id of user + * @param {WriteUser} body */ - _ user_id: String, + body: WriteUser?, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_email", - ["fields": fields], nil, options) + ) -> SDKResponse { + let result: SDKResponse = self.post("/users", + ["fields": fields], try! self.encode(body), options) return result } /** - * ### Email/password login information for the specified user. + * ### Search users * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all* user records that match the given search criteria. * - * POST /users/{user_id}/credentials_email -> CredentialsEmail + * If multiple search params are given and `filter_or` is FALSE or not specified, + * search params are combined in a logical AND operation. + * Only rows that match *all* search param criteria will be returned. + * + * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. + * Results will include rows that match **any** of the search criteria. + * + * String search params use case-insensitive matching. + * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. + * example="dan%" will match "danger" and "Danzig" but not "David" + * example="D_m%" will match "Damage" and "dump" + * + * Integer search params can accept a single value or a comma separated list of values. The multiple + * values will be combined under a logical OR operation - results will match at least one of + * the given values. + * + * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match + * or exclude (respectively) rows where the column is null. + * + * Boolean search params accept only "true" and "false" as values. + * + * + * (*) Results are always filtered to the level of information the caller is permitted to view. + * Looker admins can see all user details; normal users in an open system can see + * names of other users but no details; normal users in a closed system can only see + * names of other users who are members of the same group as the user. + * + * GET /users/search -> [User] */ - public func create_user_credentials_email( + public func search_users( /** - * @param {String} user_id Id of user + * @param {String} fields Include only these fields in the response */ - _ user_id: String, + fields: String? = nil, /** - * @param {WriteCredentialsEmail} body + * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results */ - _ body: WriteCredentialsEmail, + page: Int64? = nil, /** - * @param {String} fields Requested fields. + * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page */ - fields: String? = nil, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email", - ["fields": fields], try! self.encode(body), options) - return result - } - - /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * PATCH /users/{user_id}/credentials_email -> CredentialsEmail - */ - public func update_user_credentials_email( + per_page: Int64? = nil, /** - * @param {String} user_id Id of user + * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) */ - _ user_id: String, + limit: Int64? = nil, /** - * @param {WriteCredentialsEmail} body + * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) */ - _ body: WriteCredentialsEmail, + offset: Int64? = nil, /** - * @param {String} fields Requested fields. + * @param {String} sorts Fields to sort by. */ - fields: String? = nil, + sorts: String? = nil, + /** + * @param {String} id Match User Id. + */ + id: String? = nil, + /** + * @param {String} first_name Match First name. + */ + first_name: String? = nil, + /** + * @param {String} last_name Match Last name. + */ + last_name: String? = nil, + /** + * @param {String} full_name Match Full name (First Last). + */ + full_name: String? = nil, + /** + * @param {Bool} verified_looker_employee Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details. + */ + verified_looker_employee: Bool? = nil, + /** + * @param {Bool} embed_user Search for only embed users + */ + embed_user: Bool? = nil, + /** + * @param {String} email Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details. + */ + email: String? = nil, + /** + * @param {Bool} is_disabled Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details. + */ + is_disabled: Bool? = nil, + /** + * @param {Bool} filter_or Combine given search criteria in a boolean OR expression + */ + filter_or: Bool? = nil, + /** + * @param {String} content_metadata_id Search for users who have access to this content_metadata item + */ + content_metadata_id: String? = nil, + /** + * @param {String} group_id Search for users who are direct members of this group + */ + group_id: String? = nil, + /** + * @param {Bool} can_manage_api3_creds Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance. + */ + can_manage_api3_creds: Bool? = nil, + /** + * @param {Bool} is_service_account Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details. + */ + is_service_account: Bool? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.patch("/users/\(path_user_id)/credentials_email", - ["fields": fields], try! self.encode(body), options) + ) -> SDKResponse<[User], SDKError> { + let result: SDKResponse<[User], SDKError> = self.get("/users/search", + ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "id": id, "first_name": first_name, "last_name": last_name, "full_name": full_name, "verified_looker_employee": verified_looker_employee as Any?, "embed_user": embed_user as Any?, "email": email, "is_disabled": is_disabled as Any?, "filter_or": filter_or as Any?, "content_metadata_id": content_metadata_id, "group_id": group_id, "can_manage_api3_creds": can_manage_api3_creds as Any?, "is_service_account": is_service_account as Any?], nil, options) return result } /** - * ### Email/password login information for the specified user. + * ### Search for user accounts by name * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. + * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. * - * DELETE /users/{user_id}/credentials_email -> String + * Any additional search params will be combined into a logical AND expression. + * + * GET /users/search/names/{pattern} -> [User] */ - public func delete_user_credentials_email( + public func search_users_names( /** - * @param {String} user_id Id of user + * @param {String} pattern Pattern to match */ - _ user_id: String, + _ pattern: String, + /** + * @param {String} fields Include only these fields in the response + */ + fields: String? = nil, + /** + * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results + */ + page: Int64? = nil, + /** + * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page + */ + per_page: Int64? = nil, + /** + * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + */ + offset: Int64? = nil, + /** + * @param {String} sorts Fields to sort by + */ + sorts: String? = nil, + /** + * @param {String} id Match User Id + */ + id: String? = nil, + /** + * @param {String} first_name Match First name + */ + first_name: String? = nil, + /** + * @param {String} last_name Match Last name + */ + last_name: String? = nil, + /** + * @param {Bool} verified_looker_employee Match Verified Looker employee + */ + verified_looker_employee: Bool? = nil, + /** + * @param {String} email Match Email Address + */ + email: String? = nil, + /** + * @param {Bool} is_disabled Include or exclude disabled accounts in the results + */ + is_disabled: Bool? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_email", nil, nil, options) + ) -> SDKResponse<[User], SDKError> { + let path_pattern = encodeParam(pattern) + let result: SDKResponse<[User], SDKError> = self.get("/users/search/names/\(path_pattern)", + ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "id": id, "first_name": first_name, "last_name": last_name, "verified_looker_employee": verified_looker_employee as Any?, "email": email, "is_disabled": is_disabled as Any?], nil, options) return result } /** - * ### Two-factor login information for the specified user. + * ### Get information about the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * If the caller is an admin or the caller is the user being specified, then full user information will + * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains + * The user name and avatar url, but no sensitive information. * - * GET /users/{user_id}/credentials_totp -> CredentialsTotp + * GET /users/{user_id} -> User */ - public func user_credentials_totp( + public func user( /** * @param {String} user_id Id of user */ @@ -12730,49 +13123,59 @@ open class LookerSDK: APIMethods { */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_totp", + let result: SDKResponse = self.get("/users/\(path_user_id)", ["fields": fields], nil, options) return result } /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Update information about the user with a specific id. * - * POST /users/{user_id}/credentials_totp -> CredentialsTotp + * PATCH /users/{user_id} -> User */ - public func create_user_credentials_totp( + public func update_user( /** * @param {String} user_id Id of user */ _ user_id: String, /** - * @param {CredentialsTotp} body WARNING: no writeable properties found for POST, PUT, or PATCH + * @param {WriteUser} body */ - body: CredentialsTotp?, + _ body: WriteUser, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_totp", + let result: SDKResponse = self.patch("/users/\(path_user_id)", ["fields": fields], try! self.encode(body), options) return result } /** - * ### Two-factor login information for the specified user. + * ### Delete the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. * - * DELETE /users/{user_id}/credentials_totp -> String + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the users or that use their content will be deleted. + * * Alerts owned by the users will be deleted. + * + * The user cannot delete themselves. + * The last administrator user cannot be deleted. + * + * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + * Please use the dedicated `delete_service_account` endpoint. + * + * DELETE /users/{user_id} -> String */ - public func delete_user_credentials_totp( + public func delete_user( /** * @param {String} user_id Id of user */ @@ -12780,98 +13183,129 @@ open class LookerSDK: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_totp", nil, nil, options) + let result: SDKResponse = self.delete("/users/\(path_user_id)", nil, nil, options) return result } /** - * ### LDAP login information for the specified user. + * ### Get information about the user with a credential of given type with specific id. + * + * This is used to do things like find users by their embed external_user_id. Or, find the user with + * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + * for the user and is specific to each type of credential. + * + * An example using the Ruby sdk might look like: + * + * `sdk.user_for_credential('embed', 'customer-4959425')` + * + * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + * which field in the given credential type is actually searched when finding a user with the supplied + * 'credential_id'. + * + * | Credential Types | Id Field Matched | + * | ---------------- | ---------------- | + * | email | email | + * | google | google_user_id | + * | saml | saml_user_id | + * | oidc | oidc_user_id | + * | ldap | ldap_id | + * | api | token | + * | api3 | client_id | + * | embed | external_user_id | + * | looker_openid | email | + * + * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/{user_id}/credentials_ldap -> CredentialsLDAP + * GET /users/credential/{credential_type}/{credential_id} -> User */ - public func user_credentials_ldap( + public func user_for_credential( /** - * @param {String} user_id Id of user + * @param {String} credential_type Type name of credential */ - _ user_id: String, + _ credential_type: String, + /** + * @param {String} credential_id Id of credential + */ + _ credential_id: String, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_ldap", + ) -> SDKResponse { + let path_credential_type = encodeParam(credential_type) + let path_credential_id = encodeParam(credential_id) + let result: SDKResponse = self.get("/users/credential/\(path_credential_type)/\(path_credential_id)", ["fields": fields], nil, options) return result } /** - * ### LDAP login information for the specified user. + * ### Update information for a specific service account. This action is restricted to Looker admins. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. * - * DELETE /users/{user_id}/credentials_ldap -> String + * PATCH /users/service_accounts/{user_id} -> ServiceAccount */ - public func delete_user_credentials_ldap( + public func update_service_account( /** - * @param {String} user_id Id of user + * @param {String} user_id Id of service account */ _ user_id: String, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_ldap", nil, nil, options) - return result - } - - /** - * ### Google authentication login information for the specified user. - * - * GET /users/{user_id}/credentials_google -> CredentialsGoogle - */ - public func user_credentials_google( /** - * @param {String} user_id Id of user + * @param {WriteServiceAccount} body */ - _ user_id: String, + _ body: WriteServiceAccount, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_google", - ["fields": fields], nil, options) + let result: SDKResponse = self.patch("/users/service_accounts/\(path_user_id)", + ["fields": fields], try! self.encode(body), options) return result } /** - * ### Google authentication login information for the specified user. + * ### Delete the service account with a specific id. * - * DELETE /users/{user_id}/credentials_google -> String + * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. + * + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the service account or that use their content will be deleted. + * * Alerts owned by the service account will be deleted. + * + * The service account cannot delete itself. + * + * DELETE /users/service_accounts/{user_id} -> String */ - public func delete_user_credentials_google( + public func delete_service_account( /** - * @param {String} user_id Id of user + * @param {String} user_id Id of service account user */ _ user_id: String, options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_google", nil, nil, options) + let result: SDKResponse = self.delete("/users/service_accounts/\(path_user_id)", nil, nil, options) return result } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * GET /users/{user_id}/credentials_saml -> CredentialsSaml + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_ldap -> CredentialsLDAP */ - public func user_credentials_saml( + public func user_credentials_ldap( /** * @param {String} user_id Id of user */ @@ -12881,19 +13315,21 @@ open class LookerSDK: APIMethods { */ fields: String? = nil, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_saml", + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_ldap", ["fields": fields], nil, options) return result } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * DELETE /users/{user_id}/credentials_saml -> String + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_ldap -> String */ - public func delete_user_credentials_saml( + public func delete_user_credentials_ldap( /** * @param {String} user_id Id of user */ @@ -12901,7 +13337,7 @@ open class LookerSDK: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_saml", nil, nil, options) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_ldap", nil, nil, options) return result } @@ -13145,49 +13581,6 @@ open class LookerSDK: APIMethods { return result } - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid - */ - public func user_credentials_looker_openid( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, - /** - * @param {String} fields Requested fields. - */ - fields: String? = nil, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_looker_openid", - ["fields": fields], nil, options) - return result - } - - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * DELETE /users/{user_id}/credentials_looker_openid -> String - */ - public func delete_user_credentials_looker_openid( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_looker_openid", nil, nil, options) - return result - } - /** * ### Web login session for the specified user. * @@ -13259,42 +13652,6 @@ open class LookerSDK: APIMethods { return result } - /** - * ### Create a password reset token. - * This will create a cryptographically secure random password reset token for the user. - * If the user already has a password reset token then this invalidates the old token and creates a new one. - * The token is expressed as the 'password_reset_url' of the user's email/password credential object. - * This takes an optional 'expires' param to indicate if the new token should be an expiring token. - * Tokens that expire are typically used for self-service password resets for existing users. - * Invitation emails for new users typically are not set to expire. - * The expire period is always 60 minutes when expires is enabled. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail - */ - public func create_user_credentials_email_password_reset( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, - /** - * @param {Bool} expires Expiring token. - */ - expires: Bool? = nil, - /** - * @param {String} fields Requested fields. - */ - fields: String? = nil, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email/password_reset", - ["expires": expires as Any?, "fields": fields], nil, options) - return result - } - /** * ### Get information about roles of a given user * @@ -13451,36 +13808,6 @@ open class LookerSDK: APIMethods { return result } - /** - * ### Send a password reset token. - * This will send a password reset email to the user. If a password reset token does not already exist - * for this user, it will create one and then send it. - * If the user has not yet set up their account, it will send a setup email to the user. - * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - * Password reset URLs will expire in 60 minutes. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail - */ - public func send_user_credentials_email_password_reset( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, - /** - * @param {String} fields Requested fields. - */ - fields: String? = nil, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email/send_password_reset", - ["fields": fields], nil, options) - return result - } - /** * ### Change a disabled user's email addresses * diff --git a/swift/looker/sdk/models.swift b/swift/looker/sdk/models.swift index df3758a94..cffcf0e3f 100644 --- a/swift/looker/sdk/models.swift +++ b/swift/looker/sdk/models.swift @@ -25,7 +25,7 @@ */ /** - * 461 API models: 363 Spec, 0 Request, 72 Write, 26 Enum + * 442 API models: 343 Spec, 0 Request, 73 Write, 26 Enum */ @@ -111,6 +111,9 @@ public struct Agent: SDKModel { case code_interpreter case _studio_agent_id = "studio_agent_id" case workflow_params + case is_lookml + case _lookml_agent_id = "lookml_agent_id" + case _lookml_edit_uri = "lookml_edit_uri" } /** * Operations the current user is able to perform on this object (read-only) @@ -264,7 +267,30 @@ public struct Agent: SDKModel { 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) { + /** + * Whether the agent is defined in LookML (read-only) + */ + public var is_lookml: Bool? + + private var _lookml_agent_id: AnyString? + /** + * LookML Agent ID (read-only) + */ + public var lookml_agent_id: String? { + get { _lookml_agent_id?.value } + set { _lookml_agent_id = newValue.map(AnyString.init) } + } + + private var _lookml_edit_uri: AnyString? + /** + * URI to edit the LookML definition of this agent (read-only) + */ + public var lookml_edit_uri: String? { + get { _lookml_edit_uri?.value } + set { _lookml_edit_uri = 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, 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, is_lookml: Bool? = nil, lookml_agent_id: String? = nil, lookml_edit_uri: String? = nil) { self.can = can self._id = id.map(AnyString.init) self._created_by_user_id = created_by_user_id.map(AnyString.init) @@ -287,6 +313,40 @@ public struct Agent: SDKModel { self.code_interpreter = code_interpreter self._studio_agent_id = studio_agent_id.map(AnyString.init) self.workflow_params = workflow_params + self.is_lookml = is_lookml + self._lookml_agent_id = lookml_agent_id.map(AnyString.init) + self._lookml_edit_uri = lookml_edit_uri.map(AnyString.init) + } + +} + +public struct AgentLookml: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _agent_id = "agent_id" + case _lookml = "lookml" + } + private var _agent_id: AnyString? + /** + * Id of Agent (read-only) + */ + public var agent_id: String? { + get { _agent_id?.value } + set { _agent_id = newValue.map(AnyString.init) } + } + + private var _lookml: AnyString? + /** + * lookml of UDD Agent (read-only) + */ + public var lookml: String? { + get { _lookml?.value } + set { _lookml = newValue.map(AnyString.init) } + } + + public init(agent_id: String? = nil, lookml: String? = nil) { + self._agent_id = agent_id.map(AnyString.init) + self._lookml = lookml.map(AnyString.init) } } @@ -1448,240 +1508,6 @@ public struct ArtifactUsage: SDKModel { } -public struct AssertValidatorErrorItem: SDKModel { - public var assert_error: AssertValidatorTestError? - - public var generic_error: GenericError? - - public init(assert_error: AssertValidatorTestError? = nil, generic_error: GenericError? = nil) { - self.assert_error = assert_error - self.generic_error = generic_error - } - -} - -public struct AssertValidatorResult: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _name = "name" - case _status = "status" - case results - } - private var _name: AnyString? - /** - * Name of the validator (assert) (read-only) - */ - public var name: String? { - get { _name?.value } - set { _name = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - /** - * Results of the validation (read-only) - */ - public var results: [AssertValidatorTestedExplore]? - - public init(name: String? = nil, status: String? = nil, results: [AssertValidatorTestedExplore]? = nil) { - self._name = name.map(AnyString.init) - self._status = status.map(AnyString.init) - self.results = results - } - -} - -public struct AssertValidatorTestedExplore: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _error_count = "error_count" - case errors - case _success_count = "success_count" - case successes - } - private var _error_count: AnyInt? - /** - * Total number of failed data tests (read-only) - */ - public var error_count: Int64? { - get { _error_count?.value } - set { _error_count = newValue.map(AnyInt.init) } - } - - /** - * Details of data tests that failed validation (read-only) - */ - public var errors: [AssertValidatorErrorItem]? - - private var _success_count: AnyString? - /** - * Total number of successful data tests (read-only) - */ - public var success_count: String? { - get { _success_count?.value } - set { _success_count = newValue.map(AnyString.init) } - } - - /** - * Details of data tests that passed validation (read-only) - */ - public var successes: [AssertValidatorTestSuccess]? - - public init(error_count: Int64? = nil, errors: [AssertValidatorErrorItem]? = nil, success_count: String? = nil, successes: [AssertValidatorTestSuccess]? = nil) { - self._error_count = error_count.map(AnyInt.init) - self.errors = errors - self._success_count = success_count.map(AnyString.init) - self.successes = successes - } - -} - -public struct AssertValidatorTestError: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _model = "model" - case _explore = "explore" - case _test_name = "test_name" - case _explore_url = "explore_url" - case _lookml_url = "lookml_url" - case _message = "message" - } - private var _model: AnyString? - /** - * LookML model that contains the data test (read-only) - */ - public var model: String? { - get { _model?.value } - set { _model = newValue.map(AnyString.init) } - } - - private var _explore: AnyString? - /** - * LookML Explore that is used as the explore_source for the data test (read-only) - */ - public var explore: String? { - get { _explore?.value } - set { _explore = newValue.map(AnyString.init) } - } - - private var _test_name: AnyString? - /** - * Name of the data test (read-only) - */ - public var test_name: String? { - get { _test_name?.value } - set { _test_name = newValue.map(AnyString.init) } - } - - private var _explore_url: AnyString? - /** - * URL to the Explore (read-only) - */ - public var explore_url: String? { - get { _explore_url?.value } - set { _explore_url = newValue.map(AnyString.init) } - } - - private var _lookml_url: AnyString? - /** - * URL to the LookML file where the data test is defined (read-only) - */ - public var lookml_url: String? { - get { _lookml_url?.value } - set { _lookml_url = newValue.map(AnyString.init) } - } - - private var _message: AnyString? - /** - * Message returned by the data test (read-only) - */ - public var message: String? { - get { _message?.value } - set { _message = newValue.map(AnyString.init) } - } - - public init(model: String? = nil, explore: String? = nil, test_name: String? = nil, explore_url: String? = nil, lookml_url: String? = nil, message: String? = nil) { - self._model = model.map(AnyString.init) - self._explore = explore.map(AnyString.init) - self._test_name = test_name.map(AnyString.init) - self._explore_url = explore_url.map(AnyString.init) - self._lookml_url = lookml_url.map(AnyString.init) - self._message = message.map(AnyString.init) - } - -} - -public struct AssertValidatorTestSuccess: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _model = "model" - case _explore = "explore" - case _test_name = "test_name" - case _explore_url = "explore_url" - case _lookml_url = "lookml_url" - } - private var _model: AnyString? - /** - * LookML model that contains the data test (read-only) - */ - public var model: String? { - get { _model?.value } - set { _model = newValue.map(AnyString.init) } - } - - private var _explore: AnyString? - /** - * LookML Explore that is used as the explore_source for the data test (read-only) - */ - public var explore: String? { - get { _explore?.value } - set { _explore = newValue.map(AnyString.init) } - } - - private var _test_name: AnyString? - /** - * Name of the data test (read-only) - */ - public var test_name: String? { - get { _test_name?.value } - set { _test_name = newValue.map(AnyString.init) } - } - - private var _explore_url: AnyString? - /** - * URL to the Explore (read-only) - */ - public var explore_url: String? { - get { _explore_url?.value } - set { _explore_url = newValue.map(AnyString.init) } - } - - private var _lookml_url: AnyString? - /** - * URL to the LookML file where the data test is defined (read-only) - */ - public var lookml_url: String? { - get { _lookml_url?.value } - set { _lookml_url = newValue.map(AnyString.init) } - } - - public init(model: String? = nil, explore: String? = nil, test_name: String? = nil, explore_url: String? = nil, lookml_url: String? = nil) { - self._model = model.map(AnyString.init) - self._explore = explore.map(AnyString.init) - self._test_name = test_name.map(AnyString.init) - self._explore_url = explore_url.map(AnyString.init) - self._lookml_url = lookml_url.map(AnyString.init) - } - -} - public struct AsyncDeployResponse: SDKModel { private enum CodingKeys : String, CodingKey { @@ -2878,59 +2704,6 @@ public struct CIAssertValidatorTestSuccess: SDKModel { } -public struct CIChangeRequest: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _change_request_number = "change_request_number" - case _change_request_url = "change_request_url" - case _change_request_name = "change_request_name" - case _change_request_commits_url = "change_request_commits_url" - } - private var _change_request_number: AnyInt? - /** - * Numeric identifier of the change request (read-only) - */ - public var change_request_number: Int64? { - get { _change_request_number?.value } - set { _change_request_number = newValue.map(AnyInt.init) } - } - - private var _change_request_url: AnyString? - /** - * URL of the change request (read-only) - */ - public var change_request_url: String? { - get { _change_request_url?.value } - set { _change_request_url = newValue.map(AnyString.init) } - } - - private var _change_request_name: AnyString? - /** - * Name of the change request (read-only) - */ - public var change_request_name: String? { - get { _change_request_name?.value } - set { _change_request_name = newValue.map(AnyString.init) } - } - - private var _change_request_commits_url: AnyString? - /** - * For PR-triggered CI runs, the URL to the change request commit that triggered the run. (read-only) - */ - public var change_request_commits_url: String? { - get { _change_request_commits_url?.value } - set { _change_request_commits_url = newValue.map(AnyString.init) } - } - - public init(change_request_number: Int64? = nil, change_request_url: String? = nil, change_request_name: String? = nil, change_request_commits_url: String? = nil) { - self._change_request_number = change_request_number.map(AnyInt.init) - self._change_request_url = change_request_url.map(AnyString.init) - self._change_request_name = change_request_name.map(AnyString.init) - self._change_request_commits_url = change_request_commits_url.map(AnyString.init) - } - -} - public struct CIContentValidatorContentError: SDKModel { private enum CodingKeys : String, CodingKey { @@ -3286,59 +3059,6 @@ public struct CIGenericError: SDKModel { } -public struct CIGitState: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _branch = "branch" - case _repository = "repository" - case _commit_ref = "commit_ref" - case _target = "target" - } - private var _branch: AnyString? - /** - * Git branch that the CI run validates (read-only) - */ - public var branch: String? { - get { _branch?.value } - set { _branch = newValue.map(AnyString.init) } - } - - private var _repository: AnyString? - /** - * Git repository that contains the Git branch being validated (read-only) - */ - public var repository: String? { - get { _repository?.value } - set { _repository = newValue.map(AnyString.init) } - } - - private var _commit_ref: AnyString? - /** - * Git commit that the CI run validates (read-only) - */ - public var commit_ref: String? { - get { _commit_ref?.value } - set { _commit_ref = newValue.map(AnyString.init) } - } - - private var _target: AnyString? - /** - * For incremental runs, the Git branch that the CI run compares against during validation (read-only) - */ - public var target: String? { - get { _target?.value } - set { _target = newValue.map(AnyString.init) } - } - - public init(branch: String? = nil, repository: String? = nil, commit_ref: String? = nil, target: String? = nil) { - self._branch = branch.map(AnyString.init) - self._repository = repository.map(AnyString.init) - self._commit_ref = commit_ref.map(AnyString.init) - self._target = target.map(AnyString.init) - } - -} - public struct CILookMLValidatorError: SDKModel { private enum CodingKeys : String, CodingKey { @@ -3577,6 +3297,9 @@ public struct CIRun: SDKModel { case _git_target_branch_name = "git_target_branch_name" case _git_status_url = "git_status_url" case _git_target_url = "git_target_url" + case _dbt_cloud_git_branch_name = "dbt_cloud_git_branch_name" + case _dbt_cloud_git_commit_ref = "dbt_cloud_git_commit_ref" + case _dbt_cloud_git_repository_name = "dbt_cloud_git_repository_name" case created_at case started_at case finished_at @@ -3586,6 +3309,7 @@ public struct CIRun: SDKModel { case _crashed_check_count = "crashed_check_count" case _run_url = "run_url" case user_attributes + case project_imports } /** * Operations the current user is able to perform on this object (read-only) @@ -3774,6 +3498,33 @@ public struct CIRun: SDKModel { set { _git_target_url = newValue.map(AnyString.init) } } + private var _dbt_cloud_git_branch_name: AnyString? + /** + * Git branch name in dbt Cloud + */ + public var dbt_cloud_git_branch_name: String? { + get { _dbt_cloud_git_branch_name?.value } + set { _dbt_cloud_git_branch_name = newValue.map(AnyString.init) } + } + + private var _dbt_cloud_git_commit_ref: AnyString? + /** + * Git commit ref in dbt Cloud + */ + public var dbt_cloud_git_commit_ref: String? { + get { _dbt_cloud_git_commit_ref?.value } + set { _dbt_cloud_git_commit_ref = newValue.map(AnyString.init) } + } + + private var _dbt_cloud_git_repository_name: AnyString? + /** + * Git repository name in dbt Cloud + */ + public var dbt_cloud_git_repository_name: String? { + get { _dbt_cloud_git_repository_name?.value } + set { _dbt_cloud_git_repository_name = newValue.map(AnyString.init) } + } + /** * Time and date that the CI run was created (read-only) */ @@ -3835,7 +3586,12 @@ public struct CIRun: SDKModel { */ public var user_attributes: [CIRunUserAttribute]? - public init(can: StringDictionary? = nil, id: String? = nil, ci_suite_id: String? = nil, project_id: String? = nil, status: String? = nil, title: String? = nil, trigger_type: String? = nil, user_id: Int64? = nil, triggered_by_name: String? = nil, execution_id: String? = nil, result: CIRunResult? = nil, change_request_number: Int64? = nil, change_request_url: String? = nil, change_request_name: String? = nil, change_request_commits_url: String? = nil, git_service_name: String? = nil, git_commit_ref: String? = nil, git_branch_name: String? = nil, git_repository_name: String? = nil, git_target_branch_name: String? = nil, git_status_url: String? = nil, git_target_url: String? = nil, created_at: Date? = nil, started_at: Date? = nil, finished_at: Date? = nil, retries: Int64? = nil, assigned_ci_user_id: Int64? = nil, assigned_ci_user_at: Date? = nil, crashed_check_count: Int64? = nil, run_url: String? = nil, user_attributes: [CIRunUserAttribute]? = nil) { + /** + * Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run (read-only) + */ + public var project_imports: StringDictionary? + + public init(can: StringDictionary? = nil, id: String? = nil, ci_suite_id: String? = nil, project_id: String? = nil, status: String? = nil, title: String? = nil, trigger_type: String? = nil, user_id: Int64? = nil, triggered_by_name: String? = nil, execution_id: String? = nil, result: CIRunResult? = nil, change_request_number: Int64? = nil, change_request_url: String? = nil, change_request_name: String? = nil, change_request_commits_url: String? = nil, git_service_name: String? = nil, git_commit_ref: String? = nil, git_branch_name: String? = nil, git_repository_name: String? = nil, git_target_branch_name: String? = nil, git_status_url: String? = nil, git_target_url: String? = nil, dbt_cloud_git_branch_name: String? = nil, dbt_cloud_git_commit_ref: String? = nil, dbt_cloud_git_repository_name: String? = nil, created_at: Date? = nil, started_at: Date? = nil, finished_at: Date? = nil, retries: Int64? = nil, assigned_ci_user_id: Int64? = nil, assigned_ci_user_at: Date? = nil, crashed_check_count: Int64? = nil, run_url: String? = nil, user_attributes: [CIRunUserAttribute]? = nil, project_imports: StringDictionary? = nil) { self.can = can self._id = id.map(AnyString.init) self._ci_suite_id = ci_suite_id.map(AnyString.init) @@ -3858,6 +3614,9 @@ public struct CIRun: SDKModel { self._git_target_branch_name = git_target_branch_name.map(AnyString.init) self._git_status_url = git_status_url.map(AnyString.init) self._git_target_url = git_target_url.map(AnyString.init) + self._dbt_cloud_git_branch_name = dbt_cloud_git_branch_name.map(AnyString.init) + self._dbt_cloud_git_commit_ref = dbt_cloud_git_commit_ref.map(AnyString.init) + self._dbt_cloud_git_repository_name = dbt_cloud_git_repository_name.map(AnyString.init) self.created_at = created_at self.started_at = started_at self.finished_at = finished_at @@ -3867,6 +3626,7 @@ public struct CIRun: SDKModel { self._crashed_check_count = crashed_check_count.map(AnyInt.init) self._run_url = run_url.map(AnyString.init) self.user_attributes = user_attributes + self.project_imports = project_imports } } @@ -3888,9 +3648,13 @@ public struct CIRunResult: SDKModel { public var lookml_error: CIGenericError? + public var style_result: CIStyleValidatorResult? + + public var style_error: CIGenericError? + public var generic_error: CIGenericError? - public init(sql_result: CISqlValidatorResult? = nil, sql_error: CIGenericError? = nil, assert_result: CIAssertValidatorResult? = nil, assert_error: CIGenericError? = nil, content_result: CIContentValidatorResult? = nil, content_error: CIGenericError? = nil, lookml_result: CILookMLValidatorResult? = nil, lookml_error: CIGenericError? = nil, generic_error: CIGenericError? = nil) { + public init(sql_result: CISqlValidatorResult? = nil, sql_error: CIGenericError? = nil, assert_result: CIAssertValidatorResult? = nil, assert_error: CIGenericError? = nil, content_result: CIContentValidatorResult? = nil, content_error: CIGenericError? = nil, lookml_result: CILookMLValidatorResult? = nil, lookml_error: CIGenericError? = nil, style_result: CIStyleValidatorResult? = nil, style_error: CIGenericError? = nil, generic_error: CIGenericError? = nil) { self.sql_result = sql_result self.sql_error = sql_error self.assert_result = assert_result @@ -3899,6 +3663,8 @@ public struct CIRunResult: SDKModel { self.content_error = content_error self.lookml_result = lookml_result self.lookml_error = lookml_error + self.style_result = style_result + self.style_error = style_error self.generic_error = generic_error } @@ -3946,56 +3712,276 @@ public struct CIRunUserAttribute: SDKModel { } -public struct CIScheduleTrigger: SDKModel { +public struct CISqlValidatorError: SDKModel { private enum CodingKeys : String, CodingKey { - case enabled - case _day = "day" - case _hour = "hour" - case _frequency = "frequency" + case _type = "type" + case _title = "title" + case _detail = "detail" + case _status = "status" + case _instance = "instance" + case _model = "model" + case _explore = "explore" + case _message = "message" + case _explore_url = "explore_url" + case _lookml_url = "lookml_url" + case _dimension = "dimension" + case _line_number = "line_number" } + private var _type: AnyString? /** - * Whether the CI run schedule is active (read-only) + * A URI reference that identifies the problem type */ - public var enabled: Bool? + public var type: String? { + get { _type?.value } + set { _type = newValue.map(AnyString.init) } + } - private var _day: AnyString? + private var _title: AnyString? /** - * For scheduled runs, day of the week that the CI run is scheduled (read-only) + * Overview of the error */ - public var day: String? { - get { _day?.value } - set { _day = newValue.map(AnyString.init) } + public var title: String? { + get { _title?.value } + set { _title = newValue.map(AnyString.init) } } - private var _hour: AnyString? + private var _detail: AnyString? /** - * For schedules runs, the hour of the day (24 hour format) that the CI run is scheduled (read-only) + * Detail of the error */ - public var hour: String? { - get { _hour?.value } - set { _hour = newValue.map(AnyString.init) } + public var detail: String? { + get { _detail?.value } + set { _detail = newValue.map(AnyString.init) } } - private var _frequency: AnyString? + private var _status: AnyString? /** - * For scheduled runs, how often the CI run is scheduled to run (hourly, daily, weekly) (read-only) + * The HTTP status code for the problem */ - public var frequency: String? { - get { _frequency?.value } - set { _frequency = newValue.map(AnyString.init) } + public var status: String? { + get { _status?.value } + set { _status = newValue.map(AnyString.init) } } - public init(enabled: Bool? = nil, day: String? = nil, hour: String? = nil, frequency: String? = nil) { - self.enabled = enabled - self._day = day.map(AnyString.init) - self._hour = hour.map(AnyString.init) - self._frequency = frequency.map(AnyString.init) + private var _instance: AnyString? + /** + * URI reference that identifies the specific occurrence of the problem + */ + public var instance: String? { + get { _instance?.value } + set { _instance = newValue.map(AnyString.init) } + } + + private var _model: AnyString? + /** + * LookML model that contains the Explore that failed SQL validation + */ + public var model: String? { + get { _model?.value } + set { _model = newValue.map(AnyString.init) } + } + + private var _explore: AnyString? + /** + * LookML Explore that failed SQL validation + */ + public var explore: String? { + get { _explore?.value } + set { _explore = newValue.map(AnyString.init) } + } + + private var _message: AnyString? + /** + * Message returned by the SQL validation + */ + public var message: String? { + get { _message?.value } + set { _message = newValue.map(AnyString.init) } + } + + private var _explore_url: AnyString? + /** + * URL to the Explore + */ + public var explore_url: String? { + get { _explore_url?.value } + set { _explore_url = newValue.map(AnyString.init) } + } + + private var _lookml_url: AnyString? + /** + * URL to the LookML that caused the error + */ + public var lookml_url: String? { + get { _lookml_url?.value } + set { _lookml_url = newValue.map(AnyString.init) } + } + + private var _dimension: AnyString? + /** + * LookML dimension that caused the error + */ + public var dimension: String? { + get { _dimension?.value } + set { _dimension = newValue.map(AnyString.init) } + } + + private var _line_number: AnyString? + /** + * Line of the error in the LookML file + */ + public var line_number: String? { + get { _line_number?.value } + set { _line_number = newValue.map(AnyString.init) } + } + + public init(type: String? = nil, title: String? = nil, detail: String? = nil, status: String? = nil, instance: String? = nil, model: String? = nil, explore: String? = nil, message: String? = nil, explore_url: String? = nil, lookml_url: String? = nil, dimension: String? = nil, line_number: String? = nil) { + self._type = type.map(AnyString.init) + self._title = title.map(AnyString.init) + self._detail = detail.map(AnyString.init) + self._status = status.map(AnyString.init) + self._instance = instance.map(AnyString.init) + self._model = model.map(AnyString.init) + self._explore = explore.map(AnyString.init) + self._message = message.map(AnyString.init) + self._explore_url = explore_url.map(AnyString.init) + self._lookml_url = lookml_url.map(AnyString.init) + self._dimension = dimension.map(AnyString.init) + self._line_number = line_number.map(AnyString.init) } } -public struct CISqlValidatorError: SDKModel { +public struct CISqlValidatorErrorItem: SDKModel { + public var sql_error: CISqlValidatorError? + + public var generic_error: CIGenericError? + + public init(sql_error: CISqlValidatorError? = nil, generic_error: CIGenericError? = nil) { + self.sql_error = sql_error + self.generic_error = generic_error + } + +} + +public struct CISqlValidatorResult: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _name = "name" + case incremental + case _status = "status" + case tested + } + private var _name: AnyString? + /** + * Name of the validator (sql) + */ + public var name: String? { + get { _name?.value } + set { _name = newValue.map(AnyString.init) } + } + + /** + * Whether the validation was incremental + */ + public var incremental: Bool? + + private var _status: AnyString? + /** + * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) + */ + public var status: String? { + get { _status?.value } + set { _status = newValue.map(AnyString.init) } + } + + /** + * The results of tested Explores + */ + public var tested: [CISqlValidatorTestedExplore]? + + public init(name: String? = nil, incremental: Bool? = nil, status: String? = nil, tested: [CISqlValidatorTestedExplore]? = nil) { + self._name = name.map(AnyString.init) + self.incremental = incremental + self._status = status.map(AnyString.init) + self.tested = tested + } + +} + +public struct CISqlValidatorTestedExplore: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _model = "model" + case _explore = "explore" + case _status = "status" + case _skip_reason = "skip_reason" + case _error_count = "error_count" + case errors + } + private var _model: AnyString? + /** + * LookML model that was tested + */ + public var model: String? { + get { _model?.value } + set { _model = newValue.map(AnyString.init) } + } + + private var _explore: AnyString? + /** + * LookML Explore that was tested + */ + public var explore: String? { + get { _explore?.value } + set { _explore = newValue.map(AnyString.init) } + } + + private var _status: AnyString? + /** + * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) + */ + public var status: String? { + get { _status?.value } + set { _status = newValue.map(AnyString.init) } + } + + private var _skip_reason: AnyString? + /** + * Reason the validation was skipped + */ + public var skip_reason: String? { + get { _skip_reason?.value } + set { _skip_reason = newValue.map(AnyString.init) } + } + + private var _error_count: AnyInt? + /** + * Total number of failed validations + */ + public var error_count: Int64? { + get { _error_count?.value } + set { _error_count = newValue.map(AnyInt.init) } + } + + /** + * Details of the LookML that failed SQL validation + */ + public var errors: [CISqlValidatorErrorItem]? + + public init(model: String? = nil, explore: String? = nil, status: String? = nil, skip_reason: String? = nil, error_count: Int64? = nil, errors: [CISqlValidatorErrorItem]? = nil) { + self._model = model.map(AnyString.init) + self._explore = explore.map(AnyString.init) + self._status = status.map(AnyString.init) + self._skip_reason = skip_reason.map(AnyString.init) + self._error_count = error_count.map(AnyInt.init) + self.errors = errors + } + +} + +public struct CIStyleValidatorError: SDKModel { private enum CodingKeys : String, CodingKey { case _type = "type" @@ -4005,11 +3991,21 @@ public struct CISqlValidatorError: SDKModel { case _instance = "instance" case _model = "model" case _explore = "explore" + case _field_name = "field_name" case _message = "message" - case _explore_url = "explore_url" - case _lookml_url = "lookml_url" - case _dimension = "dimension" + case _severity = "severity" case _line_number = "line_number" + case _character = "character" + case _lookml_url = "lookml_url" + case _file_path = "file_path" + case _rule_name = "rule_name" + case _entity_type = "entity_type" + case _entity_name = "entity_name" + case is_incremental + case _error_id = "error_id" + case _documentation_url = "documentation_url" + case _context = "context" + case _context_line_number = "context_line_number" } private var _type: AnyString? /** @@ -4058,7 +4054,7 @@ public struct CISqlValidatorError: SDKModel { private var _model: AnyString? /** - * LookML model that contains the Explore that failed SQL validation + * LookML model that contains the error */ public var model: String? { get { _model?.value } @@ -4067,29 +4063,56 @@ public struct CISqlValidatorError: SDKModel { private var _explore: AnyString? /** - * LookML Explore that failed SQL validation + * LookML Explore that contains the error */ public var explore: String? { get { _explore?.value } set { _explore = newValue.map(AnyString.init) } } + private var _field_name: AnyString? + /** + * LookML field that caused the error + */ + public var field_name: String? { + get { _field_name?.value } + set { _field_name = newValue.map(AnyString.init) } + } + private var _message: AnyString? /** - * Message returned by the SQL validation + * Message returned by the style validator */ public var message: String? { get { _message?.value } set { _message = newValue.map(AnyString.init) } } - private var _explore_url: AnyString? + private var _severity: AnyString? /** - * URL to the Explore + * Severity of the error (warning, error, fatal, info, success) */ - public var explore_url: String? { - get { _explore_url?.value } - set { _explore_url = newValue.map(AnyString.init) } + public var severity: String? { + get { _severity?.value } + set { _severity = newValue.map(AnyString.init) } + } + + private var _line_number: AnyInt? + /** + * Line number of the error in the LookML file + */ + public var line_number: Int64? { + get { _line_number?.value } + set { _line_number = newValue.map(AnyInt.init) } + } + + private var _character: AnyInt? + /** + * Character offset of the error in the LookML file + */ + public var character: Int64? { + get { _character?.value } + set { _character = newValue.map(AnyInt.init) } } private var _lookml_url: AnyString? @@ -4101,25 +4124,84 @@ public struct CISqlValidatorError: SDKModel { set { _lookml_url = newValue.map(AnyString.init) } } - private var _dimension: AnyString? + private var _file_path: AnyString? /** - * LookML dimension that caused the error + * IDE folder path to the LookML file that caused the error */ - public var dimension: String? { - get { _dimension?.value } - set { _dimension = newValue.map(AnyString.init) } + public var file_path: String? { + get { _file_path?.value } + set { _file_path = newValue.map(AnyString.init) } } - private var _line_number: AnyString? + private var _rule_name: AnyString? /** - * Line of the error in the LookML file + * Name of the style rule */ - public var line_number: String? { - get { _line_number?.value } - set { _line_number = newValue.map(AnyString.init) } + public var rule_name: String? { + get { _rule_name?.value } + set { _rule_name = newValue.map(AnyString.init) } } - public init(type: String? = nil, title: String? = nil, detail: String? = nil, status: String? = nil, instance: String? = nil, model: String? = nil, explore: String? = nil, message: String? = nil, explore_url: String? = nil, lookml_url: String? = nil, dimension: String? = nil, line_number: String? = nil) { + private var _entity_type: AnyString? + /** + * Type of LookML entity evaluated + */ + public var entity_type: String? { + get { _entity_type?.value } + set { _entity_type = newValue.map(AnyString.init) } + } + + private var _entity_name: AnyString? + /** + * Name of LookML entity evaluated + */ + public var entity_name: String? { + get { _entity_name?.value } + set { _entity_name = newValue.map(AnyString.init) } + } + + /** + * Whether the error was newly introduced + */ + public var is_incremental: Bool? + + private var _error_id: AnyString? + /** + * Deterministic fingerprint of the violation + */ + public var error_id: String? { + get { _error_id?.value } + set { _error_id = newValue.map(AnyString.init) } + } + + private var _documentation_url: AnyString? + /** + * URL to documentation for the style rule + */ + public var documentation_url: String? { + get { _documentation_url?.value } + set { _documentation_url = newValue.map(AnyString.init) } + } + + private var _context: [AnyString]? + /** + * LookML source code snippet lines surrounding the error + */ + public var context: [String]? { + get { if let v = _context { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _context = v.map { AnyString.init($0) } } else { _context = nil } } + } + + private var _context_line_number: AnyInt? + /** + * Line number where the context code snippet begins + */ + public var context_line_number: Int64? { + get { _context_line_number?.value } + set { _context_line_number = newValue.map(AnyInt.init) } + } + + public init(type: String? = nil, title: String? = nil, detail: String? = nil, status: String? = nil, instance: String? = nil, model: String? = nil, explore: String? = nil, field_name: String? = nil, message: String? = nil, severity: String? = nil, line_number: Int64? = nil, character: Int64? = nil, lookml_url: String? = nil, file_path: String? = nil, rule_name: String? = nil, entity_type: String? = nil, entity_name: String? = nil, is_incremental: Bool? = nil, error_id: String? = nil, documentation_url: String? = nil, context: [String]? = nil, context_line_number: Int64? = nil) { self._type = type.map(AnyString.init) self._title = title.map(AnyString.init) self._detail = detail.map(AnyString.init) @@ -4127,38 +4209,49 @@ public struct CISqlValidatorError: SDKModel { self._instance = instance.map(AnyString.init) self._model = model.map(AnyString.init) self._explore = explore.map(AnyString.init) + self._field_name = field_name.map(AnyString.init) self._message = message.map(AnyString.init) - self._explore_url = explore_url.map(AnyString.init) + self._severity = severity.map(AnyString.init) + self._line_number = line_number.map(AnyInt.init) + self._character = character.map(AnyInt.init) self._lookml_url = lookml_url.map(AnyString.init) - self._dimension = dimension.map(AnyString.init) - self._line_number = line_number.map(AnyString.init) + self._file_path = file_path.map(AnyString.init) + self._rule_name = rule_name.map(AnyString.init) + self._entity_type = entity_type.map(AnyString.init) + self._entity_name = entity_name.map(AnyString.init) + self.is_incremental = is_incremental + self._error_id = error_id.map(AnyString.init) + self._documentation_url = documentation_url.map(AnyString.init) + if let v = context { _context = v.map { AnyString.init($0) } } else { _context = nil } + self._context_line_number = context_line_number.map(AnyInt.init) } } -public struct CISqlValidatorErrorItem: SDKModel { - public var sql_error: CISqlValidatorError? +public struct CIStyleValidatorErrorItem: SDKModel { + public var style_error: CIStyleValidatorError? public var generic_error: CIGenericError? - public init(sql_error: CISqlValidatorError? = nil, generic_error: CIGenericError? = nil) { - self.sql_error = sql_error + public init(style_error: CIStyleValidatorError? = nil, generic_error: CIGenericError? = nil) { + self.style_error = style_error self.generic_error = generic_error } } -public struct CISqlValidatorResult: SDKModel { +public struct CIStyleValidatorResult: SDKModel { private enum CodingKeys : String, CodingKey { case _name = "name" case incremental case _status = "status" - case tested + case _error_count = "error_count" + case errors } private var _name: AnyString? /** - * Name of the validator (sql) + * Name of the validator (style) */ public var name: String? { get { _name?.value } @@ -4179,69 +4272,9 @@ public struct CISqlValidatorResult: SDKModel { set { _status = newValue.map(AnyString.init) } } - /** - * The results of tested Explores - */ - public var tested: [CISqlValidatorTestedExplore]? - - public init(name: String? = nil, incremental: Bool? = nil, status: String? = nil, tested: [CISqlValidatorTestedExplore]? = nil) { - self._name = name.map(AnyString.init) - self.incremental = incremental - self._status = status.map(AnyString.init) - self.tested = tested - } - -} - -public struct CISqlValidatorTestedExplore: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _model = "model" - case _explore = "explore" - case _status = "status" - case _skip_reason = "skip_reason" - case _error_count = "error_count" - case errors - } - private var _model: AnyString? - /** - * LookML model that was tested - */ - public var model: String? { - get { _model?.value } - set { _model = newValue.map(AnyString.init) } - } - - private var _explore: AnyString? - /** - * LookML Explore that was tested - */ - public var explore: String? { - get { _explore?.value } - set { _explore = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - private var _skip_reason: AnyString? - /** - * Reason the validation was skipped - */ - public var skip_reason: String? { - get { _skip_reason?.value } - set { _skip_reason = newValue.map(AnyString.init) } - } - private var _error_count: AnyInt? /** - * Total number of failed validations + * Total number of failed style validations */ public var error_count: Int64? { get { _error_count?.value } @@ -4249,15 +4282,14 @@ public struct CISqlValidatorTestedExplore: SDKModel { } /** - * Details of the LookML that failed SQL validation + * Details of the LookML that failed style validation */ - public var errors: [CISqlValidatorErrorItem]? + public var errors: [CIStyleValidatorErrorItem]? - public init(model: String? = nil, explore: String? = nil, status: String? = nil, skip_reason: String? = nil, error_count: Int64? = nil, errors: [CISqlValidatorErrorItem]? = nil) { - self._model = model.map(AnyString.init) - self._explore = explore.map(AnyString.init) + public init(name: String? = nil, incremental: Bool? = nil, status: String? = nil, error_count: Int64? = nil, errors: [CIStyleValidatorErrorItem]? = nil) { + self._name = name.map(AnyString.init) + self.incremental = incremental self._status = status.map(AnyString.init) - self._skip_reason = skip_reason.map(AnyString.init) self._error_count = error_count.map(AnyInt.init) self.errors = errors } @@ -4867,6 +4899,7 @@ public struct ContentSearch: SDKModel { case _created_by_id = "created_by_id" case _certification_status = "certification_status" case _parent_folder_name = "parent_folder_name" + case _parent_project_name = "parent_project_name" } /** * Operations the current user is able to perform on this object (read-only) @@ -4981,7 +5014,16 @@ public struct ContentSearch: SDKModel { set { _parent_folder_name = newValue.map(AnyString.init) } } - public init(can: StringDictionary? = nil, content_id: String? = nil, type: String? = nil, title: String? = nil, description: String? = nil, folder_id: String? = nil, folder_name: String? = nil, view_count: Int64? = nil, preferred_viewer: String? = nil, model: String? = nil, created_by_id: Int64? = nil, certification_status: String? = nil, parent_folder_name: String? = nil) { + private var _parent_project_name: AnyString? + /** + * Name of the parent project of the content (read-only) + */ + public var parent_project_name: String? { + get { _parent_project_name?.value } + set { _parent_project_name = newValue.map(AnyString.init) } + } + + public init(can: StringDictionary? = nil, content_id: String? = nil, type: String? = nil, title: String? = nil, description: String? = nil, folder_id: String? = nil, folder_name: String? = nil, view_count: Int64? = nil, preferred_viewer: String? = nil, model: String? = nil, created_by_id: Int64? = nil, certification_status: String? = nil, parent_folder_name: String? = nil, parent_project_name: String? = nil) { self.can = can self._content_id = content_id.map(AnyString.init) self._type = type.map(AnyString.init) @@ -4995,6 +5037,7 @@ public struct ContentSearch: SDKModel { self._created_by_id = created_by_id.map(AnyInt.init) self._certification_status = certification_status.map(AnyString.init) self._parent_folder_name = parent_folder_name.map(AnyString.init) + self._parent_project_name = parent_project_name.map(AnyString.init) } } @@ -6003,169 +6046,6 @@ public struct ContentValidationScheduledPlan: SDKModel { } -public struct ContentValidatorContentError: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _type = "type" - case _title = "title" - case _detail = "detail" - case _status = "status" - case _instance = "instance" - case _model = "model" - case _explore = "explore" - case _field_name = "field_name" - case _content_type = "content_type" - case _folder = "folder" - case _url = "url" - case _tile_type = "tile_type" - case _tile_title = "tile_title" - case _message = "message" - } - private var _type: AnyString? - /** - * A URI reference that identifies the problem type (read-only) - */ - public var type: String? { - get { _type?.value } - set { _type = newValue.map(AnyString.init) } - } - - private var _title: AnyString? - /** - * Overview of the error (read-only) - */ - public var title: String? { - get { _title?.value } - set { _title = newValue.map(AnyString.init) } - } - - private var _detail: AnyString? - /** - * Detail of the error (read-only) - */ - public var detail: String? { - get { _detail?.value } - set { _detail = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * The HTTP status code for the problem (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - private var _instance: AnyString? - /** - * URI reference that identifies the specific occurrence of the problem (read-only) - */ - public var instance: String? { - get { _instance?.value } - set { _instance = newValue.map(AnyString.init) } - } - - private var _model: AnyString? - /** - * LookML model that contains the error (read-only) - */ - public var model: String? { - get { _model?.value } - set { _model = newValue.map(AnyString.init) } - } - - private var _explore: AnyString? - /** - * LookML Explore that contains the error (read-only) - */ - public var explore: String? { - get { _explore?.value } - set { _explore = newValue.map(AnyString.init) } - } - - private var _field_name: AnyString? - /** - * LookML field that caused the error (read-only) - */ - public var field_name: String? { - get { _field_name?.value } - set { _field_name = newValue.map(AnyString.init) } - } - - private var _content_type: AnyString? - /** - * Type of the content (dashboard, look) (read-only) - */ - public var content_type: String? { - get { _content_type?.value } - set { _content_type = newValue.map(AnyString.init) } - } - - private var _folder: AnyString? - /** - * Folder of the content (read-only) - */ - public var folder: String? { - get { _folder?.value } - set { _folder = newValue.map(AnyString.init) } - } - - private var _url: AnyString? - /** - * URL of the content (read-only) - */ - public var url: String? { - get { _url?.value } - set { _url = newValue.map(AnyString.init) } - } - - private var _tile_type: AnyString? - /** - * Type of the tile (dashboard_element, dashboard_filter) (read-only) - */ - public var tile_type: String? { - get { _tile_type?.value } - set { _tile_type = newValue.map(AnyString.init) } - } - - private var _tile_title: AnyString? - /** - * Title of the tile (read-only) - */ - public var tile_title: String? { - get { _tile_title?.value } - set { _tile_title = newValue.map(AnyString.init) } - } - - private var _message: AnyString? - /** - * Message returned by the content validator (read-only) - */ - public var message: String? { - get { _message?.value } - set { _message = newValue.map(AnyString.init) } - } - - public init(type: String? = nil, title: String? = nil, detail: String? = nil, status: String? = nil, instance: String? = nil, model: String? = nil, explore: String? = nil, field_name: String? = nil, content_type: String? = nil, folder: String? = nil, url: String? = nil, tile_type: String? = nil, tile_title: String? = nil, message: String? = nil) { - self._type = type.map(AnyString.init) - self._title = title.map(AnyString.init) - self._detail = detail.map(AnyString.init) - self._status = status.map(AnyString.init) - self._instance = instance.map(AnyString.init) - self._model = model.map(AnyString.init) - self._explore = explore.map(AnyString.init) - self._field_name = field_name.map(AnyString.init) - self._content_type = content_type.map(AnyString.init) - self._folder = folder.map(AnyString.init) - self._url = url.map(AnyString.init) - self._tile_type = tile_type.map(AnyString.init) - self._tile_title = tile_title.map(AnyString.init) - self._message = message.map(AnyString.init) - } - -} - public struct ContentValidatorError: SDKModel { private enum CodingKeys : String, CodingKey { @@ -6225,90 +6105,6 @@ public struct ContentValidatorError: SDKModel { } -public struct ContentValidatorErrorItem: SDKModel { - public var content_error: ContentValidatorContentError? - - public var generic_error: GenericError? - - public init(content_error: ContentValidatorContentError? = nil, generic_error: GenericError? = nil) { - self.content_error = content_error - self.generic_error = generic_error - } - -} - -public struct ContentValidatorResult: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _name = "name" - case incremental - case _status = "status" - case result - } - private var _name: AnyString? - /** - * Name of the validator (content) (read-only) - */ - public var name: String? { - get { _name?.value } - set { _name = newValue.map(AnyString.init) } - } - - /** - * Whether the validation was incremental (read-only) - */ - public var incremental: Bool? - - private var _status: AnyString? - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - /** - * Results of the content validation (read-only) - */ - public var result: [ContentValidatorTestedExplore]? - - public init(name: String? = nil, incremental: Bool? = nil, status: String? = nil, result: [ContentValidatorTestedExplore]? = nil) { - self._name = name.map(AnyString.init) - self.incremental = incremental - self._status = status.map(AnyString.init) - self.result = result - } - -} - -public struct ContentValidatorTestedExplore: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _error_count = "error_count" - case errors - } - private var _error_count: AnyInt? - /** - * Total number of failed content validations (read-only) - */ - public var error_count: Int64? { - get { _error_count?.value } - set { _error_count = newValue.map(AnyInt.init) } - } - - /** - * Details of the content that failed validation (read-only) - */ - public var errors: [ContentValidatorErrorItem]? - - public init(error_count: Int64? = nil, errors: [ContentValidatorErrorItem]? = nil) { - self._error_count = error_count.map(AnyInt.init) - self.errors = errors - } - -} - public struct ContentView: SDKModel { private enum CodingKeys : String, CodingKey { @@ -6450,6 +6246,8 @@ public struct Context: SDKModel { private enum CodingKeys : String, CodingKey { case _instructions = "instructions" + case show_analytical_details + case show_debug } private var _instructions: AnyString? /** @@ -6460,8 +6258,20 @@ public struct Context: SDKModel { set { _instructions = newValue.map(AnyString.init) } } - public init(instructions: String? = nil) { + /** + * Show analytical details in preview + */ + public var show_analytical_details: Bool? + + /** + * Show debug info in preview + */ + public var show_debug: Bool? + + public init(instructions: String? = nil, show_analytical_details: Bool? = nil, show_debug: Bool? = nil) { self._instructions = instructions.map(AnyString.init) + self.show_analytical_details = show_analytical_details + self.show_debug = show_debug } } @@ -6783,79 +6593,6 @@ public struct CostEstimate: SDKModel { } -public struct CreateCIRunRequest: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _suite_id = "suite_id" - case _branch = "branch" - case _commit = "commit" - } - private var _suite_id: AnyString? - /** - * ID of the CI suite - */ - public var suite_id: String? { - get { _suite_id?.value } - set { _suite_id = newValue.map(AnyString.init) } - } - - private var _branch: AnyString? - /** - * Branch that the CI run should validate. Omit to test production. - */ - public var branch: String? { - get { _branch?.value } - set { _branch = newValue.map(AnyString.init) } - } - - private var _commit: AnyString? - /** - * Commit that the CI run should validate. Omit to test production. - */ - public var commit: String? { - get { _commit?.value } - set { _commit = newValue.map(AnyString.init) } - } - - public init(suite_id: String? = nil, branch: String? = nil, commit: String? = nil) { - self._suite_id = suite_id.map(AnyString.init) - self._branch = branch.map(AnyString.init) - self._commit = commit.map(AnyString.init) - } - -} - -public struct CreateCIRunResponse: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _run_id = "run_id" - case _status = "status" - } - private var _run_id: AnyString? - /** - * ID of the CI run (read-only) - */ - public var run_id: String? { - get { _run_id?.value } - set { _run_id = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - public init(run_id: String? = nil, status: String? = nil) { - self._run_id = run_id.map(AnyString.init) - self._status = status.map(AnyString.init) - } - -} - public struct CreateContinuousIntegrationRunRequest: SDKModel { private enum CodingKeys : String, CodingKey { @@ -6863,6 +6600,7 @@ public struct CreateContinuousIntegrationRunRequest: SDKModel { case _branch = "branch" case _commit = "commit" case user_attributes + case project_imports } private var _suite_id: AnyString? /** @@ -6896,11 +6634,17 @@ public struct CreateContinuousIntegrationRunRequest: SDKModel { */ public var user_attributes: [UserAttributeOverride]? - public init(suite_id: String? = nil, branch: String? = nil, commit: String? = nil, user_attributes: [UserAttributeOverride]? = nil) { + /** + * Map of upstream project names to commit SHAs or git configurations to pin for the CI run. + */ + public var project_imports: StringDictionary? + + public init(suite_id: String? = nil, branch: String? = nil, commit: String? = nil, user_attributes: [UserAttributeOverride]? = nil, project_imports: StringDictionary? = nil) { self._suite_id = suite_id.map(AnyString.init) self._branch = branch.map(AnyString.init) self._commit = commit.map(AnyString.init) self.user_attributes = user_attributes + self.project_imports = project_imports } } @@ -8667,6 +8411,7 @@ public struct Dashboard: SDKModel { case _usage_count = "usage_count" case is_owner_disabled case _url = "url" + case _layout_granularity = "layout_granularity" case preserve_desktop_layout case download_settings } @@ -9035,6 +8780,15 @@ public struct Dashboard: SDKModel { set { _url = newValue.map(AnyString.init) } } + private var _layout_granularity: AnyString? + /** + * The layout granularity to apply to this dashboard (ie: default or granular) + */ + public var layout_granularity: String? { + get { _layout_granularity?.value } + set { _layout_granularity = newValue.map(AnyString.init) } + } + /** * Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. */ @@ -9042,7 +8796,7 @@ public struct Dashboard: SDKModel { 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, 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) { + 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, layout_granularity: 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) @@ -9096,6 +8850,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._layout_granularity = layout_granularity.map(AnyString.init) self.preserve_desktop_layout = preserve_desktop_layout self.download_settings = download_settings } @@ -9144,6 +8899,14 @@ public struct DashboardAppearance: SDKModel { case tile_shadow case _key_color = "key_color" case modern_vis2026 + case show_dashboard_header + case show_title + case show_filters_bar + case show_filters_toggle + case show_reload_data_icon + case show_dashboard_menu + case show_last_updated_indicator + case background_opacity } private var _page_side_margins: AnyInt? /** @@ -9209,7 +8972,47 @@ public struct DashboardAppearance: SDKModel { */ public var modern_vis2026: Bool? - public init(page_side_margins: Int64? = nil, page_background_color: String? = nil, tile_title_alignment: String? = nil, tile_space_between: Int64? = nil, tile_background_color: String? = nil, tile_shadow: Bool? = nil, key_color: String? = nil, modern_vis2026: Bool? = nil) { + /** + * Toggle to show dashboard header. Defaults to true. + */ + public var show_dashboard_header: Bool? + + /** + * Toggle to show dashboard title. Defaults to true. + */ + public var show_title: Bool? + + /** + * Toggle to show filters bar. Defaults to true. + */ + public var show_filters_bar: Bool? + + /** + * Toggle to show filters toggle button. Defaults to true. + */ + public var show_filters_toggle: Bool? + + /** + * Toggle to show reload data icon/button. Defaults to true. + */ + public var show_reload_data_icon: Bool? + + /** + * Toggle to show dashboard actions menu. Defaults to true. + */ + public var show_dashboard_menu: Bool? + + /** + * Toggle to show last updated indicator. Defaults to true. + */ + public var show_last_updated_indicator: Bool? + + /** + * Background image opacity (0.0 to 1.0) + */ + public var background_opacity: Float? + + public init(page_side_margins: Int64? = nil, page_background_color: String? = nil, tile_title_alignment: String? = nil, tile_space_between: Int64? = nil, tile_background_color: String? = nil, tile_shadow: Bool? = nil, key_color: String? = nil, modern_vis2026: Bool? = nil, show_dashboard_header: Bool? = nil, show_title: Bool? = nil, show_filters_bar: Bool? = nil, show_filters_toggle: Bool? = nil, show_reload_data_icon: Bool? = nil, show_dashboard_menu: Bool? = nil, show_last_updated_indicator: Bool? = nil, background_opacity: Float? = nil) { self._page_side_margins = page_side_margins.map(AnyInt.init) self._page_background_color = page_background_color.map(AnyString.init) self._tile_title_alignment = tile_title_alignment.map(AnyString.init) @@ -9218,6 +9021,14 @@ public struct DashboardAppearance: SDKModel { self.tile_shadow = tile_shadow self._key_color = key_color.map(AnyString.init) self.modern_vis2026 = modern_vis2026 + self.show_dashboard_header = show_dashboard_header + self.show_title = show_title + self.show_filters_bar = show_filters_bar + self.show_filters_toggle = show_filters_toggle + self.show_reload_data_icon = show_reload_data_icon + self.show_dashboard_menu = show_dashboard_menu + self.show_last_updated_indicator = show_last_updated_indicator + self.background_opacity = background_opacity } } @@ -9394,6 +9205,7 @@ public struct DashboardDownloadSettings: SDKModel { case _limit_options = "limit_options" case _rows_limit = "rows_limit" case _columns_limit = "columns_limit" + case append_excel_metadata } private var _format_option: AnyString? /** @@ -9449,13 +9261,19 @@ public struct DashboardDownloadSettings: SDKModel { set { _columns_limit = newValue.map(AnyInt.init) } } - public init(format_option: String? = nil, value_options: String? = nil, result_options: String? = nil, limit_options: String? = nil, rows_limit: Int64? = nil, columns_limit: Int64? = nil) { + /** + * Append Excel metadata + */ + public var append_excel_metadata: Bool? + + public init(format_option: String? = nil, value_options: String? = nil, result_options: String? = nil, limit_options: String? = nil, rows_limit: Int64? = nil, columns_limit: Int64? = nil, append_excel_metadata: Bool? = nil) { self._format_option = format_option.map(AnyString.init) self._value_options = value_options.map(AnyString.init) self._result_options = result_options.map(AnyString.init) self._limit_options = limit_options.map(AnyString.init) self._rows_limit = rows_limit.map(AnyInt.init) self._columns_limit = columns_limit.map(AnyInt.init) + self.append_excel_metadata = append_excel_metadata } } @@ -9468,6 +9286,7 @@ public struct DashboardElement: SDKModel { case _body_text_as_html = "body_text_as_html" case _dashboard_id = "dashboard_id" case _dashboard_layout_id = "dashboard_layout_id" + case _group_id = "group_id" case _edit_uri = "edit_uri" case _id = "id" case look @@ -9497,6 +9316,8 @@ public struct DashboardElement: SDKModel { case _extension_id = "extension_id" case _aria_description = "aria_description" case certification_metadata + case _image_id = "image_id" + case images } /** * Operations the current user is able to perform on this object (read-only) @@ -9539,6 +9360,15 @@ public struct DashboardElement: SDKModel { set { _dashboard_layout_id = newValue.map(AnyString.init) } } + private var _group_id: AnyString? + /** + * ID of the group to place this element under in the layout (read-only) + */ + public var group_id: String? { + get { _group_id?.value } + set { _group_id = newValue.map(AnyString.init) } + } + private var _edit_uri: AnyString? /** * Relative path of URI of LookML file to edit the dashboard element (LookML dashboard only). (read-only) @@ -9768,12 +9598,27 @@ public struct DashboardElement: SDKModel { public var certification_metadata: Certification? - public init(can: StringDictionary? = nil, body_text: String? = nil, body_text_as_html: String? = nil, dashboard_id: String? = nil, dashboard_layout_id: String? = nil, edit_uri: String? = nil, id: String? = nil, look: LookWithQuery? = nil, look_id: String? = nil, lookml_link_id: String? = nil, merge_result_id: String? = nil, note_display: String? = nil, note_state: String? = nil, note_text: String? = nil, note_text_as_html: String? = nil, query: Query? = nil, query_id: String? = nil, filter_id: String? = nil, refresh_interval: String? = nil, refresh_interval_to_i: Int64? = nil, result_maker: ResultMakerWithIdVisConfigAndDynamicFields? = nil, result_maker_id: String? = nil, subtitle_text: String? = nil, title: String? = nil, title_hidden: Bool? = nil, title_text: String? = nil, type: String? = nil, alert_count: Int64? = nil, rich_content_json: String? = nil, title_text_as_html: String? = nil, subtitle_text_as_html: String? = nil, extension_id: String? = nil, aria_description: String? = nil, certification_metadata: Certification? = nil) { + private var _image_id: AnyString? + /** + * ID of Dashboard Image + */ + public var image_id: String? { + get { _image_id?.value } + set { _image_id = newValue.map(AnyString.init) } + } + + /** + * Images (read-only) + */ + public var images: [Image]? + + public init(can: StringDictionary? = nil, body_text: String? = nil, body_text_as_html: String? = nil, dashboard_id: String? = nil, dashboard_layout_id: String? = nil, group_id: String? = nil, edit_uri: String? = nil, id: String? = nil, look: LookWithQuery? = nil, look_id: String? = nil, lookml_link_id: String? = nil, merge_result_id: String? = nil, note_display: String? = nil, note_state: String? = nil, note_text: String? = nil, note_text_as_html: String? = nil, query: Query? = nil, query_id: String? = nil, filter_id: String? = nil, refresh_interval: String? = nil, refresh_interval_to_i: Int64? = nil, result_maker: ResultMakerWithIdVisConfigAndDynamicFields? = nil, result_maker_id: String? = nil, subtitle_text: String? = nil, title: String? = nil, title_hidden: Bool? = nil, title_text: String? = nil, type: String? = nil, alert_count: Int64? = nil, rich_content_json: String? = nil, title_text_as_html: String? = nil, subtitle_text_as_html: String? = nil, extension_id: String? = nil, aria_description: String? = nil, certification_metadata: Certification? = nil, image_id: String? = nil, images: [Image]? = nil) { self.can = can self._body_text = body_text.map(AnyString.init) self._body_text_as_html = body_text_as_html.map(AnyString.init) self._dashboard_id = dashboard_id.map(AnyString.init) self._dashboard_layout_id = dashboard_layout_id.map(AnyString.init) + self._group_id = group_id.map(AnyString.init) self._edit_uri = edit_uri.map(AnyString.init) self._id = id.map(AnyString.init) self.look = look @@ -9803,6 +9648,8 @@ public struct DashboardElement: SDKModel { self._extension_id = extension_id.map(AnyString.init) self._aria_description = aria_description.map(AnyString.init) self.certification_metadata = certification_metadata + self._image_id = image_id.map(AnyString.init) + self.images = images } } @@ -10138,6 +9985,7 @@ public struct DashboardLayoutComponent: SDKModel { case _granular_column = "granular_column" case _granular_width = "granular_width" case _granular_height = "granular_height" + case _group_id = "group_id" } /** * Operations the current user is able to perform on this object (read-only) @@ -10271,7 +10119,16 @@ public struct DashboardLayoutComponent: SDKModel { set { _granular_height = newValue.map(AnyInt.init) } } - public init(can: StringDictionary? = nil, id: String? = nil, dashboard_layout_id: String? = nil, dashboard_element_id: String? = nil, row: Int64? = nil, column: Int64? = nil, width: Int64? = nil, height: Int64? = nil, deleted: Bool? = nil, element_title: String? = nil, element_title_hidden: Bool? = nil, vis_type: String? = nil, granular_row: Int64? = nil, granular_column: Int64? = nil, granular_width: Int64? = nil, granular_height: Int64? = nil) { + private var _group_id: AnyString? + /** + * Id of parent Dashboard Layout Component group + */ + public var group_id: String? { + get { _group_id?.value } + set { _group_id = newValue.map(AnyString.init) } + } + + public init(can: StringDictionary? = nil, id: String? = nil, dashboard_layout_id: String? = nil, dashboard_element_id: String? = nil, row: Int64? = nil, column: Int64? = nil, width: Int64? = nil, height: Int64? = nil, deleted: Bool? = nil, element_title: String? = nil, element_title_hidden: Bool? = nil, vis_type: String? = nil, granular_row: Int64? = nil, granular_column: Int64? = nil, granular_width: Int64? = nil, granular_height: Int64? = nil, group_id: String? = nil) { self.can = can self._id = id.map(AnyString.init) self._dashboard_layout_id = dashboard_layout_id.map(AnyString.init) @@ -10288,6 +10145,7 @@ public struct DashboardLayoutComponent: SDKModel { self._granular_column = granular_column.map(AnyInt.init) self._granular_width = granular_width.map(AnyInt.init) self._granular_height = granular_height.map(AnyInt.init) + self._group_id = group_id.map(AnyString.init) } } @@ -10933,6 +10791,7 @@ public struct DBConnection: SDKModel { case dialect case snippets case pdts_enabled + case _project_id = "project_id" case _named_driver_version_requested = "named_driver_version_requested" case _named_driver_version_actual = "named_driver_version_actual" case _host = "host" @@ -10940,11 +10799,13 @@ public struct DBConnection: SDKModel { case _username = "username" case _password = "password" case has_password + case service_account_auth_enabled case uses_oauth case uses_key_pair_auth case uses_instance_oauth case uses_service_auth case _certificate = "certificate" + case _user_attr_certificate = "user_attr_certificate" case _file_type = "file_type" case _database = "database" case _db_timezone = "db_timezone" @@ -11020,6 +10881,15 @@ public struct DBConnection: SDKModel { */ public var pdts_enabled: Bool? + private var _project_id: AnyString? + /** + * ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + */ + public var project_id: String? { + get { _project_id?.value } + set { _project_id = newValue.map(AnyString.init) } + } + private var _named_driver_version_requested: AnyString? /** * Requested JDBC driver version name @@ -11079,6 +10949,11 @@ public struct DBConnection: SDKModel { */ public var has_password: Bool? + /** + * Whether Service Account OAuth authentication is enabled for this connection + */ + public var service_account_auth_enabled: Bool? + /** * Whether the connection uses OAuth for authentication. (read-only) */ @@ -11108,6 +10983,15 @@ public struct DBConnection: SDKModel { set { _certificate = newValue.map(AnyString.init) } } + private var _user_attr_certificate: AnyString? + /** + * The name of the user attribute containing the connection certificate. + */ + public var user_attr_certificate: String? { + get { _user_attr_certificate?.value } + set { _user_attr_certificate = newValue.map(AnyString.init) } + } + private var _file_type: AnyString? /** * (Write-Only) Certificate keyfile type - .json, .p8 or .p12 @@ -11461,12 +11345,13 @@ public struct DBConnection: SDKModel { set { _service_name = newValue.map(AnyString.init) } } - public init(can: StringDictionary? = nil, name: String? = nil, dialect: Dialect? = nil, snippets: [Snippet]? = nil, pdts_enabled: Bool? = nil, named_driver_version_requested: String? = nil, named_driver_version_actual: String? = nil, host: String? = nil, port: String? = nil, username: String? = nil, password: String? = nil, has_password: Bool? = nil, uses_oauth: Bool? = nil, uses_key_pair_auth: Bool? = nil, uses_instance_oauth: Bool? = nil, uses_service_auth: Bool? = nil, certificate: String? = nil, file_type: String? = nil, database: String? = nil, db_timezone: String? = nil, query_timezone: String? = nil, schema: String? = nil, max_connections: Int64? = nil, max_queries: Int64? = nil, max_queries_per_user: Int64? = nil, max_billing_gigabytes: String? = nil, ssl: Bool? = nil, verify_ssl: Bool? = nil, tmp_db_name: String? = nil, tmp_db_host: String? = nil, jdbc_additional_params: String? = nil, pool_timeout: Int64? = nil, dialect_name: String? = nil, supports_data_studio_link: Bool? = nil, created_at: String? = nil, user_id: String? = nil, example: Bool? = nil, user_db_credentials: Bool? = nil, user_attribute_fields: [String]? = nil, maintenance_cron: String? = nil, last_regen_at: String? = nil, last_reap_at: String? = nil, sql_runner_precache_tables: Bool? = nil, sql_writing_with_info_schema: Bool? = nil, after_connect_statements: String? = nil, pdt_context_override: DBConnectionOverride? = nil, managed: Bool? = nil, custom_local_port: Int64? = nil, tunnel_id: String? = nil, uses_tns: Bool? = nil, pdt_concurrency: Int64? = nil, disable_context_comment: Bool? = nil, oauth_application_id: String? = nil, always_retry_failed_builds: Bool? = nil, uses_application_default_credentials: Bool? = nil, impersonated_service_account: String? = nil, cost_estimate_enabled: Bool? = nil, pdt_api_control_enabled: Bool? = nil, connection_pooling: Bool? = nil, default_bq_connection: Bool? = nil, bq_storage_project_id: String? = nil, bq_roles_verified: Bool? = nil, p4sa_name: String? = nil, query_holding_disabled: Bool? = nil, service_name: String? = nil) { + public init(can: StringDictionary? = nil, name: String? = nil, dialect: Dialect? = nil, snippets: [Snippet]? = nil, pdts_enabled: Bool? = nil, project_id: String? = nil, named_driver_version_requested: String? = nil, named_driver_version_actual: String? = nil, host: String? = nil, port: String? = nil, username: String? = nil, password: String? = nil, has_password: Bool? = nil, service_account_auth_enabled: Bool? = nil, uses_oauth: Bool? = nil, uses_key_pair_auth: Bool? = nil, uses_instance_oauth: Bool? = nil, uses_service_auth: Bool? = nil, certificate: String? = nil, user_attr_certificate: String? = nil, file_type: String? = nil, database: String? = nil, db_timezone: String? = nil, query_timezone: String? = nil, schema: String? = nil, max_connections: Int64? = nil, max_queries: Int64? = nil, max_queries_per_user: Int64? = nil, max_billing_gigabytes: String? = nil, ssl: Bool? = nil, verify_ssl: Bool? = nil, tmp_db_name: String? = nil, tmp_db_host: String? = nil, jdbc_additional_params: String? = nil, pool_timeout: Int64? = nil, dialect_name: String? = nil, supports_data_studio_link: Bool? = nil, created_at: String? = nil, user_id: String? = nil, example: Bool? = nil, user_db_credentials: Bool? = nil, user_attribute_fields: [String]? = nil, maintenance_cron: String? = nil, last_regen_at: String? = nil, last_reap_at: String? = nil, sql_runner_precache_tables: Bool? = nil, sql_writing_with_info_schema: Bool? = nil, after_connect_statements: String? = nil, pdt_context_override: DBConnectionOverride? = nil, managed: Bool? = nil, custom_local_port: Int64? = nil, tunnel_id: String? = nil, uses_tns: Bool? = nil, pdt_concurrency: Int64? = nil, disable_context_comment: Bool? = nil, oauth_application_id: String? = nil, always_retry_failed_builds: Bool? = nil, uses_application_default_credentials: Bool? = nil, impersonated_service_account: String? = nil, cost_estimate_enabled: Bool? = nil, pdt_api_control_enabled: Bool? = nil, connection_pooling: Bool? = nil, default_bq_connection: Bool? = nil, bq_storage_project_id: String? = nil, bq_roles_verified: Bool? = nil, p4sa_name: String? = nil, query_holding_disabled: Bool? = nil, service_name: String? = nil) { self.can = can self._name = name.map(AnyString.init) self.dialect = dialect self.snippets = snippets self.pdts_enabled = pdts_enabled + self._project_id = project_id.map(AnyString.init) self._named_driver_version_requested = named_driver_version_requested.map(AnyString.init) self._named_driver_version_actual = named_driver_version_actual.map(AnyString.init) self._host = host.map(AnyString.init) @@ -11474,11 +11359,13 @@ public struct DBConnection: SDKModel { self._username = username.map(AnyString.init) self._password = password.map(AnyString.init) self.has_password = has_password + self.service_account_auth_enabled = service_account_auth_enabled self.uses_oauth = uses_oauth self.uses_key_pair_auth = uses_key_pair_auth self.uses_instance_oauth = uses_instance_oauth self.uses_service_auth = uses_service_auth self._certificate = certificate.map(AnyString.init) + self._user_attr_certificate = user_attr_certificate.map(AnyString.init) self._file_type = file_type.map(AnyString.init) self._database = database.map(AnyString.init) self._db_timezone = db_timezone.map(AnyString.init) @@ -11539,6 +11426,7 @@ public struct DBConnectionBase: SDKModel { case dialect case snippets case pdts_enabled + case _project_id = "project_id" } /** * Operations the current user is able to perform on this object (read-only) @@ -11566,12 +11454,22 @@ public struct DBConnectionBase: SDKModel { */ public var pdts_enabled: Bool? - public init(can: StringDictionary? = nil, name: String? = nil, dialect: Dialect? = nil, snippets: [Snippet]? = nil, pdts_enabled: Bool? = nil) { + private var _project_id: AnyString? + /** + * ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + */ + public var project_id: String? { + get { _project_id?.value } + set { _project_id = newValue.map(AnyString.init) } + } + + public init(can: StringDictionary? = nil, name: String? = nil, dialect: Dialect? = nil, snippets: [Snippet]? = nil, pdts_enabled: Bool? = nil, project_id: String? = nil) { self.can = can self._name = name.map(AnyString.init) self.dialect = dialect self.snippets = snippets self.pdts_enabled = pdts_enabled + self._project_id = project_id.map(AnyString.init) } } @@ -12361,6 +12259,11 @@ public struct DialectInfoOptions: SDKModel { */ public var disabled: Bool? + /** + * Disable query holding for this connection. (read-only) + */ + public var query_holding_disabled: Bool? + /** * Can disable query context comments (read-only) */ @@ -12451,13 +12354,19 @@ public struct DialectInfoOptions: SDKModel { */ public var supports_connection_pooling: Bool? - public init(additional_params: Bool? = nil, after_connect_statements: Bool? = nil, analytical_view_dataset: Bool? = nil, auth: Bool? = nil, cost_estimate: Bool? = nil, disabled: Bool? = nil, disable_context_comment: Bool? = nil, host: Bool? = nil, instance_name: Bool? = nil, key_pair_authentication: Bool? = nil, max_billing_gigabytes: Bool? = nil, oauth_credentials: Bool? = nil, pdts_for_oauth: Bool? = nil, port: Bool? = nil, project_name: Bool? = nil, schema: Bool? = nil, service_account_credentials: Bool? = nil, ssl: Bool? = nil, timezone: Bool? = nil, tmp_table: Bool? = nil, tns: Bool? = nil, username: Bool? = nil, username_required: Bool? = nil, supports_connection_pooling: Bool? = nil) { + /** + * Has user attribute certificate support (read-only) + */ + public var user_attribute_certificate: Bool? + + public init(additional_params: Bool? = nil, after_connect_statements: Bool? = nil, analytical_view_dataset: Bool? = nil, auth: Bool? = nil, cost_estimate: Bool? = nil, disabled: Bool? = nil, query_holding_disabled: Bool? = nil, disable_context_comment: Bool? = nil, host: Bool? = nil, instance_name: Bool? = nil, key_pair_authentication: Bool? = nil, max_billing_gigabytes: Bool? = nil, oauth_credentials: Bool? = nil, pdts_for_oauth: Bool? = nil, port: Bool? = nil, project_name: Bool? = nil, schema: Bool? = nil, service_account_credentials: Bool? = nil, ssl: Bool? = nil, timezone: Bool? = nil, tmp_table: Bool? = nil, tns: Bool? = nil, username: Bool? = nil, username_required: Bool? = nil, supports_connection_pooling: Bool? = nil, user_attribute_certificate: Bool? = nil) { self.additional_params = additional_params self.after_connect_statements = after_connect_statements self.analytical_view_dataset = analytical_view_dataset self.auth = auth self.cost_estimate = cost_estimate self.disabled = disabled + self.query_holding_disabled = query_holding_disabled self.disable_context_comment = disable_context_comment self.host = host self.instance_name = instance_name @@ -12476,6 +12385,7 @@ public struct DialectInfoOptions: SDKModel { self.username = username self.username_required = username_required self.supports_connection_pooling = supports_connection_pooling + self.user_attribute_certificate = user_attribute_certificate } } @@ -12588,6 +12498,7 @@ public struct EmbedConfig: SDKModel { case embed_cookieless_v2 case embed_content_navigation case embed_content_management + case embed_vis_modernization_default case strict_sameorigin_for_login case look_filters case hide_look_navigation @@ -12650,6 +12561,11 @@ public struct EmbedConfig: SDKModel { */ public var embed_content_management: Bool? + /** + * Default net new visualizations in embedded context to Modern theme (read-only) + */ + public var embed_vis_modernization_default: Bool? + /** * 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. */ @@ -12675,7 +12591,7 @@ public struct EmbedConfig: SDKModel { */ 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, permissions: StringDictionary? = 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, embed_vis_modernization_default: 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) @@ -12684,6 +12600,7 @@ public struct EmbedConfig: SDKModel { self.embed_cookieless_v2 = embed_cookieless_v2 self.embed_content_navigation = embed_content_navigation self.embed_content_management = embed_content_management + self.embed_vis_modernization_default = embed_vis_modernization_default self.strict_sameorigin_for_login = strict_sameorigin_for_login self.look_filters = look_filters self.hide_look_navigation = hide_look_navigation @@ -14011,70 +13928,6 @@ public enum Format: String, Codable { case vector_tile_region = "vector_tile_region" } -public struct GenericError: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _type = "type" - case _title = "title" - case _detail = "detail" - case _status = "status" - case _instance = "instance" - } - private var _type: AnyString? - /** - * A URI reference that identifies the problem type (read-only) - */ - public var type: String? { - get { _type?.value } - set { _type = newValue.map(AnyString.init) } - } - - private var _title: AnyString? - /** - * Overview of the error (read-only) - */ - public var title: String? { - get { _title?.value } - set { _title = newValue.map(AnyString.init) } - } - - private var _detail: AnyString? - /** - * Detail of the error (read-only) - */ - public var detail: String? { - get { _detail?.value } - set { _detail = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * The HTTP status code for the problem (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - private var _instance: AnyString? - /** - * URI reference that identifies the specific occurrence of the problem (read-only) - */ - public var instance: String? { - get { _instance?.value } - set { _instance = newValue.map(AnyString.init) } - } - - public init(type: String? = nil, title: String? = nil, detail: String? = nil, status: String? = nil, instance: String? = nil) { - self._type = type.map(AnyString.init) - self._title = title.map(AnyString.init) - self._detail = detail.map(AnyString.init) - self._status = status.map(AnyString.init) - self._instance = instance.map(AnyString.init) - } - -} - public struct GitBranch: SDKModel { private enum CodingKeys : String, CodingKey { @@ -14334,216 +14187,6 @@ public struct GitConnectionTestResult: SDKModel { } -public struct GitDiagnosticIssue: SDKModel { - - private enum CodingKeys : String, CodingKey { - case can - case _id = "id" - case _report_id = "report_id" - case _project_id = "project_id" - case _project_type = "project_type" - case _issue_type = "issue_type" - case _issue_version = "issue_version" - case _state = "state" - case created_at - case updated_at - } - /** - * Operations the current user is able to perform on this object (read-only) - */ - public var can: StringDictionary? - - private var _id: AnyString? - /** - * Unique ID of the diagnostic issue. (read-only) - */ - public var id: String? { - get { _id?.value } - set { _id = newValue.map(AnyString.init) } - } - - private var _report_id: AnyString? - /** - * Parent diagnostic report ID. (read-only) - */ - public var report_id: String? { - get { _report_id?.value } - set { _report_id = newValue.map(AnyString.init) } - } - - private var _project_id: AnyString? - /** - * Target Looker Project ID. (read-only) - */ - public var project_id: String? { - get { _project_id?.value } - set { _project_id = newValue.map(AnyString.init) } - } - - private var _project_type: AnyString? - /** - * Environment scope (developer/production). (read-only) - */ - public var project_type: String? { - get { _project_type?.value } - set { _project_type = newValue.map(AnyString.init) } - } - - private var _issue_type: AnyString? - /** - * Git diagnostic issue category. (read-only) - */ - public var issue_type: String? { - get { _issue_type?.value } - set { _issue_type = newValue.map(AnyString.init) } - } - - private var _issue_version: AnyString? - /** - * Version schema. (read-only) - */ - public var issue_version: String? { - get { _issue_version?.value } - set { _issue_version = newValue.map(AnyString.init) } - } - - private var _state: AnyString? - /** - * Current execution status. (read-only) - */ - public var state: String? { - get { _state?.value } - set { _state = newValue.map(AnyString.init) } - } - - /** - * Creation timestamp. (read-only) - */ - public var created_at: Date? - - /** - * Last update timestamp. (read-only) - */ - public var updated_at: Date? - - public init(can: StringDictionary? = nil, id: String? = nil, report_id: String? = nil, project_id: String? = nil, project_type: String? = nil, issue_type: String? = nil, issue_version: String? = nil, state: String? = nil, created_at: Date? = nil, updated_at: Date? = nil) { - self.can = can - self._id = id.map(AnyString.init) - self._report_id = report_id.map(AnyString.init) - self._project_id = project_id.map(AnyString.init) - self._project_type = project_type.map(AnyString.init) - self._issue_type = issue_type.map(AnyString.init) - self._issue_version = issue_version.map(AnyString.init) - self._state = state.map(AnyString.init) - self.created_at = created_at - self.updated_at = updated_at - } - -} - -public struct GitDiagnosticReport: SDKModel { - - private enum CodingKeys : String, CodingKey { - case can - case _id = "id" - case _project_id = "project_id" - case _user_id = "user_id" - case _state = "state" - case _status = "status" - case created_at - case updated_at - case _project_type = "project_type" - case issues - } - /** - * Operations the current user is able to perform on this object (read-only) - */ - public var can: StringDictionary? - - private var _id: AnyString? - /** - * Unique ID of the git diagnostic report. (read-only) - */ - public var id: String? { - get { _id?.value } - set { _id = newValue.map(AnyString.init) } - } - - private var _project_id: AnyString? - /** - * Target Looker Project ID. (read-only) - */ - public var project_id: String? { - get { _project_id?.value } - set { _project_id = newValue.map(AnyString.init) } - } - - private var _user_id: AnyString? - /** - * ID of the user initiating the diagnosis. (read-only) - */ - public var user_id: String? { - get { _user_id?.value } - set { _user_id = newValue.map(AnyString.init) } - } - - private var _state: AnyString? - /** - * Raw lifecycle state. (read-only) - */ - public var state: String? { - get { _state?.value } - set { _state = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * Status derived from state. (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - /** - * Creation time. (read-only) - */ - public var created_at: Date? - - /** - * Update time. (read-only) - */ - public var updated_at: Date? - - private var _project_type: AnyString? - /** - * Project structure type. - */ - public var project_type: String? { - get { _project_type?.value } - set { _project_type = newValue.map(AnyString.init) } - } - - /** - * Diagnostic issues associated with this report. (read-only) - */ - public var issues: [GitDiagnosticIssue]? - - public init(can: StringDictionary? = nil, id: String? = nil, project_id: String? = nil, user_id: String? = nil, state: String? = nil, status: String? = nil, created_at: Date? = nil, updated_at: Date? = nil, project_type: String? = nil, issues: [GitDiagnosticIssue]? = nil) { - self.can = can - self._id = id.map(AnyString.init) - self._project_id = project_id.map(AnyString.init) - self._user_id = user_id.map(AnyString.init) - self._state = state.map(AnyString.init) - self._status = status.map(AnyString.init) - self.created_at = created_at - self.updated_at = updated_at - self._project_type = project_type.map(AnyString.init) - self.issues = issues - } - -} - public struct GitStatus: SDKModel { private enum CodingKeys : String, CodingKey { @@ -14609,6 +14252,8 @@ public struct GoldenQuery: SDKModel { case _sorts = "sorts" case _limit = "limit" case _client_id = "client_id" + case _pivots = "pivots" + case _dynamic_fields = "dynamic_fields" } /** * Operations the current user is able to perform on this object (read-only) @@ -14652,7 +14297,7 @@ public struct GoldenQuery: SDKModel { } /** - * Whether this golden question should be utilized by the agent + * Whether this golden question should be utilized by the agent (read-only) */ public var is_active: Bool? @@ -14743,7 +14388,25 @@ public struct GoldenQuery: SDKModel { set { _client_id = newValue.map(AnyString.init) } } - 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, explore: String? = nil, model: String? = nil, fields: [String]? = nil, filters: StringDictionary? = nil, sorts: [String]? = nil, limit: String? = nil, client_id: String? = nil) { + private var _pivots: [AnyString]? + /** + * Pivots of the associated Looker Query (read-only) + */ + public var pivots: [String]? { + get { if let v = _pivots { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _pivots = v.map { AnyString.init($0) } } else { _pivots = nil } } + } + + private var _dynamic_fields: AnyString? + /** + * Dynamic fields of the associated Looker Query (read-only) + */ + public var dynamic_fields: String? { + get { _dynamic_fields?.value } + set { _dynamic_fields = newValue.map(AnyString.init) } + } + + 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, explore: String? = nil, model: String? = nil, fields: [String]? = nil, filters: StringDictionary? = nil, sorts: [String]? = nil, limit: String? = nil, client_id: String? = nil, pivots: [String]? = nil, dynamic_fields: String? = nil) { self.can = can self._id = id.map(AnyInt.init) self._query_id = query_id.map(AnyInt.init) @@ -14761,6 +14424,8 @@ public struct GoldenQuery: SDKModel { if let v = sorts { _sorts = v.map { AnyString.init($0) } } else { _sorts = nil } self._limit = limit.map(AnyString.init) self._client_id = client_id.map(AnyString.init) + if let v = pivots { _pivots = v.map { AnyString.init($0) } } else { _pivots = nil } + self._dynamic_fields = dynamic_fields.map(AnyString.init) } } @@ -15525,6 +15190,91 @@ public struct HomepageSection: SDKModel { } +public struct Image: SDKModel { + + private enum CodingKeys : String, CodingKey { + case can + case _id = "id" + case _file_name = "file_name" + case _format = "format" + case _label = "label" + case _url = "url" + case created_at + case updated_at + } + /** + * Operations the current user is able to perform on this object (read-only) + */ + public var can: StringDictionary? + + private var _id: AnyString? + /** + * Unique Id (read-only) + */ + public var id: String? { + get { _id?.value } + set { _id = newValue.map(AnyString.init) } + } + + private var _file_name: AnyString? + /** + * Original file name (read-only) + */ + public var file_name: String? { + get { _file_name?.value } + set { _file_name = newValue.map(AnyString.init) } + } + + private var _format: AnyString? + /** + * Image format (e.g. PNG, JPG) (read-only) + */ + public var format: String? { + get { _format?.value } + set { _format = newValue.map(AnyString.init) } + } + + private var _label: AnyString? + /** + * Accessibility label + */ + public var label: String? { + get { _label?.value } + set { _label = newValue.map(AnyString.init) } + } + + private var _url: AnyString? + /** + * URL of the image (read-only) + */ + public var url: String? { + get { _url?.value } + set { _url = newValue.map(AnyString.init) } + } + + /** + * Creation timestamp (read-only) + */ + public var created_at: Date? + + /** + * Update timestamp (read-only) + */ + public var updated_at: Date? + + public init(can: StringDictionary? = nil, id: String? = nil, file_name: String? = nil, format: String? = nil, label: String? = nil, url: String? = nil, created_at: Date? = nil, updated_at: Date? = nil) { + self.can = can + self._id = id.map(AnyString.init) + self._file_name = file_name.map(AnyString.init) + self._format = format.map(AnyString.init) + self._label = label.map(AnyString.init) + self._url = url.map(AnyString.init) + self.created_at = created_at + self.updated_at = updated_at + } + +} + public struct ImportedProject: SDKModel { private enum CodingKeys : String, CodingKey { @@ -20206,219 +19956,6 @@ public struct LookmlTestResult: SDKModel { } -public struct LookMLValidatorError: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _type = "type" - case _title = "title" - case _detail = "detail" - case _status = "status" - case _instance = "instance" - case _model = "model" - case _explore = "explore" - case _field_name = "field_name" - case _message = "message" - case _severity = "severity" - case _line_number = "line_number" - case _lookml_url = "lookml_url" - case _file_path = "file_path" - } - private var _type: AnyString? - /** - * A URI reference that identifies the problem type (read-only) - */ - public var type: String? { - get { _type?.value } - set { _type = newValue.map(AnyString.init) } - } - - private var _title: AnyString? - /** - * Overview of the error (read-only) - */ - public var title: String? { - get { _title?.value } - set { _title = newValue.map(AnyString.init) } - } - - private var _detail: AnyString? - /** - * Detail of the error (read-only) - */ - public var detail: String? { - get { _detail?.value } - set { _detail = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * The HTTP status code for the problem (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - private var _instance: AnyString? - /** - * URI reference that identifies the specific occurrence of the problem (read-only) - */ - public var instance: String? { - get { _instance?.value } - set { _instance = newValue.map(AnyString.init) } - } - - private var _model: AnyString? - /** - * LookML model that contains the error (read-only) - */ - public var model: String? { - get { _model?.value } - set { _model = newValue.map(AnyString.init) } - } - - private var _explore: AnyString? - /** - * LookML Explore that contains the error (read-only) - */ - public var explore: String? { - get { _explore?.value } - set { _explore = newValue.map(AnyString.init) } - } - - private var _field_name: AnyString? - /** - * LookML field that caused the error (read-only) - */ - public var field_name: String? { - get { _field_name?.value } - set { _field_name = newValue.map(AnyString.init) } - } - - private var _message: AnyString? - /** - * Message returned by the LookML validator (read-only) - */ - public var message: String? { - get { _message?.value } - set { _message = newValue.map(AnyString.init) } - } - - private var _severity: AnyString? - /** - * Severity of the error (warning, error, fatal, info, success) (read-only) - */ - public var severity: String? { - get { _severity?.value } - set { _severity = newValue.map(AnyString.init) } - } - - private var _line_number: AnyString? - /** - * Line number of the error in the LookML file (read-only) - */ - public var line_number: String? { - get { _line_number?.value } - set { _line_number = newValue.map(AnyString.init) } - } - - private var _lookml_url: AnyString? - /** - * URL to the LookML that caused the error (read-only) - */ - public var lookml_url: String? { - get { _lookml_url?.value } - set { _lookml_url = newValue.map(AnyString.init) } - } - - private var _file_path: AnyString? - /** - * IDE folder path to the LookML file that caused the error (read-only) - */ - public var file_path: String? { - get { _file_path?.value } - set { _file_path = newValue.map(AnyString.init) } - } - - public init(type: String? = nil, title: String? = nil, detail: String? = nil, status: String? = nil, instance: String? = nil, model: String? = nil, explore: String? = nil, field_name: String? = nil, message: String? = nil, severity: String? = nil, line_number: String? = nil, lookml_url: String? = nil, file_path: String? = nil) { - self._type = type.map(AnyString.init) - self._title = title.map(AnyString.init) - self._detail = detail.map(AnyString.init) - self._status = status.map(AnyString.init) - self._instance = instance.map(AnyString.init) - self._model = model.map(AnyString.init) - self._explore = explore.map(AnyString.init) - self._field_name = field_name.map(AnyString.init) - self._message = message.map(AnyString.init) - self._severity = severity.map(AnyString.init) - self._line_number = line_number.map(AnyString.init) - self._lookml_url = lookml_url.map(AnyString.init) - self._file_path = file_path.map(AnyString.init) - } - -} - -public struct LookMLValidatorErrorItem: SDKModel { - public var lookml_error: LookMLValidatorError? - - public var generic_error: GenericError? - - public init(lookml_error: LookMLValidatorError? = nil, generic_error: GenericError? = nil) { - self.lookml_error = lookml_error - self.generic_error = generic_error - } - -} - -public struct LookMLValidatorResult: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _name = "name" - case _status = "status" - case _error_count = "error_count" - case errors - } - private var _name: AnyString? - /** - * Name of the validator (lookml) (read-only) - */ - public var name: String? { - get { _name?.value } - set { _name = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - private var _error_count: AnyInt? - /** - * Total number of failed LookML validations (read-only) - */ - public var error_count: Int64? { - get { _error_count?.value } - set { _error_count = newValue.map(AnyInt.init) } - } - - /** - * Details of the LookML that failed validation (read-only) - */ - public var errors: [LookMLValidatorErrorItem]? - - public init(name: String? = nil, status: String? = nil, error_count: Int64? = nil, errors: [LookMLValidatorErrorItem]? = nil) { - self._name = name.map(AnyString.init) - self._status = status.map(AnyString.init) - self._error_count = error_count.map(AnyInt.init) - self.errors = errors - } - -} - public struct LookModel: SDKModel { private enum CodingKeys : String, CodingKey { @@ -21243,6 +20780,8 @@ public struct McpTools: SDKModel { public var get_explores: McpToolSetting? + public var get_field_value_suggestions: McpToolSetting? + public var get_filters: McpToolSetting? public var get_looks: McpToolSetting? @@ -21295,7 +20834,11 @@ public struct McpTools: SDKModel { public var create_view_from_table: 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) { + public var render_visualization: McpToolSetting? + + public var render_dashboard: 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_field_value_suggestions: 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, render_visualization: McpToolSetting? = nil, render_dashboard: McpToolSetting? = nil) { self.enable_all = enable_all self.add_dashboard_element = add_dashboard_element self.add_dashboard_filter = add_dashboard_filter @@ -21311,6 +20854,7 @@ public struct McpTools: SDKModel { self.get_dashboards = get_dashboards self.get_dimensions = get_dimensions self.get_explores = get_explores + self.get_field_value_suggestions = get_field_value_suggestions self.get_filters = get_filters self.get_looks = get_looks self.get_measures = get_measures @@ -21337,6 +20881,8 @@ 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.render_visualization = render_visualization + self.render_dashboard = render_dashboard } } @@ -22030,6 +21576,7 @@ public struct OauthClientApp: SDKModel { case can case _client_guid = "client_guid" case _redirect_uri = "redirect_uri" + case _redirect_uris = "redirect_uris" case _display_name = "display_name" case _description = "description" case enabled @@ -22053,13 +21600,22 @@ public struct OauthClientApp: SDKModel { private var _redirect_uri: AnyString? /** - * The uri with which this application will receive an auth code by browser redirect. + * (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) */ public var redirect_uri: String? { get { _redirect_uri?.value } set { _redirect_uri = newValue.map(AnyString.init) } } + private var _redirect_uris: [AnyString]? + /** + * The authorized uris for which this application will receive an auth code by browser redirect. + */ + public var redirect_uris: [String]? { + get { if let v = _redirect_uris { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _redirect_uris = v.map { AnyString.init($0) } } else { _redirect_uris = nil } } + } + private var _display_name: AnyString? /** * The application's display name @@ -22102,10 +21658,11 @@ public struct OauthClientApp: SDKModel { */ public var activated_users: [UserPublic]? - public init(can: StringDictionary? = nil, client_guid: String? = nil, redirect_uri: String? = nil, display_name: String? = nil, description: String? = nil, enabled: Bool? = nil, group_id: String? = nil, tokens_invalid_before: Date? = nil, activated_users: [UserPublic]? = nil) { + public init(can: StringDictionary? = nil, client_guid: String? = nil, redirect_uri: String? = nil, redirect_uris: [String]? = nil, display_name: String? = nil, description: String? = nil, enabled: Bool? = nil, group_id: String? = nil, tokens_invalid_before: Date? = nil, activated_users: [UserPublic]? = nil) { self.can = can self._client_guid = client_guid.map(AnyString.init) self._redirect_uri = redirect_uri.map(AnyString.init) + if let v = redirect_uris { _redirect_uris = v.map { AnyString.init($0) } } else { _redirect_uris = nil } self._display_name = display_name.map(AnyString.init) self._description = description.map(AnyString.init) self.enabled = enabled @@ -23232,6 +22789,480 @@ public struct Project: SDKModel { } +public struct ProjectCISuite: SDKModel { + + private enum CodingKeys : String, CodingKey { + case can + case _id = "id" + case _name = "name" + case _project_id = "project_id" + case created_at + case updated_at + case schedule_trigger_is_enabled + case _schedule_trigger_crontab = "schedule_trigger_crontab" + case _schedule_trigger_timezone = "schedule_trigger_timezone" + case alerting_enabled + case _alert_email_addresses = "alert_email_addresses" + case alert_on_failed_status + case alert_on_error_status + case alert_on_passed_status + case alert_on_cancelled_status + case change_request_trigger_is_enabled + case _change_request_trigger_hook_id = "change_request_trigger_hook_id" + case _change_request_trigger_target_branch = "change_request_trigger_target_branch" + case _guid = "guid" + case dbt_cloud_trigger_is_enabled + case _dbt_cloud_trigger_job_id = "dbt_cloud_trigger_job_id" + case _dbt_cloud_trigger_user_attribute_id = "dbt_cloud_trigger_user_attribute_id" + case _dbt_cloud_webhook_id = "dbt_cloud_webhook_id" + case _webhook_secret = "webhook_secret" + case has_webhook_secret + case assert_validator_config_is_enabled + case _assert_validator_config_concurrency = "assert_validator_config_concurrency" + case _assert_validator_config_selectors = "assert_validator_config_selectors" + case _assert_validator_config_exclusions = "assert_validator_config_exclusions" + case content_validator_config_is_enabled + case content_validator_config_exclude_personal + case content_validator_config_incremental + case _content_validator_config_exclude_folders = "content_validator_config_exclude_folders" + case _content_validator_config_include_folders = "content_validator_config_include_folders" + case _content_validator_config_selectors = "content_validator_config_selectors" + case _content_validator_config_exclusions = "content_validator_config_exclusions" + case lookml_validator_config_is_enabled + case _lookml_validator_config_severity = "lookml_validator_config_severity" + case _lookml_validator_config_timeout = "lookml_validator_config_timeout" + case style_validator_config_is_enabled + case style_validator_config_incremental + case sql_validator_config_is_enabled + case sql_validator_config_fail_fast + case sql_validator_config_incremental + case sql_validator_config_ignore_hidden + case _sql_validator_config_query_concurrency = "sql_validator_config_query_concurrency" + case _sql_validator_config_chunk_size = "sql_validator_config_chunk_size" + case _sql_validator_config_selectors = "sql_validator_config_selectors" + case _sql_validator_config_exclusions = "sql_validator_config_exclusions" + case upstream_trigger_is_enabled + case _upstream_projects = "upstream_projects" + } + /** + * Operations the current user is able to perform on this object (read-only) + */ + public var can: StringDictionary? + + private var _id: AnyString? + /** + * ID of the CI suite (read-only) + */ + public var id: String? { + get { _id?.value } + set { _id = newValue.map(AnyString.init) } + } + + private var _name: AnyString? + /** + * Name of the CI suite + */ + public var name: String? { + get { _name?.value } + set { _name = newValue.map(AnyString.init) } + } + + private var _project_id: AnyString? + /** + * ID of the LookML project (read-only) + */ + public var project_id: String? { + get { _project_id?.value } + set { _project_id = newValue.map(AnyString.init) } + } + + /** + * Time and date that the CI suite was created (read-only) + */ + public var created_at: Date? + + /** + * Time and date that the CI suite was updated (read-only) + */ + public var updated_at: Date? + + /** + * Whether the CI suite schedule trigger is active + */ + public var schedule_trigger_is_enabled: Bool? + + private var _schedule_trigger_crontab: AnyString? + /** + * Crontab that the CI suite is scheduled to run + */ + public var schedule_trigger_crontab: String? { + get { _schedule_trigger_crontab?.value } + set { _schedule_trigger_crontab = newValue.map(AnyString.init) } + } + + private var _schedule_trigger_timezone: AnyString? + /** + * Timezone for the CI suite schedule + */ + public var schedule_trigger_timezone: String? { + get { _schedule_trigger_timezone?.value } + set { _schedule_trigger_timezone = newValue.map(AnyString.init) } + } + + /** + * Whether alerting is enabled for the CI suite + */ + public var alerting_enabled: Bool? + + private var _alert_email_addresses: [AnyString]? + /** + * Email addresses to send alerts to + */ + public var alert_email_addresses: [String]? { + get { if let v = _alert_email_addresses { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _alert_email_addresses = v.map { AnyString.init($0) } } else { _alert_email_addresses = nil } } + } + + /** + * Whether to alert on failed status + */ + public var alert_on_failed_status: Bool? + + /** + * Whether to alert on error status + */ + public var alert_on_error_status: Bool? + + /** + * Whether to alert on passed status + */ + public var alert_on_passed_status: Bool? + + /** + * Whether to alert on cancelled status + */ + public var alert_on_cancelled_status: Bool? + + /** + * Whether the CI suite change request trigger is active + */ + public var change_request_trigger_is_enabled: Bool? + + private var _change_request_trigger_hook_id: AnyString? + /** + * ID of the hook that triggers the CI Suite to run (read-only) + */ + public var change_request_trigger_hook_id: String? { + get { _change_request_trigger_hook_id?.value } + set { _change_request_trigger_hook_id = newValue.map(AnyString.init) } + } + + private var _change_request_trigger_target_branch: AnyString? + /** + * Git branch that should be compared against when the CI suite is run, used when the run is incremental + */ + public var change_request_trigger_target_branch: String? { + get { _change_request_trigger_target_branch?.value } + set { _change_request_trigger_target_branch = newValue.map(AnyString.init) } + } + + private var _guid: AnyString? + /** + * GUID of the CI suite (read-only) + */ + public var guid: String? { + get { _guid?.value } + set { _guid = newValue.map(AnyString.init) } + } + + /** + * Whether the CI suite dbt Cloud trigger is active + */ + public var dbt_cloud_trigger_is_enabled: Bool? + + private var _dbt_cloud_trigger_job_id: AnyInt? + /** + * Job ID of the dbt Cloud job + */ + public var dbt_cloud_trigger_job_id: Int64? { + get { _dbt_cloud_trigger_job_id?.value } + set { _dbt_cloud_trigger_job_id = newValue.map(AnyInt.init) } + } + + private var _dbt_cloud_trigger_user_attribute_id: AnyString? + /** + * User Attribute ID used for schema substitution + */ + public var dbt_cloud_trigger_user_attribute_id: String? { + get { _dbt_cloud_trigger_user_attribute_id?.value } + set { _dbt_cloud_trigger_user_attribute_id = newValue.map(AnyString.init) } + } + + private var _dbt_cloud_webhook_id: AnyString? + /** + * Webhook ID registered in dbt Cloud (read-only) + */ + public var dbt_cloud_webhook_id: String? { + get { _dbt_cloud_webhook_id?.value } + set { _dbt_cloud_webhook_id = newValue.map(AnyString.init) } + } + + private var _webhook_secret: AnyString? + /** + * (Write-Only) Webhook secret used to authenticate incoming webhook requests + */ + public var webhook_secret: String? { + get { _webhook_secret?.value } + set { _webhook_secret = newValue.map(AnyString.init) } + } + + /** + * Whether the CI suite has a webhook secret configured (read-only) + */ + public var has_webhook_secret: Bool? + + /** + * Whether assert validation is enabled for the CI suite + */ + public var assert_validator_config_is_enabled: Bool? + + private var _assert_validator_config_concurrency: AnyInt? + /** + * Number of tests that should run concurrently during assert validation + */ + public var assert_validator_config_concurrency: Int64? { + get { _assert_validator_config_concurrency?.value } + set { _assert_validator_config_concurrency = newValue.map(AnyInt.init) } + } + + private var _assert_validator_config_selectors: [AnyString]? + /** + * Explores that assert validation should run for (model_name/explore_name) + */ + public var assert_validator_config_selectors: [String]? { + get { if let v = _assert_validator_config_selectors { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _assert_validator_config_selectors = v.map { AnyString.init($0) } } else { _assert_validator_config_selectors = nil } } + } + + private var _assert_validator_config_exclusions: [AnyString]? + /** + * Explores that should be excluded from assert validation (model_name/explore_name) + */ + public var assert_validator_config_exclusions: [String]? { + get { if let v = _assert_validator_config_exclusions { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _assert_validator_config_exclusions = v.map { AnyString.init($0) } } else { _assert_validator_config_exclusions = nil } } + } + + /** + * Whether content validation is enabled for the CI suite + */ + public var content_validator_config_is_enabled: Bool? + + /** + * Whether content validation should ignore personal folders + */ + public var content_validator_config_exclude_personal: Bool? + + /** + * Whether content should validate incrementally + */ + public var content_validator_config_incremental: Bool? + + private var _content_validator_config_exclude_folders: [AnyString]? + /** + * Folders whose content should not be validated + */ + public var content_validator_config_exclude_folders: [String]? { + get { if let v = _content_validator_config_exclude_folders { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _content_validator_config_exclude_folders = v.map { AnyString.init($0) } } else { _content_validator_config_exclude_folders = nil } } + } + + private var _content_validator_config_include_folders: [AnyString]? + /** + * Folders whose content should be validated + */ + public var content_validator_config_include_folders: [String]? { + get { if let v = _content_validator_config_include_folders { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _content_validator_config_include_folders = v.map { AnyString.init($0) } } else { _content_validator_config_include_folders = nil } } + } + + private var _content_validator_config_selectors: [AnyString]? + /** + * Explores whose content should be validated (model_name/explore_name) + */ + public var content_validator_config_selectors: [String]? { + get { if let v = _content_validator_config_selectors { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _content_validator_config_selectors = v.map { AnyString.init($0) } } else { _content_validator_config_selectors = nil } } + } + + private var _content_validator_config_exclusions: [AnyString]? + /** + * Explores that should be excluded from content validation (model_name/explore_name) + */ + public var content_validator_config_exclusions: [String]? { + get { if let v = _content_validator_config_exclusions { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _content_validator_config_exclusions = v.map { AnyString.init($0) } } else { _content_validator_config_exclusions = nil } } + } + + /** + * Whether LookML validation is enabled for the CI suite + */ + public var lookml_validator_config_is_enabled: Bool? + + private var _lookml_validator_config_severity: AnyString? + /** + * Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + */ + public var lookml_validator_config_severity: String? { + get { _lookml_validator_config_severity?.value } + set { _lookml_validator_config_severity = newValue.map(AnyString.init) } + } + + private var _lookml_validator_config_timeout: AnyInt? + /** + * Amount of time after which LookML Validation should stop running + */ + public var lookml_validator_config_timeout: Int64? { + get { _lookml_validator_config_timeout?.value } + set { _lookml_validator_config_timeout = newValue.map(AnyInt.init) } + } + + /** + * Whether LookML Style Validator is enabled for the CI suite + */ + public var style_validator_config_is_enabled: Bool? + + /** + * Whether LookML Style Validator should run incrementally on changed LookML files only + */ + public var style_validator_config_incremental: Bool? + + /** + * Whether SQL validation is enabled for the CI suite + */ + public var sql_validator_config_is_enabled: Bool? + + /** + * Whether SQL validation should stop after the first failure + */ + public var sql_validator_config_fail_fast: Bool? + + /** + * Whether SQL should validate incrementally + */ + public var sql_validator_config_incremental: Bool? + + /** + * Whether SQL validation should ignore hidden fields + */ + public var sql_validator_config_ignore_hidden: Bool? + + private var _sql_validator_config_query_concurrency: AnyInt? + /** + * Number of queries that should run concurrently during SQL validation + */ + public var sql_validator_config_query_concurrency: Int64? { + get { _sql_validator_config_query_concurrency?.value } + set { _sql_validator_config_query_concurrency = newValue.map(AnyInt.init) } + } + + private var _sql_validator_config_chunk_size: AnyInt? + /** + * The max number of rows that should be returned for each query + */ + public var sql_validator_config_chunk_size: Int64? { + get { _sql_validator_config_chunk_size?.value } + set { _sql_validator_config_chunk_size = newValue.map(AnyInt.init) } + } + + private var _sql_validator_config_selectors: [AnyString]? + /** + * Explores whose sql should be validated (model_name/explore_name) + */ + public var sql_validator_config_selectors: [String]? { + get { if let v = _sql_validator_config_selectors { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _sql_validator_config_selectors = v.map { AnyString.init($0) } } else { _sql_validator_config_selectors = nil } } + } + + private var _sql_validator_config_exclusions: [AnyString]? + /** + * Explores that should be excluded from SQL validation (model_name/explore_name) + */ + public var sql_validator_config_exclusions: [String]? { + get { if let v = _sql_validator_config_exclusions { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _sql_validator_config_exclusions = v.map { AnyString.init($0) } } else { _sql_validator_config_exclusions = nil } } + } + + /** + * Whether the CI suite upstream project imports trigger is active + */ + public var upstream_trigger_is_enabled: Bool? + + private var _upstream_projects: [AnyString]? + /** + * Names of upstream projects subscribed for pull request triggers + */ + public var upstream_projects: [String]? { + get { if let v = _upstream_projects { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _upstream_projects = v.map { AnyString.init($0) } } else { _upstream_projects = nil } } + } + + public init(can: StringDictionary? = nil, id: String? = nil, name: String? = nil, project_id: String? = nil, created_at: Date? = nil, updated_at: Date? = nil, schedule_trigger_is_enabled: Bool? = nil, schedule_trigger_crontab: String? = nil, schedule_trigger_timezone: String? = nil, alerting_enabled: Bool? = nil, alert_email_addresses: [String]? = nil, alert_on_failed_status: Bool? = nil, alert_on_error_status: Bool? = nil, alert_on_passed_status: Bool? = nil, alert_on_cancelled_status: Bool? = nil, change_request_trigger_is_enabled: Bool? = nil, change_request_trigger_hook_id: String? = nil, change_request_trigger_target_branch: String? = nil, guid: String? = nil, dbt_cloud_trigger_is_enabled: Bool? = nil, dbt_cloud_trigger_job_id: Int64? = nil, dbt_cloud_trigger_user_attribute_id: String? = nil, dbt_cloud_webhook_id: String? = nil, webhook_secret: String? = nil, has_webhook_secret: Bool? = nil, assert_validator_config_is_enabled: Bool? = nil, assert_validator_config_concurrency: Int64? = nil, assert_validator_config_selectors: [String]? = nil, assert_validator_config_exclusions: [String]? = nil, content_validator_config_is_enabled: Bool? = nil, content_validator_config_exclude_personal: Bool? = nil, content_validator_config_incremental: Bool? = nil, content_validator_config_exclude_folders: [String]? = nil, content_validator_config_include_folders: [String]? = nil, content_validator_config_selectors: [String]? = nil, content_validator_config_exclusions: [String]? = nil, lookml_validator_config_is_enabled: Bool? = nil, lookml_validator_config_severity: String? = nil, lookml_validator_config_timeout: Int64? = nil, style_validator_config_is_enabled: Bool? = nil, style_validator_config_incremental: Bool? = nil, sql_validator_config_is_enabled: Bool? = nil, sql_validator_config_fail_fast: Bool? = nil, sql_validator_config_incremental: Bool? = nil, sql_validator_config_ignore_hidden: Bool? = nil, sql_validator_config_query_concurrency: Int64? = nil, sql_validator_config_chunk_size: Int64? = nil, sql_validator_config_selectors: [String]? = nil, sql_validator_config_exclusions: [String]? = nil, upstream_trigger_is_enabled: Bool? = nil, upstream_projects: [String]? = nil) { + self.can = can + self._id = id.map(AnyString.init) + self._name = name.map(AnyString.init) + self._project_id = project_id.map(AnyString.init) + self.created_at = created_at + self.updated_at = updated_at + self.schedule_trigger_is_enabled = schedule_trigger_is_enabled + self._schedule_trigger_crontab = schedule_trigger_crontab.map(AnyString.init) + self._schedule_trigger_timezone = schedule_trigger_timezone.map(AnyString.init) + self.alerting_enabled = alerting_enabled + if let v = alert_email_addresses { _alert_email_addresses = v.map { AnyString.init($0) } } else { _alert_email_addresses = nil } + self.alert_on_failed_status = alert_on_failed_status + self.alert_on_error_status = alert_on_error_status + self.alert_on_passed_status = alert_on_passed_status + self.alert_on_cancelled_status = alert_on_cancelled_status + self.change_request_trigger_is_enabled = change_request_trigger_is_enabled + self._change_request_trigger_hook_id = change_request_trigger_hook_id.map(AnyString.init) + self._change_request_trigger_target_branch = change_request_trigger_target_branch.map(AnyString.init) + self._guid = guid.map(AnyString.init) + self.dbt_cloud_trigger_is_enabled = dbt_cloud_trigger_is_enabled + self._dbt_cloud_trigger_job_id = dbt_cloud_trigger_job_id.map(AnyInt.init) + self._dbt_cloud_trigger_user_attribute_id = dbt_cloud_trigger_user_attribute_id.map(AnyString.init) + self._dbt_cloud_webhook_id = dbt_cloud_webhook_id.map(AnyString.init) + self._webhook_secret = webhook_secret.map(AnyString.init) + self.has_webhook_secret = has_webhook_secret + self.assert_validator_config_is_enabled = assert_validator_config_is_enabled + self._assert_validator_config_concurrency = assert_validator_config_concurrency.map(AnyInt.init) + if let v = assert_validator_config_selectors { _assert_validator_config_selectors = v.map { AnyString.init($0) } } else { _assert_validator_config_selectors = nil } + if let v = assert_validator_config_exclusions { _assert_validator_config_exclusions = v.map { AnyString.init($0) } } else { _assert_validator_config_exclusions = nil } + self.content_validator_config_is_enabled = content_validator_config_is_enabled + self.content_validator_config_exclude_personal = content_validator_config_exclude_personal + self.content_validator_config_incremental = content_validator_config_incremental + if let v = content_validator_config_exclude_folders { _content_validator_config_exclude_folders = v.map { AnyString.init($0) } } else { _content_validator_config_exclude_folders = nil } + if let v = content_validator_config_include_folders { _content_validator_config_include_folders = v.map { AnyString.init($0) } } else { _content_validator_config_include_folders = nil } + if let v = content_validator_config_selectors { _content_validator_config_selectors = v.map { AnyString.init($0) } } else { _content_validator_config_selectors = nil } + if let v = content_validator_config_exclusions { _content_validator_config_exclusions = v.map { AnyString.init($0) } } else { _content_validator_config_exclusions = nil } + self.lookml_validator_config_is_enabled = lookml_validator_config_is_enabled + self._lookml_validator_config_severity = lookml_validator_config_severity.map(AnyString.init) + self._lookml_validator_config_timeout = lookml_validator_config_timeout.map(AnyInt.init) + self.style_validator_config_is_enabled = style_validator_config_is_enabled + self.style_validator_config_incremental = style_validator_config_incremental + self.sql_validator_config_is_enabled = sql_validator_config_is_enabled + self.sql_validator_config_fail_fast = sql_validator_config_fail_fast + self.sql_validator_config_incremental = sql_validator_config_incremental + self.sql_validator_config_ignore_hidden = sql_validator_config_ignore_hidden + self._sql_validator_config_query_concurrency = sql_validator_config_query_concurrency.map(AnyInt.init) + self._sql_validator_config_chunk_size = sql_validator_config_chunk_size.map(AnyInt.init) + if let v = sql_validator_config_selectors { _sql_validator_config_selectors = v.map { AnyString.init($0) } } else { _sql_validator_config_selectors = nil } + if let v = sql_validator_config_exclusions { _sql_validator_config_exclusions = v.map { AnyString.init($0) } } else { _sql_validator_config_exclusions = nil } + self.upstream_trigger_is_enabled = upstream_trigger_is_enabled + if let v = upstream_projects { _upstream_projects = v.map { AnyString.init($0) } } else { _upstream_projects = nil } + } + +} + public struct ProjectError: SDKModel { private enum CodingKeys : String, CodingKey { @@ -23462,15 +23493,6 @@ public struct ProjectFile: SDKModel { } -public struct ProjectRun: SDKModel { - public var run: Run? - - public init(run: Run? = nil) { - self.run = run - } - -} - public struct ProjectValidation: SDKModel { private enum CodingKeys : String, CodingKey { @@ -24995,151 +25017,6 @@ public struct RoleSearch: SDKModel { } -public struct Run: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _run_id = "run_id" - case created_at - case started_at - case finished_at - case _status_url = "status_url" - case _status = "status" - case _git_service = "git_service" - case git_state - case result - case schedule - case _target_branch = "target_branch" - case _title = "title" - case _trigger = "trigger" - case change_request - case _suite_id = "suite_id" - case _username = "username" - } - private var _run_id: AnyString? - /** - * ID of the CI run (read-only) - */ - public var run_id: String? { - get { _run_id?.value } - set { _run_id = newValue.map(AnyString.init) } - } - - /** - * Time and date that the CI run was initiated (read-only) - */ - public var created_at: Date? - - /** - * Time and date that the CI run began executing (read-only) - */ - public var started_at: Date? - - /** - * Time and date that the CI run completed (read-only) - */ - public var finished_at: Date? - - private var _status_url: AnyString? - /** - * Git provider URL where you can view the commit status. This is the status URL that you specify when you create a CI suite (read-only) - */ - public var status_url: String? { - get { _status_url?.value } - set { _status_url = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * Status of the CI run (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - private var _git_service: AnyString? - /** - * Git service for CI run (e.g. GitHub) (read-only) - */ - public var git_service: String? { - get { _git_service?.value } - set { _git_service = newValue.map(AnyString.init) } - } - - public var git_state: CIGitState? - - public var result: RunResult? - - public var schedule: CIScheduleTrigger? - - private var _target_branch: AnyString? - /** - * Git branch that the CI run compares against during validation, used for incremental runs (read-only) - */ - public var target_branch: String? { - get { _target_branch?.value } - set { _target_branch = newValue.map(AnyString.init) } - } - - private var _title: AnyString? - /** - * Name of the CI suite (read-only) - */ - public var title: String? { - get { _title?.value } - set { _title = newValue.map(AnyString.init) } - } - - private var _trigger: AnyString? - /** - * Trigger for CI run (unknown, manual, schedule, change_request) (read-only) - */ - public var trigger: String? { - get { _trigger?.value } - set { _trigger = newValue.map(AnyString.init) } - } - - public var change_request: CIChangeRequest? - - private var _suite_id: AnyString? - /** - * ID of the CI suite (read-only) - */ - public var suite_id: String? { - get { _suite_id?.value } - set { _suite_id = newValue.map(AnyString.init) } - } - - private var _username: AnyString? - /** - * Username of the user who triggered the CI run, if the CI run was manually triggered (read-only) - */ - public var username: String? { - get { _username?.value } - set { _username = newValue.map(AnyString.init) } - } - - public init(run_id: String? = nil, created_at: Date? = nil, started_at: Date? = nil, finished_at: Date? = nil, status_url: String? = nil, status: String? = nil, git_service: String? = nil, git_state: CIGitState? = nil, result: RunResult? = nil, schedule: CIScheduleTrigger? = nil, target_branch: String? = nil, title: String? = nil, trigger: String? = nil, change_request: CIChangeRequest? = nil, suite_id: String? = nil, username: String? = nil) { - self._run_id = run_id.map(AnyString.init) - self.created_at = created_at - self.started_at = started_at - self.finished_at = finished_at - self._status_url = status_url.map(AnyString.init) - self._status = status.map(AnyString.init) - self._git_service = git_service.map(AnyString.init) - self.git_state = git_state - self.result = result - self.schedule = schedule - self._target_branch = target_branch.map(AnyString.init) - self._title = title.map(AnyString.init) - self._trigger = trigger.map(AnyString.init) - self.change_request = change_request - self._suite_id = suite_id.map(AnyString.init) - self._username = username.map(AnyString.init) - } - -} - public struct RunningQueries: SDKModel { private enum CodingKeys : String, CodingKey { @@ -25355,39 +25232,6 @@ public struct RunningQueries: SDKModel { } -public struct RunResult: SDKModel { - public var sql_result: SqlValidatorResult? - - public var sql_error: GenericError? - - public var assert_result: AssertValidatorResult? - - public var assert_error: GenericError? - - public var content_result: ContentValidatorResult? - - public var content_error: GenericError? - - public var lookml_result: LookMLValidatorResult? - - public var lookml_error: GenericError? - - public var generic_error: GenericError? - - public init(sql_result: SqlValidatorResult? = nil, sql_error: GenericError? = nil, assert_result: AssertValidatorResult? = nil, assert_error: GenericError? = nil, content_result: ContentValidatorResult? = nil, content_error: GenericError? = nil, lookml_result: LookMLValidatorResult? = nil, lookml_error: GenericError? = nil, generic_error: GenericError? = nil) { - self.sql_result = sql_result - self.sql_error = sql_error - self.assert_result = assert_result - self.assert_error = assert_error - self.content_result = content_result - self.content_error = content_error - self.lookml_result = lookml_result - self.lookml_error = lookml_error - self.generic_error = generic_error - } - -} - public struct SamlConfig: SDKModel { private enum CodingKeys : String, CodingKey { @@ -26057,6 +25901,7 @@ public struct ScheduledPlan: SDKModel { case _color_theme = "color_theme" case long_tables case pdf_page_breaks + case include_filters case _tab_ids = "tab_ids" case _inline_table_width = "inline_table_width" case _query_id = "query_id" @@ -26064,9 +25909,11 @@ public struct ScheduledPlan: SDKModel { case created_at case updated_at case _title = "title" + case _content_title = "content_title" case user case next_run_at case last_run_at + case _last_run_status = "last_run_status" case can } private var _name: AnyString? @@ -26279,6 +26126,11 @@ public struct ScheduledPlan: SDKModel { */ public var pdf_page_breaks: Bool? + /** + * Whether or not to include filters context + */ + public var include_filters: Bool? + private var _tab_ids: [AnyString]? /** * IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) @@ -26334,6 +26186,15 @@ public struct ScheduledPlan: SDKModel { set { _title = newValue.map(AnyString.init) } } + private var _content_title: AnyString? + /** + * Title of the underlying content (Dashboard, Look, LookML Dashboard, or Explore) associated with this ScheduledPlan (read-only) + */ + public var content_title: String? { + get { _content_title?.value } + set { _content_title = newValue.map(AnyString.init) } + } + public var user: UserPublic? /** @@ -26346,12 +26207,21 @@ public struct ScheduledPlan: SDKModel { */ public var last_run_at: Date? + private var _last_run_status: AnyString? + /** + * Status of the last run for this ScheduledPlan (read-only) + */ + public var last_run_status: String? { + get { _last_run_status?.value } + set { _last_run_status = newValue.map(AnyString.init) } + } + /** * Operations the current user is able to perform on this object (read-only) */ public var can: StringDictionary? - public init(name: String? = nil, user_id: String? = nil, run_as_recipient: Bool? = nil, enabled: Bool? = nil, look_id: String? = nil, dashboard_id: String? = nil, lookml_dashboard_id: String? = nil, filters_string: String? = nil, dashboard_filters: String? = nil, require_results: Bool? = nil, require_no_results: Bool? = nil, require_change: Bool? = nil, send_all_results: Bool? = nil, crontab: String? = nil, datagroup: String? = nil, timezone: String? = nil, scheduled_plan_destination: [ScheduledPlanDestination]? = nil, run_once: Bool? = nil, include_links: Bool? = nil, include_dashboard_summary: Bool? = nil, custom_url_base: String? = nil, custom_url_params: String? = nil, custom_url_label: String? = nil, show_custom_url: Bool? = nil, pdf_paper_size: String? = nil, pdf_landscape: Bool? = nil, embed: Bool? = nil, color_theme: String? = nil, long_tables: Bool? = nil, pdf_page_breaks: Bool? = nil, tab_ids: [String]? = nil, inline_table_width: Int64? = nil, query_id: String? = nil, id: String? = nil, created_at: Date? = nil, updated_at: Date? = nil, title: String? = nil, user: UserPublic? = nil, next_run_at: Date? = nil, last_run_at: Date? = nil, can: StringDictionary? = nil) { + public init(name: String? = nil, user_id: String? = nil, run_as_recipient: Bool? = nil, enabled: Bool? = nil, look_id: String? = nil, dashboard_id: String? = nil, lookml_dashboard_id: String? = nil, filters_string: String? = nil, dashboard_filters: String? = nil, require_results: Bool? = nil, require_no_results: Bool? = nil, require_change: Bool? = nil, send_all_results: Bool? = nil, crontab: String? = nil, datagroup: String? = nil, timezone: String? = nil, scheduled_plan_destination: [ScheduledPlanDestination]? = nil, run_once: Bool? = nil, include_links: Bool? = nil, include_dashboard_summary: Bool? = nil, custom_url_base: String? = nil, custom_url_params: String? = nil, custom_url_label: String? = nil, show_custom_url: Bool? = nil, pdf_paper_size: String? = nil, pdf_landscape: Bool? = nil, embed: Bool? = nil, color_theme: String? = nil, long_tables: Bool? = nil, pdf_page_breaks: Bool? = nil, include_filters: Bool? = nil, tab_ids: [String]? = nil, inline_table_width: Int64? = nil, query_id: String? = nil, id: String? = nil, created_at: Date? = nil, updated_at: Date? = nil, title: String? = nil, content_title: String? = nil, user: UserPublic? = nil, next_run_at: Date? = nil, last_run_at: Date? = nil, last_run_status: String? = nil, can: StringDictionary? = nil) { self._name = name.map(AnyString.init) self._user_id = user_id.map(AnyString.init) self.run_as_recipient = run_as_recipient @@ -26382,6 +26252,7 @@ public struct ScheduledPlan: SDKModel { self._color_theme = color_theme.map(AnyString.init) self.long_tables = long_tables self.pdf_page_breaks = pdf_page_breaks + self.include_filters = include_filters if let v = tab_ids { _tab_ids = v.map { AnyString.init($0) } } else { _tab_ids = nil } self._inline_table_width = inline_table_width.map(AnyInt.init) self._query_id = query_id.map(AnyString.init) @@ -26389,9 +26260,11 @@ public struct ScheduledPlan: SDKModel { self.created_at = created_at self.updated_at = updated_at self._title = title.map(AnyString.init) + self._content_title = content_title.map(AnyString.init) self.user = user self.next_run_at = next_run_at self.last_run_at = last_run_at + self._last_run_status = last_run_status.map(AnyString.init) self.can = can } @@ -26410,6 +26283,7 @@ public struct ScheduledPlanDestination: SDKModel { case _type = "type" case _parameters = "parameters" case _secret_parameters = "secret_parameters" + case include_filters case _message = "message" } private var _id: AnyString? @@ -26490,6 +26364,11 @@ public struct ScheduledPlanDestination: SDKModel { set { _secret_parameters = newValue.map(AnyString.init) } } + /** + * Whether or not to include filters context + */ + public var include_filters: Bool? + private var _message: AnyString? /** * Optional message to be included in scheduled emails @@ -26499,7 +26378,7 @@ public struct ScheduledPlanDestination: SDKModel { set { _message = newValue.map(AnyString.init) } } - public init(id: String? = nil, scheduled_plan_id: String? = nil, format: String? = nil, apply_formatting: Bool? = nil, apply_vis: Bool? = nil, address: String? = nil, looker_recipient: Bool? = nil, type: String? = nil, parameters: String? = nil, secret_parameters: String? = nil, message: String? = nil) { + public init(id: String? = nil, scheduled_plan_id: String? = nil, format: String? = nil, apply_formatting: Bool? = nil, apply_vis: Bool? = nil, address: String? = nil, looker_recipient: Bool? = nil, type: String? = nil, parameters: String? = nil, secret_parameters: String? = nil, include_filters: Bool? = nil, message: String? = nil) { self._id = id.map(AnyString.init) self._scheduled_plan_id = scheduled_plan_id.map(AnyString.init) self._format = format.map(AnyString.init) @@ -26510,6 +26389,7 @@ public struct ScheduledPlanDestination: SDKModel { self._type = type.map(AnyString.init) self._parameters = parameters.map(AnyString.init) self._secret_parameters = secret_parameters.map(AnyString.init) + self.include_filters = include_filters self._message = message.map(AnyString.init) } @@ -27257,6 +27137,7 @@ public struct Setting: SDKModel { case override_warnings case _email_domain_allowlist = "email_domain_allowlist" case embed_cookieless_v2 + case embed_vis_modernization_default case embed_enabled case embed_config case login_notification_enabled @@ -27366,6 +27247,11 @@ public struct Setting: SDKModel { */ public var embed_cookieless_v2: Bool? + /** + * Default net new visualizations in embedded context to Modern theme + */ + public var embed_vis_modernization_default: Bool? + /** * True if embedding is enabled https://docs.cloud.google.com/looker/docs/r/looker-core-feature-embed, false otherwise (read-only) */ @@ -27446,7 +27332,7 @@ public struct Setting: SDKModel { public var mcp_tools: McpTools? - public init(instance_config: InstanceConfig? = nil, extension_framework_enabled: Bool? = nil, extension_load_url_enabled: Bool? = nil, marketplace_auto_install_enabled: Bool? = nil, marketplace_automation: MarketplaceAutomation? = nil, marketplace_enabled: Bool? = nil, marketplace_site: String? = nil, marketplace_terms_accepted: Bool? = nil, privatelabel_configuration: PrivatelabelConfiguration? = nil, custom_welcome_email: CustomWelcomeEmail? = nil, onboarding_enabled: Bool? = nil, timezone: String? = nil, allow_user_timezones: Bool? = nil, data_connector_default_enabled: Bool? = nil, host_url: String? = nil, override_warnings: Bool? = nil, email_domain_allowlist: [String]? = nil, embed_cookieless_v2: Bool? = nil, embed_enabled: Bool? = nil, embed_config: EmbedConfig? = nil, login_notification_enabled: Bool? = nil, login_notification_text: String? = nil, dashboard_auto_refresh_restriction: Bool? = nil, dashboard_auto_refresh_minimum_interval: String? = nil, managed_certificate_uri: [String]? = nil, content_certification_documentation_link: String? = nil, revoke_certification_on_edits: Bool? = nil, automated_mfa_enabled: Bool? = nil, is_content_certification_enabled: Bool? = nil, auto_certify_lookml_content: Bool? = nil, ca_agent_observability: Bool? = nil, mcp_tools: McpTools? = nil) { + public init(instance_config: InstanceConfig? = nil, extension_framework_enabled: Bool? = nil, extension_load_url_enabled: Bool? = nil, marketplace_auto_install_enabled: Bool? = nil, marketplace_automation: MarketplaceAutomation? = nil, marketplace_enabled: Bool? = nil, marketplace_site: String? = nil, marketplace_terms_accepted: Bool? = nil, privatelabel_configuration: PrivatelabelConfiguration? = nil, custom_welcome_email: CustomWelcomeEmail? = nil, onboarding_enabled: Bool? = nil, timezone: String? = nil, allow_user_timezones: Bool? = nil, data_connector_default_enabled: Bool? = nil, host_url: String? = nil, override_warnings: Bool? = nil, email_domain_allowlist: [String]? = nil, embed_cookieless_v2: Bool? = nil, embed_vis_modernization_default: Bool? = nil, embed_enabled: Bool? = nil, embed_config: EmbedConfig? = nil, login_notification_enabled: Bool? = nil, login_notification_text: String? = nil, dashboard_auto_refresh_restriction: Bool? = nil, dashboard_auto_refresh_minimum_interval: String? = nil, managed_certificate_uri: [String]? = nil, content_certification_documentation_link: String? = nil, revoke_certification_on_edits: Bool? = nil, automated_mfa_enabled: Bool? = nil, is_content_certification_enabled: Bool? = nil, auto_certify_lookml_content: Bool? = nil, ca_agent_observability: Bool? = nil, mcp_tools: McpTools? = nil) { self.instance_config = instance_config self.extension_framework_enabled = extension_framework_enabled self.extension_load_url_enabled = extension_load_url_enabled @@ -27465,6 +27351,7 @@ public struct Setting: SDKModel { self.override_warnings = override_warnings if let v = email_domain_allowlist { _email_domain_allowlist = v.map { AnyString.init($0) } } else { _email_domain_allowlist = nil } self.embed_cookieless_v2 = embed_cookieless_v2 + self.embed_vis_modernization_default = embed_vis_modernization_default self.embed_enabled = embed_enabled self.embed_config = embed_config self.login_notification_enabled = login_notification_enabled @@ -28061,275 +27948,6 @@ public struct SqlQueryCreate: SDKModel { } -public struct SqlValidatorError: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _type = "type" - case _title = "title" - case _detail = "detail" - case _status = "status" - case _instance = "instance" - case _model = "model" - case _explore = "explore" - case _message = "message" - case _explore_url = "explore_url" - case _lookml_url = "lookml_url" - case _dimension = "dimension" - case _line_number = "line_number" - } - private var _type: AnyString? - /** - * A URI reference that identifies the problem type (read-only) - */ - public var type: String? { - get { _type?.value } - set { _type = newValue.map(AnyString.init) } - } - - private var _title: AnyString? - /** - * Overview of the error (read-only) - */ - public var title: String? { - get { _title?.value } - set { _title = newValue.map(AnyString.init) } - } - - private var _detail: AnyString? - /** - * Detail of the error (read-only) - */ - public var detail: String? { - get { _detail?.value } - set { _detail = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * The HTTP status code for the problem (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - private var _instance: AnyString? - /** - * URI reference that identifies the specific occurrence of the problem (read-only) - */ - public var instance: String? { - get { _instance?.value } - set { _instance = newValue.map(AnyString.init) } - } - - private var _model: AnyString? - /** - * LookML model that contains the Explore that failed SQL validation (read-only) - */ - public var model: String? { - get { _model?.value } - set { _model = newValue.map(AnyString.init) } - } - - private var _explore: AnyString? - /** - * LookML Explore that failed SQL validation (read-only) - */ - public var explore: String? { - get { _explore?.value } - set { _explore = newValue.map(AnyString.init) } - } - - private var _message: AnyString? - /** - * Message returned by the SQL validation (read-only) - */ - public var message: String? { - get { _message?.value } - set { _message = newValue.map(AnyString.init) } - } - - private var _explore_url: AnyString? - /** - * URL to the Explore (read-only) - */ - public var explore_url: String? { - get { _explore_url?.value } - set { _explore_url = newValue.map(AnyString.init) } - } - - private var _lookml_url: AnyString? - /** - * URL to the LookML that caused the error (read-only) - */ - public var lookml_url: String? { - get { _lookml_url?.value } - set { _lookml_url = newValue.map(AnyString.init) } - } - - private var _dimension: AnyString? - /** - * LookML dimension that caused the error (read-only) - */ - public var dimension: String? { - get { _dimension?.value } - set { _dimension = newValue.map(AnyString.init) } - } - - private var _line_number: AnyString? - /** - * Line of the error in the LookML file (read-only) - */ - public var line_number: String? { - get { _line_number?.value } - set { _line_number = newValue.map(AnyString.init) } - } - - public init(type: String? = nil, title: String? = nil, detail: String? = nil, status: String? = nil, instance: String? = nil, model: String? = nil, explore: String? = nil, message: String? = nil, explore_url: String? = nil, lookml_url: String? = nil, dimension: String? = nil, line_number: String? = nil) { - self._type = type.map(AnyString.init) - self._title = title.map(AnyString.init) - self._detail = detail.map(AnyString.init) - self._status = status.map(AnyString.init) - self._instance = instance.map(AnyString.init) - self._model = model.map(AnyString.init) - self._explore = explore.map(AnyString.init) - self._message = message.map(AnyString.init) - self._explore_url = explore_url.map(AnyString.init) - self._lookml_url = lookml_url.map(AnyString.init) - self._dimension = dimension.map(AnyString.init) - self._line_number = line_number.map(AnyString.init) - } - -} - -public struct SqlValidatorErrorItem: SDKModel { - public var sql_error: SqlValidatorError? - - public var generic_error: GenericError? - - public init(sql_error: SqlValidatorError? = nil, generic_error: GenericError? = nil) { - self.sql_error = sql_error - self.generic_error = generic_error - } - -} - -public struct SqlValidatorResult: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _name = "name" - case incremental - case _status = "status" - case result - } - private var _name: AnyString? - /** - * Name of the validator (sql) (read-only) - */ - public var name: String? { - get { _name?.value } - set { _name = newValue.map(AnyString.init) } - } - - /** - * Whether the validation was incremental (read-only) - */ - public var incremental: Bool? - - private var _status: AnyString? - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - /** - * The results of tested Explores (read-only) - */ - public var result: [SqlValidatorTestedExplore]? - - public init(name: String? = nil, incremental: Bool? = nil, status: String? = nil, result: [SqlValidatorTestedExplore]? = nil) { - self._name = name.map(AnyString.init) - self.incremental = incremental - self._status = status.map(AnyString.init) - self.result = result - } - -} - -public struct SqlValidatorTestedExplore: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _model = "model" - case _explore = "explore" - case _status = "status" - case _skip_reason = "skip_reason" - case _error_count = "error_count" - case errors - } - private var _model: AnyString? - /** - * LookML model that was tested (read-only) - */ - public var model: String? { - get { _model?.value } - set { _model = newValue.map(AnyString.init) } - } - - private var _explore: AnyString? - /** - * LookML Explore that was tested (read-only) - */ - public var explore: String? { - get { _explore?.value } - set { _explore = newValue.map(AnyString.init) } - } - - private var _status: AnyString? - /** - * Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) (read-only) - */ - public var status: String? { - get { _status?.value } - set { _status = newValue.map(AnyString.init) } - } - - private var _skip_reason: AnyString? - /** - * Reason the validation was skipped (read-only) - */ - public var skip_reason: String? { - get { _skip_reason?.value } - set { _skip_reason = newValue.map(AnyString.init) } - } - - private var _error_count: AnyInt? - /** - * Total number of failed validations (read-only) - */ - public var error_count: Int64? { - get { _error_count?.value } - set { _error_count = newValue.map(AnyInt.init) } - } - - /** - * Details of the LookML that failed SQL validation (read-only) - */ - public var errors: [SqlValidatorErrorItem]? - - public init(model: String? = nil, explore: String? = nil, status: String? = nil, skip_reason: String? = nil, error_count: Int64? = nil, errors: [SqlValidatorErrorItem]? = nil) { - self._model = model.map(AnyString.init) - self._explore = explore.map(AnyString.init) - self._status = status.map(AnyString.init) - self._skip_reason = skip_reason.map(AnyString.init) - self._error_count = error_count.map(AnyInt.init) - self.errors = errors - } - -} - public struct SshPublicKey: SDKModel { private enum CodingKeys : String, CodingKey { @@ -28923,6 +28541,9 @@ public struct ThemeSettings: SDKModel { private enum CodingKeys : String, CodingKey { case _background_color = "background_color" + case _background_image_url = "background_image_url" + case _background_image_id = "background_image_id" + case background_opacity case _base_font_size = "base_font_size" case _color_collection_id = "color_collection_id" case _font_color = "font_color" @@ -28977,6 +28598,29 @@ public struct ThemeSettings: SDKModel { set { _background_color = newValue.map(AnyString.init) } } + private var _background_image_url: AnyString? + /** + * URL for background image + */ + public var background_image_url: String? { + get { _background_image_url?.value } + set { _background_image_url = newValue.map(AnyString.init) } + } + + private var _background_image_id: AnyString? + /** + * Optional. ID of theme background image. + */ + public var background_image_id: String? { + get { _background_image_id?.value } + set { _background_image_id = newValue.map(AnyString.init) } + } + + /** + * Background image opacity (0.0 to 1.0). + */ + public var background_opacity: Float? + private var _base_font_size: AnyString? /** * Base font size for scaling fonts (only supported by legacy dashboards) @@ -29289,8 +28933,11 @@ public struct ThemeSettings: SDKModel { set { _border_radius = newValue.map(AnyString.init) } } - public init(background_color: String? = nil, base_font_size: String? = nil, color_collection_id: String? = nil, font_color: String? = nil, font_family: String? = nil, font_source: String? = nil, info_button_color: String? = nil, primary_button_color: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, text_tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, warn_button_color: String? = nil, tile_title_alignment: String? = nil, tile_shadow: Bool? = nil, show_last_updated_indicator: Bool? = nil, show_reload_data_icon: Bool? = nil, show_dashboard_menu: Bool? = nil, show_filters_toggle: Bool? = nil, show_dashboard_header: Bool? = nil, center_dashboard_title: Bool? = nil, dashboard_title_font_size: String? = nil, box_shadow: String? = nil, page_margin_top: String? = nil, page_margin_bottom: String? = nil, page_margin_sides: String? = nil, show_explore_header: Bool? = nil, show_explore_title: Bool? = nil, show_explore_last_run: Bool? = nil, show_explore_timezone: Bool? = nil, show_explore_run_stop_button: Bool? = nil, show_explore_actions_button: Bool? = nil, show_look_header: Bool? = nil, show_look_title: Bool? = nil, show_look_last_run: Bool? = nil, show_look_timezone: Bool? = nil, show_look_run_stop_button: Bool? = nil, show_look_actions_button: Bool? = nil, tile_title_font_size: String? = nil, column_gap_size: String? = nil, row_gap_size: String? = nil, border_radius: String? = nil) { + public init(background_color: String? = nil, background_image_url: String? = nil, background_image_id: String? = nil, background_opacity: Float? = nil, base_font_size: String? = nil, color_collection_id: String? = nil, font_color: String? = nil, font_family: String? = nil, font_source: String? = nil, info_button_color: String? = nil, primary_button_color: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, text_tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, warn_button_color: String? = nil, tile_title_alignment: String? = nil, tile_shadow: Bool? = nil, show_last_updated_indicator: Bool? = nil, show_reload_data_icon: Bool? = nil, show_dashboard_menu: Bool? = nil, show_filters_toggle: Bool? = nil, show_dashboard_header: Bool? = nil, center_dashboard_title: Bool? = nil, dashboard_title_font_size: String? = nil, box_shadow: String? = nil, page_margin_top: String? = nil, page_margin_bottom: String? = nil, page_margin_sides: String? = nil, show_explore_header: Bool? = nil, show_explore_title: Bool? = nil, show_explore_last_run: Bool? = nil, show_explore_timezone: Bool? = nil, show_explore_run_stop_button: Bool? = nil, show_explore_actions_button: Bool? = nil, show_look_header: Bool? = nil, show_look_title: Bool? = nil, show_look_last_run: Bool? = nil, show_look_timezone: Bool? = nil, show_look_run_stop_button: Bool? = nil, show_look_actions_button: Bool? = nil, tile_title_font_size: String? = nil, column_gap_size: String? = nil, row_gap_size: String? = nil, border_radius: String? = nil) { self._background_color = background_color.map(AnyString.init) + self._background_image_url = background_image_url.map(AnyString.init) + self._background_image_id = background_image_id.map(AnyString.init) + self.background_opacity = background_opacity self._base_font_size = base_font_size.map(AnyString.init) self._color_collection_id = color_collection_id.map(AnyString.init) self._font_color = font_color.map(AnyString.init) @@ -29861,7 +29508,7 @@ public struct UserAttribute: SDKModel { private var _type: AnyString /** - * Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + * Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") */ public var type: String { get { _type.value } @@ -30193,6 +29840,164 @@ public struct UserAttributeWithValue: SDKModel { } +public struct UserDbConnection: SDKModel { + + private enum CodingKeys : String, CodingKey { + case can + case _id = "id" + case _name = "name" + case _user_id = "user_id" + case _dialect = "dialect" + case _auth_type = "auth_type" + case _host = "host" + case _port = "port" + case _database = "database" + case _schema = "schema" + case _jdbc_additional_params = "jdbc_additional_params" + case _oauth_application_id = "oauth_application_id" + case enabled + case created_at + case updated_at + } + /** + * Operations the current user is able to perform on this object (read-only) + */ + public var can: StringDictionary? + + private var _id: AnyString? + /** + * ID of the connection (read-only) + */ + public var id: String? { + get { _id?.value } + set { _id = newValue.map(AnyString.init) } + } + + private var _name: AnyString? + /** + * Name of the connection (must match virtual namespace pattern) (read-only) + */ + public var name: String? { + get { _name?.value } + set { _name = newValue.map(AnyString.init) } + } + + private var _user_id: AnyInt? + /** + * ID of the user who owns the connection (read-only) + */ + public var user_id: Int64? { + get { _user_id?.value } + set { _user_id = newValue.map(AnyInt.init) } + } + + private var _dialect: AnyString? + /** + * Database dialect name (read-only) + */ + public var dialect: String? { + get { _dialect?.value } + set { _dialect = newValue.map(AnyString.init) } + } + + private var _auth_type: AnyString? + /** + * Authentication type (oauth, service_account, password) (read-only) + */ + public var auth_type: String? { + get { _auth_type?.value } + set { _auth_type = newValue.map(AnyString.init) } + } + + private var _host: AnyString? + /** + * Host name/address of server (read-only) + */ + public var host: String? { + get { _host?.value } + set { _host = newValue.map(AnyString.init) } + } + + private var _port: AnyString? + /** + * Port number on server (read-only) + */ + public var port: String? { + get { _port?.value } + set { _port = newValue.map(AnyString.init) } + } + + private var _database: AnyString? + /** + * Database name (read-only) + */ + public var database: String? { + get { _database?.value } + set { _database = newValue.map(AnyString.init) } + } + + private var _schema: AnyString? + /** + * Schema name (read-only) + */ + public var schema: String? { + get { _schema?.value } + set { _schema = newValue.map(AnyString.init) } + } + + private var _jdbc_additional_params: AnyString? + /** + * Additional JDBC parameters (read-only) + */ + public var jdbc_additional_params: String? { + get { _jdbc_additional_params?.value } + set { _jdbc_additional_params = newValue.map(AnyString.init) } + } + + private var _oauth_application_id: AnyInt? + /** + * OAuth application ID (if auth_type is oauth) (read-only) + */ + public var oauth_application_id: Int64? { + get { _oauth_application_id?.value } + set { _oauth_application_id = newValue.map(AnyInt.init) } + } + + /** + * Whether this connection is enabled + */ + public var enabled: Bool? + + /** + * When the connection was created (read-only) + */ + public var created_at: Date? + + /** + * When the connection was last updated (read-only) + */ + public var updated_at: Date? + + public init(can: StringDictionary? = nil, id: String? = nil, name: String? = nil, user_id: Int64? = nil, dialect: String? = nil, auth_type: String? = nil, host: String? = nil, port: String? = nil, database: String? = nil, schema: String? = nil, jdbc_additional_params: String? = nil, oauth_application_id: Int64? = nil, enabled: Bool? = nil, created_at: Date? = nil, updated_at: Date? = nil) { + self.can = can + self._id = id.map(AnyString.init) + self._name = name.map(AnyString.init) + self._user_id = user_id.map(AnyInt.init) + self._dialect = dialect.map(AnyString.init) + self._auth_type = auth_type.map(AnyString.init) + self._host = host.map(AnyString.init) + self._port = port.map(AnyString.init) + self._database = database.map(AnyString.init) + self._schema = schema.map(AnyString.init) + self._jdbc_additional_params = jdbc_additional_params.map(AnyString.init) + self._oauth_application_id = oauth_application_id.map(AnyInt.init) + self.enabled = enabled + self.created_at = created_at + self.updated_at = updated_at + } + +} + public struct UserEmailOnly: SDKModel { private enum CodingKeys : String, CodingKey { @@ -30831,7 +30636,7 @@ public struct Workspace: SDKModel { /** * Dynamic writeable type for Agent removes: - * 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 + * 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, is_lookml, lookml_agent_id, lookml_edit_uri */ public struct WriteAgent: SDKModel { @@ -31721,7 +31526,7 @@ public struct WriteConversation: SDKModel { /** * Dynamic writeable type for Agent removes: - * 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 + * 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, is_lookml, lookml_agent_id, lookml_edit_uri */ public var conversation_agent: WriteAgent? @@ -32092,6 +31897,7 @@ public struct WriteDashboard: SDKModel { case _tile_text_color = "tile_text_color" case _title_color = "title_color" case appearance + case _layout_granularity = "layout_granularity" case preserve_desktop_layout case download_settings } @@ -32294,6 +32100,15 @@ public struct WriteDashboard: SDKModel { public var appearance: DashboardAppearance? + private var _layout_granularity: AnyString? + /** + * The layout granularity to apply to this dashboard (ie: default or granular) + */ + public var layout_granularity: String? { + get { _layout_granularity?.value } + set { _layout_granularity = newValue.map(AnyString.init) } + } + /** * Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. */ @@ -32301,7 +32116,7 @@ public struct WriteDashboard: SDKModel { 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, 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) { + 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, layout_granularity: String? = 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) @@ -32330,6 +32145,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._layout_granularity = layout_granularity.map(AnyString.init) self.preserve_desktop_layout = preserve_desktop_layout self.download_settings = download_settings } @@ -32362,7 +32178,7 @@ public struct WriteDashboardBase: SDKModel { /** * Dynamic writeable type for DashboardElement removes: - * can, body_text_as_html, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html + * can, body_text_as_html, group_id, edit_uri, id, lookml_link_id, note_text_as_html, refresh_interval_to_i, alert_count, title_text_as_html, subtitle_text_as_html, images */ public struct WriteDashboardElement: SDKModel { @@ -32391,6 +32207,7 @@ public struct WriteDashboardElement: SDKModel { case _extension_id = "extension_id" case _aria_description = "aria_description" case certification_metadata + case _image_id = "image_id" } private var _body_text: AnyString? /** @@ -32592,7 +32409,16 @@ public struct WriteDashboardElement: SDKModel { */ public var certification_metadata: WriteCertification? - public init(body_text: String? = nil, dashboard_id: String? = nil, dashboard_layout_id: String? = nil, look: WriteLookWithQuery? = nil, look_id: String? = nil, merge_result_id: String? = nil, note_display: String? = nil, note_state: String? = nil, note_text: String? = nil, query: WriteQuery? = nil, query_id: String? = nil, filter_id: String? = nil, refresh_interval: String? = nil, result_maker: WriteResultMakerWithIdVisConfigAndDynamicFields? = nil, result_maker_id: String? = nil, subtitle_text: String? = nil, title: String? = nil, title_hidden: Bool? = nil, title_text: String? = nil, type: String? = nil, rich_content_json: String? = nil, extension_id: String? = nil, aria_description: String? = nil, certification_metadata: WriteCertification? = nil) { + private var _image_id: AnyString? + /** + * ID of Dashboard Image + */ + public var image_id: String? { + get { _image_id?.value } + set { _image_id = newValue.map(AnyString.init) } + } + + public init(body_text: String? = nil, dashboard_id: String? = nil, dashboard_layout_id: String? = nil, look: WriteLookWithQuery? = nil, look_id: String? = nil, merge_result_id: String? = nil, note_display: String? = nil, note_state: String? = nil, note_text: String? = nil, query: WriteQuery? = nil, query_id: String? = nil, filter_id: String? = nil, refresh_interval: String? = nil, result_maker: WriteResultMakerWithIdVisConfigAndDynamicFields? = nil, result_maker_id: String? = nil, subtitle_text: String? = nil, title: String? = nil, title_hidden: Bool? = nil, title_text: String? = nil, type: String? = nil, rich_content_json: String? = nil, extension_id: String? = nil, aria_description: String? = nil, certification_metadata: WriteCertification? = nil, image_id: String? = nil) { self._body_text = body_text.map(AnyString.init) self._dashboard_id = dashboard_id.map(AnyString.init) self._dashboard_layout_id = dashboard_layout_id.map(AnyString.init) @@ -32617,6 +32443,7 @@ public struct WriteDashboardElement: SDKModel { self._extension_id = extension_id.map(AnyString.init) self._aria_description = aria_description.map(AnyString.init) self.certification_metadata = certification_metadata + self._image_id = image_id.map(AnyString.init) } } @@ -32880,6 +32707,7 @@ public struct WriteDashboardLayoutComponent: SDKModel { case _granular_column = "granular_column" case _granular_width = "granular_width" case _granular_height = "granular_height" + case _group_id = "group_id" } private var _dashboard_layout_id: AnyString? /** @@ -32976,7 +32804,16 @@ public struct WriteDashboardLayoutComponent: SDKModel { set { _granular_height = newValue.map(AnyInt.init) } } - public init(dashboard_layout_id: String? = nil, dashboard_element_id: String? = nil, row: Int64? = nil, column: Int64? = nil, width: Int64? = nil, height: Int64? = nil, deleted: Bool? = nil, granular_row: Int64? = nil, granular_column: Int64? = nil, granular_width: Int64? = nil, granular_height: Int64? = nil) { + private var _group_id: AnyString? + /** + * Id of parent Dashboard Layout Component group + */ + public var group_id: String? { + get { _group_id?.value } + set { _group_id = newValue.map(AnyString.init) } + } + + public init(dashboard_layout_id: String? = nil, dashboard_element_id: String? = nil, row: Int64? = nil, column: Int64? = nil, width: Int64? = nil, height: Int64? = nil, deleted: Bool? = nil, granular_row: Int64? = nil, granular_column: Int64? = nil, granular_width: Int64? = nil, granular_height: Int64? = nil, group_id: String? = nil) { self._dashboard_layout_id = dashboard_layout_id.map(AnyString.init) self._dashboard_element_id = dashboard_element_id.map(AnyString.init) self._row = row.map(AnyInt.init) @@ -32988,6 +32825,7 @@ public struct WriteDashboardLayoutComponent: SDKModel { self._granular_column = granular_column.map(AnyInt.init) self._granular_width = granular_width.map(AnyInt.init) self._granular_height = granular_height.map(AnyInt.init) + self._group_id = group_id.map(AnyString.init) } } @@ -33070,13 +32908,16 @@ public struct WriteDBConnection: SDKModel { private enum CodingKeys : String, CodingKey { case _name = "name" + case _project_id = "project_id" case _named_driver_version_requested = "named_driver_version_requested" case _host = "host" case _port = "port" case _username = "username" case _password = "password" + case service_account_auth_enabled case uses_key_pair_auth case _certificate = "certificate" + case _user_attr_certificate = "user_attr_certificate" case _file_type = "file_type" case _database = "database" case _db_timezone = "db_timezone" @@ -33126,6 +32967,15 @@ public struct WriteDBConnection: SDKModel { set { _name = newValue.map(AnyString.init) } } + private var _project_id: AnyString? + /** + * ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. + */ + public var project_id: String? { + get { _project_id?.value } + set { _project_id = newValue.map(AnyString.init) } + } + private var _named_driver_version_requested: AnyString? /** * Requested JDBC driver version name @@ -33171,6 +33021,11 @@ public struct WriteDBConnection: SDKModel { set { _password = newValue.map(AnyString.init) } } + /** + * Whether Service Account OAuth authentication is enabled for this connection + */ + public var service_account_auth_enabled: Bool? + /** * Whether the connection uses key-pair for authentication. */ @@ -33185,6 +33040,15 @@ public struct WriteDBConnection: SDKModel { set { _certificate = newValue.map(AnyString.init) } } + private var _user_attr_certificate: AnyString? + /** + * The name of the user attribute containing the connection certificate. + */ + public var user_attr_certificate: String? { + get { _user_attr_certificate?.value } + set { _user_attr_certificate = newValue.map(AnyString.init) } + } + private var _file_type: AnyString? /** * (Write-Only) Certificate keyfile type - .json, .p8 or .p12 @@ -33477,15 +33341,18 @@ public struct WriteDBConnection: SDKModel { set { _service_name = newValue.map(AnyString.init) } } - public init(name: String? = nil, named_driver_version_requested: String? = nil, host: String? = nil, port: String? = nil, username: String? = nil, password: String? = nil, uses_key_pair_auth: Bool? = nil, certificate: String? = nil, file_type: String? = nil, database: String? = nil, db_timezone: String? = nil, query_timezone: String? = nil, schema: String? = nil, max_connections: Int64? = nil, max_queries: Int64? = nil, max_queries_per_user: Int64? = nil, max_billing_gigabytes: String? = nil, ssl: Bool? = nil, verify_ssl: Bool? = nil, tmp_db_name: String? = nil, tmp_db_host: String? = nil, jdbc_additional_params: String? = nil, pool_timeout: Int64? = nil, dialect_name: String? = nil, user_db_credentials: Bool? = nil, user_attribute_fields: [String]? = nil, maintenance_cron: String? = nil, sql_runner_precache_tables: Bool? = nil, sql_writing_with_info_schema: Bool? = nil, after_connect_statements: String? = nil, pdt_context_override: WriteDBConnectionOverride? = nil, custom_local_port: Int64? = nil, tunnel_id: String? = nil, uses_tns: Bool? = nil, pdt_concurrency: Int64? = nil, disable_context_comment: Bool? = nil, oauth_application_id: String? = nil, always_retry_failed_builds: Bool? = nil, uses_application_default_credentials: Bool? = nil, impersonated_service_account: String? = nil, cost_estimate_enabled: Bool? = nil, pdt_api_control_enabled: Bool? = nil, connection_pooling: Bool? = nil, bq_storage_project_id: String? = nil, bq_roles_verified: Bool? = nil, query_holding_disabled: Bool? = nil, service_name: String? = nil) { + public init(name: String? = nil, project_id: String? = nil, named_driver_version_requested: String? = nil, host: String? = nil, port: String? = nil, username: String? = nil, password: String? = nil, service_account_auth_enabled: Bool? = nil, uses_key_pair_auth: Bool? = nil, certificate: String? = nil, user_attr_certificate: String? = nil, file_type: String? = nil, database: String? = nil, db_timezone: String? = nil, query_timezone: String? = nil, schema: String? = nil, max_connections: Int64? = nil, max_queries: Int64? = nil, max_queries_per_user: Int64? = nil, max_billing_gigabytes: String? = nil, ssl: Bool? = nil, verify_ssl: Bool? = nil, tmp_db_name: String? = nil, tmp_db_host: String? = nil, jdbc_additional_params: String? = nil, pool_timeout: Int64? = nil, dialect_name: String? = nil, user_db_credentials: Bool? = nil, user_attribute_fields: [String]? = nil, maintenance_cron: String? = nil, sql_runner_precache_tables: Bool? = nil, sql_writing_with_info_schema: Bool? = nil, after_connect_statements: String? = nil, pdt_context_override: WriteDBConnectionOverride? = nil, custom_local_port: Int64? = nil, tunnel_id: String? = nil, uses_tns: Bool? = nil, pdt_concurrency: Int64? = nil, disable_context_comment: Bool? = nil, oauth_application_id: String? = nil, always_retry_failed_builds: Bool? = nil, uses_application_default_credentials: Bool? = nil, impersonated_service_account: String? = nil, cost_estimate_enabled: Bool? = nil, pdt_api_control_enabled: Bool? = nil, connection_pooling: Bool? = nil, bq_storage_project_id: String? = nil, bq_roles_verified: Bool? = nil, query_holding_disabled: Bool? = nil, service_name: String? = nil) { self._name = name.map(AnyString.init) + self._project_id = project_id.map(AnyString.init) self._named_driver_version_requested = named_driver_version_requested.map(AnyString.init) self._host = host.map(AnyString.init) self._port = port.map(AnyString.init) self._username = username.map(AnyString.init) self._password = password.map(AnyString.init) + self.service_account_auth_enabled = service_account_auth_enabled self.uses_key_pair_auth = uses_key_pair_auth self._certificate = certificate.map(AnyString.init) + self._user_attr_certificate = user_attr_certificate.map(AnyString.init) self._file_type = file_type.map(AnyString.init) self._database = database.map(AnyString.init) self._db_timezone = db_timezone.map(AnyString.init) @@ -33786,7 +33653,7 @@ public struct WriteDBConnectionOverride: SDKModel { /** * Dynamic writeable type for EmbedConfig removes: - * permissions, embed_enabled + * embed_vis_modernization_default, permissions, embed_enabled */ public struct WriteEmbedConfig: SDKModel { @@ -34077,40 +33944,15 @@ public struct WriteGitBranch: SDKModel { } -/** - * Dynamic writeable type for GitDiagnosticReport removes: - * can, id, project_id, user_id, state, status, created_at, updated_at, issues - */ -public struct WriteGitDiagnosticReport: SDKModel { - - private enum CodingKeys : String, CodingKey { - case _project_type = "project_type" - } - private var _project_type: AnyString? - /** - * Project structure type. - */ - public var project_type: String? { - get { _project_type?.value } - set { _project_type = newValue.map(AnyString.init) } - } - - public init(project_type: String? = nil) { - self._project_type = project_type.map(AnyString.init) - } - -} - /** * Dynamic writeable type for GoldenQuery removes: - * can, id, query_id, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at, explore, model, fields, filters, sorts, limit, client_id + * can, id, query_id, is_active, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at, explore, model, fields, filters, sorts, limit, client_id, pivots, dynamic_fields */ public struct WriteGoldenQuery: SDKModel { private enum CodingKeys : String, CodingKey { case _questions = "questions" case _answer = "answer" - case is_active } private var _questions: [AnyString]? /** @@ -34130,15 +33972,9 @@ public struct WriteGoldenQuery: SDKModel { 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) { + public init(questions: [String]? = nil, answer: String? = 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 } } @@ -34940,6 +34776,12 @@ public struct WriteMcpTools: SDKModel { */ public var get_explores: WriteMcpToolSetting? + /** + * Dynamic writeable type for McpToolSetting removes: + * description, category, access_level + */ + public var get_field_value_suggestions: WriteMcpToolSetting? + /** * Dynamic writeable type for McpToolSetting removes: * description, category, access_level @@ -35096,7 +34938,19 @@ public struct WriteMcpTools: SDKModel { */ public var create_view_from_table: 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) { + /** + * Dynamic writeable type for McpToolSetting removes: + * description, category, access_level + */ + public var render_visualization: WriteMcpToolSetting? + + /** + * Dynamic writeable type for McpToolSetting removes: + * description, category, access_level + */ + public var render_dashboard: 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_field_value_suggestions: 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, render_visualization: WriteMcpToolSetting? = nil, render_dashboard: WriteMcpToolSetting? = nil) { self.enable_all = enable_all self.add_dashboard_element = add_dashboard_element self.add_dashboard_filter = add_dashboard_filter @@ -35112,6 +34966,7 @@ public struct WriteMcpTools: SDKModel { self.get_dashboards = get_dashboards self.get_dimensions = get_dimensions self.get_explores = get_explores + self.get_field_value_suggestions = get_field_value_suggestions self.get_filters = get_filters self.get_looks = get_looks self.get_measures = get_measures @@ -35138,6 +34993,8 @@ 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.render_visualization = render_visualization + self.render_dashboard = render_dashboard } } @@ -35322,6 +35179,7 @@ public struct WriteOauthClientApp: SDKModel { private enum CodingKeys : String, CodingKey { case _redirect_uri = "redirect_uri" + case _redirect_uris = "redirect_uris" case _display_name = "display_name" case _description = "description" case enabled @@ -35329,13 +35187,22 @@ public struct WriteOauthClientApp: SDKModel { } private var _redirect_uri: AnyString? /** - * The uri with which this application will receive an auth code by browser redirect. + * (DEPRECATED) The uri with which this application will receive an auth code by browser redirect. (DEPRECATED: Use redirect_uris instead) */ public var redirect_uri: String? { get { _redirect_uri?.value } set { _redirect_uri = newValue.map(AnyString.init) } } + private var _redirect_uris: [AnyString]? + /** + * The authorized uris for which this application will receive an auth code by browser redirect. + */ + public var redirect_uris: [String]? { + get { if let v = _redirect_uris { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _redirect_uris = v.map { AnyString.init($0) } } else { _redirect_uris = nil } } + } + private var _display_name: AnyString? /** * The application's display name @@ -35368,8 +35235,9 @@ public struct WriteOauthClientApp: SDKModel { set { _group_id = newValue.map(AnyString.init) } } - public init(redirect_uri: String? = nil, display_name: String? = nil, description: String? = nil, enabled: Bool? = nil, group_id: String? = nil) { + public init(redirect_uri: String? = nil, redirect_uris: [String]? = nil, display_name: String? = nil, description: String? = nil, enabled: Bool? = nil, group_id: String? = nil) { self._redirect_uri = redirect_uri.map(AnyString.init) + if let v = redirect_uris { _redirect_uris = v.map { AnyString.init($0) } } else { _redirect_uris = nil } self._display_name = display_name.map(AnyString.init) self._description = description.map(AnyString.init) self.enabled = enabled @@ -36017,6 +35885,401 @@ public struct WriteProject: SDKModel { } +/** + * Dynamic writeable type for ProjectCISuite removes: + * can, id, project_id, created_at, updated_at, change_request_trigger_hook_id, guid, dbt_cloud_webhook_id, has_webhook_secret + */ +public struct WriteProjectCISuite: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _name = "name" + case schedule_trigger_is_enabled + case _schedule_trigger_crontab = "schedule_trigger_crontab" + case _schedule_trigger_timezone = "schedule_trigger_timezone" + case alerting_enabled + case _alert_email_addresses = "alert_email_addresses" + case alert_on_failed_status + case alert_on_error_status + case alert_on_passed_status + case alert_on_cancelled_status + case change_request_trigger_is_enabled + case _change_request_trigger_target_branch = "change_request_trigger_target_branch" + case dbt_cloud_trigger_is_enabled + case _dbt_cloud_trigger_job_id = "dbt_cloud_trigger_job_id" + case _dbt_cloud_trigger_user_attribute_id = "dbt_cloud_trigger_user_attribute_id" + case _webhook_secret = "webhook_secret" + case assert_validator_config_is_enabled + case _assert_validator_config_concurrency = "assert_validator_config_concurrency" + case _assert_validator_config_selectors = "assert_validator_config_selectors" + case _assert_validator_config_exclusions = "assert_validator_config_exclusions" + case content_validator_config_is_enabled + case content_validator_config_exclude_personal + case content_validator_config_incremental + case _content_validator_config_exclude_folders = "content_validator_config_exclude_folders" + case _content_validator_config_include_folders = "content_validator_config_include_folders" + case _content_validator_config_selectors = "content_validator_config_selectors" + case _content_validator_config_exclusions = "content_validator_config_exclusions" + case lookml_validator_config_is_enabled + case _lookml_validator_config_severity = "lookml_validator_config_severity" + case _lookml_validator_config_timeout = "lookml_validator_config_timeout" + case style_validator_config_is_enabled + case style_validator_config_incremental + case sql_validator_config_is_enabled + case sql_validator_config_fail_fast + case sql_validator_config_incremental + case sql_validator_config_ignore_hidden + case _sql_validator_config_query_concurrency = "sql_validator_config_query_concurrency" + case _sql_validator_config_chunk_size = "sql_validator_config_chunk_size" + case _sql_validator_config_selectors = "sql_validator_config_selectors" + case _sql_validator_config_exclusions = "sql_validator_config_exclusions" + case upstream_trigger_is_enabled + case _upstream_projects = "upstream_projects" + } + private var _name: AnyString? + /** + * Name of the CI suite + */ + public var name: String? { + get { _name?.value } + set { _name = newValue.map(AnyString.init) } + } + + /** + * Whether the CI suite schedule trigger is active + */ + public var schedule_trigger_is_enabled: Bool? + + private var _schedule_trigger_crontab: AnyString? + /** + * Crontab that the CI suite is scheduled to run + */ + public var schedule_trigger_crontab: String? { + get { _schedule_trigger_crontab?.value } + set { _schedule_trigger_crontab = newValue.map(AnyString.init) } + } + + private var _schedule_trigger_timezone: AnyString? + /** + * Timezone for the CI suite schedule + */ + public var schedule_trigger_timezone: String? { + get { _schedule_trigger_timezone?.value } + set { _schedule_trigger_timezone = newValue.map(AnyString.init) } + } + + /** + * Whether alerting is enabled for the CI suite + */ + public var alerting_enabled: Bool? + + private var _alert_email_addresses: [AnyString]? + /** + * Email addresses to send alerts to + */ + public var alert_email_addresses: [String]? { + get { if let v = _alert_email_addresses { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _alert_email_addresses = v.map { AnyString.init($0) } } else { _alert_email_addresses = nil } } + } + + /** + * Whether to alert on failed status + */ + public var alert_on_failed_status: Bool? + + /** + * Whether to alert on error status + */ + public var alert_on_error_status: Bool? + + /** + * Whether to alert on passed status + */ + public var alert_on_passed_status: Bool? + + /** + * Whether to alert on cancelled status + */ + public var alert_on_cancelled_status: Bool? + + /** + * Whether the CI suite change request trigger is active + */ + public var change_request_trigger_is_enabled: Bool? + + private var _change_request_trigger_target_branch: AnyString? + /** + * Git branch that should be compared against when the CI suite is run, used when the run is incremental + */ + public var change_request_trigger_target_branch: String? { + get { _change_request_trigger_target_branch?.value } + set { _change_request_trigger_target_branch = newValue.map(AnyString.init) } + } + + /** + * Whether the CI suite dbt Cloud trigger is active + */ + public var dbt_cloud_trigger_is_enabled: Bool? + + private var _dbt_cloud_trigger_job_id: AnyInt? + /** + * Job ID of the dbt Cloud job + */ + public var dbt_cloud_trigger_job_id: Int64? { + get { _dbt_cloud_trigger_job_id?.value } + set { _dbt_cloud_trigger_job_id = newValue.map(AnyInt.init) } + } + + private var _dbt_cloud_trigger_user_attribute_id: AnyString? + /** + * User Attribute ID used for schema substitution + */ + public var dbt_cloud_trigger_user_attribute_id: String? { + get { _dbt_cloud_trigger_user_attribute_id?.value } + set { _dbt_cloud_trigger_user_attribute_id = newValue.map(AnyString.init) } + } + + private var _webhook_secret: AnyString? + /** + * (Write-Only) Webhook secret used to authenticate incoming webhook requests + */ + public var webhook_secret: String? { + get { _webhook_secret?.value } + set { _webhook_secret = newValue.map(AnyString.init) } + } + + /** + * Whether assert validation is enabled for the CI suite + */ + public var assert_validator_config_is_enabled: Bool? + + private var _assert_validator_config_concurrency: AnyInt? + /** + * Number of tests that should run concurrently during assert validation + */ + public var assert_validator_config_concurrency: Int64? { + get { _assert_validator_config_concurrency?.value } + set { _assert_validator_config_concurrency = newValue.map(AnyInt.init) } + } + + private var _assert_validator_config_selectors: [AnyString]? + /** + * Explores that assert validation should run for (model_name/explore_name) + */ + public var assert_validator_config_selectors: [String]? { + get { if let v = _assert_validator_config_selectors { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _assert_validator_config_selectors = v.map { AnyString.init($0) } } else { _assert_validator_config_selectors = nil } } + } + + private var _assert_validator_config_exclusions: [AnyString]? + /** + * Explores that should be excluded from assert validation (model_name/explore_name) + */ + public var assert_validator_config_exclusions: [String]? { + get { if let v = _assert_validator_config_exclusions { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _assert_validator_config_exclusions = v.map { AnyString.init($0) } } else { _assert_validator_config_exclusions = nil } } + } + + /** + * Whether content validation is enabled for the CI suite + */ + public var content_validator_config_is_enabled: Bool? + + /** + * Whether content validation should ignore personal folders + */ + public var content_validator_config_exclude_personal: Bool? + + /** + * Whether content should validate incrementally + */ + public var content_validator_config_incremental: Bool? + + private var _content_validator_config_exclude_folders: [AnyString]? + /** + * Folders whose content should not be validated + */ + public var content_validator_config_exclude_folders: [String]? { + get { if let v = _content_validator_config_exclude_folders { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _content_validator_config_exclude_folders = v.map { AnyString.init($0) } } else { _content_validator_config_exclude_folders = nil } } + } + + private var _content_validator_config_include_folders: [AnyString]? + /** + * Folders whose content should be validated + */ + public var content_validator_config_include_folders: [String]? { + get { if let v = _content_validator_config_include_folders { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _content_validator_config_include_folders = v.map { AnyString.init($0) } } else { _content_validator_config_include_folders = nil } } + } + + private var _content_validator_config_selectors: [AnyString]? + /** + * Explores whose content should be validated (model_name/explore_name) + */ + public var content_validator_config_selectors: [String]? { + get { if let v = _content_validator_config_selectors { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _content_validator_config_selectors = v.map { AnyString.init($0) } } else { _content_validator_config_selectors = nil } } + } + + private var _content_validator_config_exclusions: [AnyString]? + /** + * Explores that should be excluded from content validation (model_name/explore_name) + */ + public var content_validator_config_exclusions: [String]? { + get { if let v = _content_validator_config_exclusions { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _content_validator_config_exclusions = v.map { AnyString.init($0) } } else { _content_validator_config_exclusions = nil } } + } + + /** + * Whether LookML validation is enabled for the CI suite + */ + public var lookml_validator_config_is_enabled: Bool? + + private var _lookml_validator_config_severity: AnyString? + /** + * Severity of the error that the LookML validator should report (warning, error, fatal, info, success) + */ + public var lookml_validator_config_severity: String? { + get { _lookml_validator_config_severity?.value } + set { _lookml_validator_config_severity = newValue.map(AnyString.init) } + } + + private var _lookml_validator_config_timeout: AnyInt? + /** + * Amount of time after which LookML Validation should stop running + */ + public var lookml_validator_config_timeout: Int64? { + get { _lookml_validator_config_timeout?.value } + set { _lookml_validator_config_timeout = newValue.map(AnyInt.init) } + } + + /** + * Whether LookML Style Validator is enabled for the CI suite + */ + public var style_validator_config_is_enabled: Bool? + + /** + * Whether LookML Style Validator should run incrementally on changed LookML files only + */ + public var style_validator_config_incremental: Bool? + + /** + * Whether SQL validation is enabled for the CI suite + */ + public var sql_validator_config_is_enabled: Bool? + + /** + * Whether SQL validation should stop after the first failure + */ + public var sql_validator_config_fail_fast: Bool? + + /** + * Whether SQL should validate incrementally + */ + public var sql_validator_config_incremental: Bool? + + /** + * Whether SQL validation should ignore hidden fields + */ + public var sql_validator_config_ignore_hidden: Bool? + + private var _sql_validator_config_query_concurrency: AnyInt? + /** + * Number of queries that should run concurrently during SQL validation + */ + public var sql_validator_config_query_concurrency: Int64? { + get { _sql_validator_config_query_concurrency?.value } + set { _sql_validator_config_query_concurrency = newValue.map(AnyInt.init) } + } + + private var _sql_validator_config_chunk_size: AnyInt? + /** + * The max number of rows that should be returned for each query + */ + public var sql_validator_config_chunk_size: Int64? { + get { _sql_validator_config_chunk_size?.value } + set { _sql_validator_config_chunk_size = newValue.map(AnyInt.init) } + } + + private var _sql_validator_config_selectors: [AnyString]? + /** + * Explores whose sql should be validated (model_name/explore_name) + */ + public var sql_validator_config_selectors: [String]? { + get { if let v = _sql_validator_config_selectors { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _sql_validator_config_selectors = v.map { AnyString.init($0) } } else { _sql_validator_config_selectors = nil } } + } + + private var _sql_validator_config_exclusions: [AnyString]? + /** + * Explores that should be excluded from SQL validation (model_name/explore_name) + */ + public var sql_validator_config_exclusions: [String]? { + get { if let v = _sql_validator_config_exclusions { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _sql_validator_config_exclusions = v.map { AnyString.init($0) } } else { _sql_validator_config_exclusions = nil } } + } + + /** + * Whether the CI suite upstream project imports trigger is active + */ + public var upstream_trigger_is_enabled: Bool? + + private var _upstream_projects: [AnyString]? + /** + * Names of upstream projects subscribed for pull request triggers + */ + public var upstream_projects: [String]? { + get { if let v = _upstream_projects { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _upstream_projects = v.map { AnyString.init($0) } } else { _upstream_projects = nil } } + } + + public init(name: String? = nil, schedule_trigger_is_enabled: Bool? = nil, schedule_trigger_crontab: String? = nil, schedule_trigger_timezone: String? = nil, alerting_enabled: Bool? = nil, alert_email_addresses: [String]? = nil, alert_on_failed_status: Bool? = nil, alert_on_error_status: Bool? = nil, alert_on_passed_status: Bool? = nil, alert_on_cancelled_status: Bool? = nil, change_request_trigger_is_enabled: Bool? = nil, change_request_trigger_target_branch: String? = nil, dbt_cloud_trigger_is_enabled: Bool? = nil, dbt_cloud_trigger_job_id: Int64? = nil, dbt_cloud_trigger_user_attribute_id: String? = nil, webhook_secret: String? = nil, assert_validator_config_is_enabled: Bool? = nil, assert_validator_config_concurrency: Int64? = nil, assert_validator_config_selectors: [String]? = nil, assert_validator_config_exclusions: [String]? = nil, content_validator_config_is_enabled: Bool? = nil, content_validator_config_exclude_personal: Bool? = nil, content_validator_config_incremental: Bool? = nil, content_validator_config_exclude_folders: [String]? = nil, content_validator_config_include_folders: [String]? = nil, content_validator_config_selectors: [String]? = nil, content_validator_config_exclusions: [String]? = nil, lookml_validator_config_is_enabled: Bool? = nil, lookml_validator_config_severity: String? = nil, lookml_validator_config_timeout: Int64? = nil, style_validator_config_is_enabled: Bool? = nil, style_validator_config_incremental: Bool? = nil, sql_validator_config_is_enabled: Bool? = nil, sql_validator_config_fail_fast: Bool? = nil, sql_validator_config_incremental: Bool? = nil, sql_validator_config_ignore_hidden: Bool? = nil, sql_validator_config_query_concurrency: Int64? = nil, sql_validator_config_chunk_size: Int64? = nil, sql_validator_config_selectors: [String]? = nil, sql_validator_config_exclusions: [String]? = nil, upstream_trigger_is_enabled: Bool? = nil, upstream_projects: [String]? = nil) { + self._name = name.map(AnyString.init) + self.schedule_trigger_is_enabled = schedule_trigger_is_enabled + self._schedule_trigger_crontab = schedule_trigger_crontab.map(AnyString.init) + self._schedule_trigger_timezone = schedule_trigger_timezone.map(AnyString.init) + self.alerting_enabled = alerting_enabled + if let v = alert_email_addresses { _alert_email_addresses = v.map { AnyString.init($0) } } else { _alert_email_addresses = nil } + self.alert_on_failed_status = alert_on_failed_status + self.alert_on_error_status = alert_on_error_status + self.alert_on_passed_status = alert_on_passed_status + self.alert_on_cancelled_status = alert_on_cancelled_status + self.change_request_trigger_is_enabled = change_request_trigger_is_enabled + self._change_request_trigger_target_branch = change_request_trigger_target_branch.map(AnyString.init) + self.dbt_cloud_trigger_is_enabled = dbt_cloud_trigger_is_enabled + self._dbt_cloud_trigger_job_id = dbt_cloud_trigger_job_id.map(AnyInt.init) + self._dbt_cloud_trigger_user_attribute_id = dbt_cloud_trigger_user_attribute_id.map(AnyString.init) + self._webhook_secret = webhook_secret.map(AnyString.init) + self.assert_validator_config_is_enabled = assert_validator_config_is_enabled + self._assert_validator_config_concurrency = assert_validator_config_concurrency.map(AnyInt.init) + if let v = assert_validator_config_selectors { _assert_validator_config_selectors = v.map { AnyString.init($0) } } else { _assert_validator_config_selectors = nil } + if let v = assert_validator_config_exclusions { _assert_validator_config_exclusions = v.map { AnyString.init($0) } } else { _assert_validator_config_exclusions = nil } + self.content_validator_config_is_enabled = content_validator_config_is_enabled + self.content_validator_config_exclude_personal = content_validator_config_exclude_personal + self.content_validator_config_incremental = content_validator_config_incremental + if let v = content_validator_config_exclude_folders { _content_validator_config_exclude_folders = v.map { AnyString.init($0) } } else { _content_validator_config_exclude_folders = nil } + if let v = content_validator_config_include_folders { _content_validator_config_include_folders = v.map { AnyString.init($0) } } else { _content_validator_config_include_folders = nil } + if let v = content_validator_config_selectors { _content_validator_config_selectors = v.map { AnyString.init($0) } } else { _content_validator_config_selectors = nil } + if let v = content_validator_config_exclusions { _content_validator_config_exclusions = v.map { AnyString.init($0) } } else { _content_validator_config_exclusions = nil } + self.lookml_validator_config_is_enabled = lookml_validator_config_is_enabled + self._lookml_validator_config_severity = lookml_validator_config_severity.map(AnyString.init) + self._lookml_validator_config_timeout = lookml_validator_config_timeout.map(AnyInt.init) + self.style_validator_config_is_enabled = style_validator_config_is_enabled + self.style_validator_config_incremental = style_validator_config_incremental + self.sql_validator_config_is_enabled = sql_validator_config_is_enabled + self.sql_validator_config_fail_fast = sql_validator_config_fail_fast + self.sql_validator_config_incremental = sql_validator_config_incremental + self.sql_validator_config_ignore_hidden = sql_validator_config_ignore_hidden + self._sql_validator_config_query_concurrency = sql_validator_config_query_concurrency.map(AnyInt.init) + self._sql_validator_config_chunk_size = sql_validator_config_chunk_size.map(AnyInt.init) + if let v = sql_validator_config_selectors { _sql_validator_config_selectors = v.map { AnyString.init($0) } } else { _sql_validator_config_selectors = nil } + if let v = sql_validator_config_exclusions { _sql_validator_config_exclusions = v.map { AnyString.init($0) } } else { _sql_validator_config_exclusions = nil } + self.upstream_trigger_is_enabled = upstream_trigger_is_enabled + if let v = upstream_projects { _upstream_projects = v.map { AnyString.init($0) } } else { _upstream_projects = nil } + } + +} + /** * Dynamic writeable type for Query removes: * can, id, slug, share_url, expanded_share_url, url, has_table_calculations @@ -36671,7 +36934,7 @@ public struct WriteSamlConfig: SDKModel { /** * Dynamic writeable type for ScheduledPlan removes: - * id, created_at, updated_at, title, user, next_run_at, last_run_at, can + * id, created_at, updated_at, title, content_title, user, next_run_at, last_run_at, last_run_status, can */ public struct WriteScheduledPlan: SDKModel { @@ -36706,6 +36969,7 @@ public struct WriteScheduledPlan: SDKModel { case _color_theme = "color_theme" case long_tables case pdf_page_breaks + case include_filters case _tab_ids = "tab_ids" case _inline_table_width = "inline_table_width" case _query_id = "query_id" @@ -36920,6 +37184,11 @@ public struct WriteScheduledPlan: SDKModel { */ public var pdf_page_breaks: Bool? + /** + * Whether or not to include filters context + */ + public var include_filters: Bool? + private var _tab_ids: [AnyString]? /** * IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) @@ -36947,7 +37216,7 @@ public struct WriteScheduledPlan: SDKModel { set { _query_id = newValue.map(AnyString.init) } } - public init(name: String? = nil, user_id: String? = nil, run_as_recipient: Bool? = nil, enabled: Bool? = nil, look_id: String? = nil, dashboard_id: String? = nil, lookml_dashboard_id: String? = nil, filters_string: String? = nil, dashboard_filters: String? = nil, require_results: Bool? = nil, require_no_results: Bool? = nil, require_change: Bool? = nil, send_all_results: Bool? = nil, crontab: String? = nil, datagroup: String? = nil, timezone: String? = nil, scheduled_plan_destination: [ScheduledPlanDestination]? = nil, run_once: Bool? = nil, include_links: Bool? = nil, include_dashboard_summary: Bool? = nil, custom_url_base: String? = nil, custom_url_params: String? = nil, custom_url_label: String? = nil, show_custom_url: Bool? = nil, pdf_paper_size: String? = nil, pdf_landscape: Bool? = nil, embed: Bool? = nil, color_theme: String? = nil, long_tables: Bool? = nil, pdf_page_breaks: Bool? = nil, tab_ids: [String]? = nil, inline_table_width: Int64? = nil, query_id: String? = nil) { + public init(name: String? = nil, user_id: String? = nil, run_as_recipient: Bool? = nil, enabled: Bool? = nil, look_id: String? = nil, dashboard_id: String? = nil, lookml_dashboard_id: String? = nil, filters_string: String? = nil, dashboard_filters: String? = nil, require_results: Bool? = nil, require_no_results: Bool? = nil, require_change: Bool? = nil, send_all_results: Bool? = nil, crontab: String? = nil, datagroup: String? = nil, timezone: String? = nil, scheduled_plan_destination: [ScheduledPlanDestination]? = nil, run_once: Bool? = nil, include_links: Bool? = nil, include_dashboard_summary: Bool? = nil, custom_url_base: String? = nil, custom_url_params: String? = nil, custom_url_label: String? = nil, show_custom_url: Bool? = nil, pdf_paper_size: String? = nil, pdf_landscape: Bool? = nil, embed: Bool? = nil, color_theme: String? = nil, long_tables: Bool? = nil, pdf_page_breaks: Bool? = nil, include_filters: Bool? = nil, tab_ids: [String]? = nil, inline_table_width: Int64? = nil, query_id: String? = nil) { self._name = name.map(AnyString.init) self._user_id = user_id.map(AnyString.init) self.run_as_recipient = run_as_recipient @@ -36978,6 +37247,7 @@ public struct WriteScheduledPlan: SDKModel { self._color_theme = color_theme.map(AnyString.init) self.long_tables = long_tables self.pdf_page_breaks = pdf_page_breaks + self.include_filters = include_filters if let v = tab_ids { _tab_ids = v.map { AnyString.init($0) } } else { _tab_ids = nil } self._inline_table_width = inline_table_width.map(AnyInt.init) self._query_id = query_id.map(AnyString.init) @@ -37091,6 +37361,7 @@ public struct WriteSetting: SDKModel { case override_warnings case _email_domain_allowlist = "email_domain_allowlist" case embed_cookieless_v2 + case embed_vis_modernization_default case embed_config case dashboard_auto_refresh_restriction case _dashboard_auto_refresh_minimum_interval = "dashboard_auto_refresh_minimum_interval" @@ -37190,9 +37461,14 @@ public struct WriteSetting: SDKModel { */ public var embed_cookieless_v2: Bool? + /** + * Default net new visualizations in embedded context to Modern theme + */ + public var embed_vis_modernization_default: Bool? + /** * Dynamic writeable type for EmbedConfig removes: - * permissions, embed_enabled + * embed_vis_modernization_default, permissions, embed_enabled */ public var embed_config: WriteEmbedConfig? @@ -37258,7 +37534,7 @@ public struct WriteSetting: SDKModel { */ public var mcp_tools: WriteMcpTools? - public init(extension_framework_enabled: Bool? = nil, extension_load_url_enabled: Bool? = nil, marketplace_auto_install_enabled: Bool? = nil, marketplace_automation: MarketplaceAutomation? = nil, marketplace_enabled: Bool? = nil, marketplace_terms_accepted: Bool? = nil, privatelabel_configuration: WritePrivatelabelConfiguration? = nil, custom_welcome_email: CustomWelcomeEmail? = nil, onboarding_enabled: Bool? = nil, timezone: String? = nil, allow_user_timezones: Bool? = nil, data_connector_default_enabled: Bool? = nil, host_url: String? = nil, override_warnings: Bool? = nil, email_domain_allowlist: [String]? = nil, embed_cookieless_v2: Bool? = nil, embed_config: WriteEmbedConfig? = nil, dashboard_auto_refresh_restriction: Bool? = nil, dashboard_auto_refresh_minimum_interval: String? = nil, managed_certificate_uri: [String]? = nil, content_certification_documentation_link: String? = nil, revoke_certification_on_edits: Bool? = nil, automated_mfa_enabled: Bool? = nil, is_content_certification_enabled: Bool? = nil, auto_certify_lookml_content: Bool? = nil, ca_agent_observability: Bool? = nil, mcp_tools: WriteMcpTools? = nil) { + public init(extension_framework_enabled: Bool? = nil, extension_load_url_enabled: Bool? = nil, marketplace_auto_install_enabled: Bool? = nil, marketplace_automation: MarketplaceAutomation? = nil, marketplace_enabled: Bool? = nil, marketplace_terms_accepted: Bool? = nil, privatelabel_configuration: WritePrivatelabelConfiguration? = nil, custom_welcome_email: CustomWelcomeEmail? = nil, onboarding_enabled: Bool? = nil, timezone: String? = nil, allow_user_timezones: Bool? = nil, data_connector_default_enabled: Bool? = nil, host_url: String? = nil, override_warnings: Bool? = nil, email_domain_allowlist: [String]? = nil, embed_cookieless_v2: Bool? = nil, embed_vis_modernization_default: Bool? = nil, embed_config: WriteEmbedConfig? = nil, dashboard_auto_refresh_restriction: Bool? = nil, dashboard_auto_refresh_minimum_interval: String? = nil, managed_certificate_uri: [String]? = nil, content_certification_documentation_link: String? = nil, revoke_certification_on_edits: Bool? = nil, automated_mfa_enabled: Bool? = nil, is_content_certification_enabled: Bool? = nil, auto_certify_lookml_content: Bool? = nil, ca_agent_observability: Bool? = nil, mcp_tools: WriteMcpTools? = nil) { self.extension_framework_enabled = extension_framework_enabled self.extension_load_url_enabled = extension_load_url_enabled self.marketplace_auto_install_enabled = marketplace_auto_install_enabled @@ -37275,6 +37551,7 @@ public struct WriteSetting: SDKModel { self.override_warnings = override_warnings if let v = email_domain_allowlist { _email_domain_allowlist = v.map { AnyString.init($0) } } else { _email_domain_allowlist = nil } self.embed_cookieless_v2 = embed_cookieless_v2 + self.embed_vis_modernization_default = embed_vis_modernization_default self.embed_config = embed_config self.dashboard_auto_refresh_restriction = dashboard_auto_refresh_restriction self._dashboard_auto_refresh_minimum_interval = dashboard_auto_refresh_minimum_interval.map(AnyString.init) @@ -37612,7 +37889,7 @@ public struct WriteUserAttribute: SDKModel { private var _type: AnyString /** - * Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number") + * Type of user attribute ("string", "number", "datetime", "yesno", "zipcode", "advanced_filter_string", "advanced_filter_number", "file") */ public var type: String { get { _type.value } @@ -37709,6 +37986,22 @@ public struct WriteUserAttributeWithValue: SDKModel { } +/** + * Dynamic writeable type for UserDbConnection removes: + * can, id, name, user_id, dialect, auth_type, host, port, database, schema, jdbc_additional_params, oauth_application_id, created_at, updated_at + */ +public struct WriteUserDbConnection: SDKModel { + /** + * Whether this connection is enabled + */ + public var enabled: Bool? + + public init(enabled: Bool? = nil) { + self.enabled = enabled + } + +} + /** * Dynamic writeable type for WhitelabelConfiguration removes: * id, logo_url, favicon_url diff --git a/swift/looker/sdk/streams.swift b/swift/looker/sdk/streams.swift index 6b10e7313..a3e715f2c 100644 --- a/swift/looker/sdk/streams.swift +++ b/swift/looker/sdk/streams.swift @@ -25,7 +25,7 @@ */ /** - * 518 API methods + * 529 API methods */ @@ -2871,6 +2871,7 @@ open class LookerSDKStream: APIMethods { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -2918,6 +2919,7 @@ open class LookerSDKStream: APIMethods { * - host_url * - email_domain_allowlist * - embed_cookieless_v2 + * - embed_vis_modernization_default * - embed_enabled * - embed_config * - mcp_tools @@ -3589,6 +3591,67 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Get All User DB Connections + * + * Returns a list of user DB connections. + * + * GET /user_db_connections -> [UserDbConnection] + */ + public func all_user_db_connections( + /** + * @param {String} fields Requested fields. + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.get("/user_db_connections", + ["fields": fields], nil, options) + return result + } + + /** + * ### Update User DB Connection + * + * Updates an existing user DB connection (only enabling/disabling is allowed via the write limits in UserDbConnectionMapper). + * + * PATCH /user_db_connections/{user_db_connection_id} -> UserDbConnection + */ + public func update_user_db_connection( + /** + * @param {String} user_db_connection_id Id of user DB connection + */ + _ user_db_connection_id: String, + /** + * @param {WriteUserDbConnection} body + */ + _ body: WriteUserDbConnection, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_db_connection_id = encodeParam(user_db_connection_id) + let result: SDKResponse = self.patch("/user_db_connections/\(path_user_db_connection_id)", nil, try! self.encode(body), options) + return result + } + + /** + * ### Delete User DB Connection + * + * Deletes an existing user DB connection. + * + * DELETE /user_db_connections/{user_db_connection_id} -> Voidable + */ + public func delete_user_db_connection( + /** + * @param {String} user_db_connection_id Id of user DB connection + */ + _ user_db_connection_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_db_connection_id = encodeParam(user_db_connection_id) + let result: SDKResponse = self.delete("/user_db_connections/\(path_user_db_connection_id)", nil, nil, options) + return result + } + // MARK Content: Manage Content @@ -4341,6 +4404,25 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Get LookML of a UDD Agent + * + * Returns the LookML representation of a user-defined (UDD) agent. + * + * GET /agents/lookml/{agent_id} -> AgentLookml + */ + public func agent_lookml( + /** + * @param {String} agent_id Id of agent + */ + _ agent_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_agent_id = encodeParam(agent_id) + let result: SDKResponse = self.get("/agents/lookml/\(path_agent_id)", nil, nil, options) + return result + } + /** * ### Get All Conversation Messages * @@ -4487,6 +4569,39 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Get Agent Responses for User Message + * + * Get all agent response messages generated for a specific user prompt. + * + * An agent response often consists of multiple message blocks (such as text explanations, + * visualizations, and follow-up suggestions). This endpoint returns all response messages + * following the specified user message up to the next user prompt. + * + * GET /conversations/{conversation_id}/messages/{user_message_id}/responses -> [ConversationMessage] + */ + public func get_conversation_message_responses( + /** + * @param {String} conversation_id Conversation ID + */ + _ conversation_id: String, + /** + * @param {String} user_message_id User Conversation Message ID + */ + _ user_message_id: String, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_conversation_id = encodeParam(conversation_id) + let path_user_message_id = encodeParam(user_message_id) + let result: SDKResponse = self.get("/conversations/\(path_conversation_id)/messages/\(path_user_message_id)/responses", + ["fields": fields], nil, options) + return result + } + /** * ### Search Conversations * @@ -5060,6 +5175,32 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Get Dashboard Image + * + * Returns the image content for a dashboard element. + * + * GET /dashboards/{dashboard_id}/images/{image_slug} -> binary + * + * **Note**: Binary content may be returned by this method. + */ + public func get_dashboard_image( + /** + * @param {String} dashboard_id Id of dashboard + */ + _ dashboard_id: String, + /** + * @param {String} image_slug Slug of image + */ + _ image_slug: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_dashboard_id = encodeParam(dashboard_id) + let path_image_slug = encodeParam(image_slug) + let result: SDKResponse = self.get("/dashboards/\(path_dashboard_id)/images/\(path_image_slug)", nil, nil, options) + return result + } + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -5107,6 +5248,8 @@ open class LookerSDKStream: APIMethods { * Boolean search params accept only "true" and "false" as values. * * + * **Note:** When searching and sorting by `title`, the search uses the `dashboard_name` defined in the LookML code, rather than the user-facing display title. + * * The parameters `limit`, and `offset` are recommended for fetching results in page-size chunks. * * Get a **single LookML dashboard** by id with [dashboard_lookml()](#!/Dashboard/dashboard_lookml) @@ -5119,7 +5262,7 @@ open class LookerSDKStream: APIMethods { */ folder_id: String? = nil, /** - * @param {String} title Match LookML Dashboard title. + * @param {String} title Match LookML Dashboard title. Note: This matches on the dashboard_name defined in the LookML code, not the display title. */ title: String? = nil, /** @@ -5139,7 +5282,7 @@ open class LookerSDKStream: APIMethods { */ offset: Int64? = nil, /** - * @param {String} sorts One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status] + * @param {String} sorts One or more fields to sort by. Sortable fields: [:title, :id, :folder_id, :content_favorite_id, :content_metadata_id, :certification_status]. Note: Sorting by title sorts by the dashboard_name defined in the LookML code, not the display title. */ sorts: String? = nil, options: ITransportSettings? = nil @@ -5187,11 +5330,15 @@ open class LookerSDKStream: APIMethods { * @param {String} folder_id Folder id to move to. */ _ folder_id: String, + /** + * @param {String} project_name LookML project name, used to disambiguate dashboards with the same model and dashboard name across projects. + */ + project_name: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { let path_dashboard_id = encodeParam(dashboard_id) let result: SDKResponse = self.patch("/dashboards/\(path_dashboard_id)/move", - ["folder_id": folder_id], nil, options) + ["folder_id": folder_id, "project_name": project_name], nil, options) return result } @@ -7516,6 +7663,8 @@ open class LookerSDKStream: APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /looks/{look_id}/run/{result_format} -> String * * **Note**: Binary content may be returned by this method. @@ -8120,52 +8269,162 @@ open class LookerSDKStream: APIMethods { // MARK Project: Manage Projects /** - * ### Fetches a CI Run. + * ### Search Continuous Integration Runs for a project. * - * This endpoint is deprecated. [Get Continuous Integration Run](#!/Project/get_continuous_integration_run) should be used instead. + * Returns an array of Continuous Integration Run objects that match the specified search criteria. * - * GET /projects/{project_id}/ci/runs/{run_id} -> ProjectRun + * GET /projects/{project_id}/continuous_integration/runs/search -> [CIRun] */ - @available(*, deprecated) - public func get_ci_run( + public func search_continuous_integration_runs( /** * @param {String} project_id Project Id */ _ project_id: String, /** - * @param {String} run_id Run Id + * @param {String} fields Requested fields */ - _ run_id: String, + fields: String? = nil, + /** + * @param {String} suite_id Filter by suite id. Can be a comma-separated list of ids. + */ + suite_id: String? = nil, + /** + * @param {String} status Filter by status. Can be a comma-separated list of statuses. + */ + status: String? = nil, + /** + * @param {String} user_id Filter by user id. Can be a comma-separated list of ids. + */ + user_id: String? = nil, + /** + * @param {String} trigger_type Filter by trigger type. Can be a comma-separated list of types. + */ + trigger_type: String? = nil, + /** + * @param {Int64} limit Number of results to return (min 1, max 100, default 50, used with offset) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Number of results to skip before returning. (used with limit) + */ + offset: Int64? = nil, + /** + * @param {String} sorts One or more fields to sort by. Sortable fields: suite_id, status, user_id, trigger_type, created_at + */ + sorts: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.get("/projects/\(path_project_id)/continuous_integration/runs/search", + ["fields": fields, "suite_id": suite_id, "status": status, "user_id": user_id, "trigger_type": trigger_type, "limit": limit, "offset": offset, "sorts": sorts], nil, options) + return result + } + + /** + * ### Fetches Multiple CI Suite Configurations for Project. + * + * GET /projects/{project_id}/continuous_integration/suites -> [ProjectCISuite] + */ + public func get_continuous_integration_suites( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, /** * @param {String} fields Requested fields */ fields: String? = nil, + /** + * @param {Int64} limit Number of suites to return (min 1, max 100, default 50) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Row offset at which to fetch suites + */ + offset: Int64? = nil, + /** + * @param {Date} created_at Time at which to fetch suites + */ + created_at: Date? = nil, options: ITransportSettings? = nil ) -> SDKResponse { let path_project_id = encodeParam(project_id) - let path_run_id = encodeParam(run_id) - let result: SDKResponse = self.get("/projects/\(path_project_id)/ci/runs/\(path_run_id)", - ["fields": fields], nil, options) + let result: SDKResponse = self.get("/projects/\(path_project_id)/continuous_integration/suites", + ["fields": fields, "limit": limit, "offset": offset, "created_at": created_at as Any?], nil, options) + return result + } + + /** + * ### Fetches a CI Suite Configuration. + * + * POST /projects/{project_id}/continuous_integration/suites -> ProjectCISuite + */ + public func create_continuous_integration_suite( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {WriteProjectCISuite} body + */ + _ body: WriteProjectCISuite, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/continuous_integration/suites", + ["fields": fields], try! self.encode(body), options) return result } /** - * ### Creates a CI Run. + * ### Fetches a CI Suite Configuration. * - * This endpoint is deprecated. [Create Continuous Integration Run](#!/Project/create_continuous_integration_run) should be used instead. + * GET /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite + */ + public func get_continuous_integration_suite( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {String} suite_id Suite Id + */ + _ suite_id: String, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_suite_id = encodeParam(suite_id) + let result: SDKResponse = self.get("/projects/\(path_project_id)/continuous_integration/suites/\(path_suite_id)", + ["fields": fields], nil, options) + return result + } + + /** + * ### Updates a Continuous Integration Suite. * - * POST /projects/{project_id}/ci/run -> CreateCIRunResponse + * PATCH /projects/{project_id}/continuous_integration/suites/{suite_id} -> ProjectCISuite */ - @available(*, deprecated) - public func create_ci_run( + public func update_continuous_integration_suite( /** * @param {String} project_id Project Id */ _ project_id: String, /** - * @param {CreateCIRunRequest} body + * @param {String} suite_id Suite Id + */ + _ suite_id: String, + /** + * @param {WriteProjectCISuite} body */ - _ body: CreateCIRunRequest, + _ body: WriteProjectCISuite, /** * @param {String} fields Requested fields */ @@ -8173,11 +8432,39 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_project_id = encodeParam(project_id) - let result: SDKResponse = self.post("/projects/\(path_project_id)/ci/run", + let path_suite_id = encodeParam(suite_id) + let result: SDKResponse = self.patch("/projects/\(path_project_id)/continuous_integration/suites/\(path_suite_id)", ["fields": fields], try! self.encode(body), options) return result } + /** + * ### Deletes a Continuous Integration Suite. + * + * DELETE /projects/{project_id}/continuous_integration/suites/{suite_id} -> String + */ + public func delete_continuous_integration_suite( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {String} suite_id Suite Id + */ + _ suite_id: String, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_suite_id = encodeParam(suite_id) + let result: SDKResponse = self.delete("/projects/\(path_project_id)/continuous_integration/suites/\(path_suite_id)", + ["fields": fields], nil, options) + return result + } + /** * ### Creates and queues a Continuous Integration Run. * @@ -8204,6 +8491,33 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Duplicates and queues a Continuous Integration Run. + * + * POST /projects/{project_id}/continuous_integration/runs/{run_id}/duplicate -> CIRun + */ + public func duplicate_continuous_integration_run( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {String} run_id Run ID to duplicate and re-run + */ + _ run_id: String, + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_run_id = encodeParam(run_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/continuous_integration/runs/\(path_run_id)/duplicate", + ["fields": fields], nil, options) + return result + } + /** * ### Gets a Continuous Integration run. * @@ -8231,6 +8545,28 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Cancels a Continuous Integration Run. + * + * DELETE /projects/{project_id}/continuous_integration/runs/{run_id} -> String + */ + public func cancel_continuous_integration_run( + /** + * @param {String} project_id Project Id + */ + _ project_id: String, + /** + * @param {String} run_id Run Id + */ + _ run_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_run_id = encodeParam(run_id) + let result: SDKResponse = self.delete("/projects/\(path_project_id)/continuous_integration/runs/\(path_run_id)", nil, nil, options) + return result + } + /** * ### Generate Lockfile for All LookML Dependencies * @@ -8557,21 +8893,57 @@ open class LookerSDKStream: APIMethods { } /** - * ### Get All Projects - * - * Returns all projects visible to the current user + * ### Pull from Production + * Pulls changes from the remote production branch into the current development workspace. * - * GET /projects -> [Project] + * POST /projects/{project_id}/pull_from_production -> String */ - public func all_projects( + public func pull_project_from_production( /** - * @param {String} fields Requested fields + * @param {String} project_id Id of project */ - fields: String? = nil, + _ project_id: String, options: ITransportSettings? = nil ) -> SDKResponse { - let result: SDKResponse = self.get("/projects", - ["fields": fields], nil, options) + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/pull_from_production", nil, nil, options) + return result + } + + /** + * ### Pull from Remote + * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. + * + * POST /projects/{project_id}/pull_from_remote -> String + */ + public func pull_project_from_remote( + /** + * @param {String} project_id Id of project + */ + _ project_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/pull_from_remote", nil, nil, options) + return result + } + + /** + * ### Get All Projects + * + * Returns all projects visible to the current user + * + * GET /projects -> [Project] + */ + public func all_projects( + /** + * @param {String} fields Requested fields + */ + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.get("/projects", + ["fields": fields], nil, options) return result } @@ -9031,75 +9403,6 @@ open class LookerSDKStream: APIMethods { return result } - /** - * ### Initiate Git Diagnosis Suite - * - * POST /projects/{project_id}/git_diagnostic_report -> GitDiagnosticReport - */ - public func create_git_diagnostic_report( - /** - * @param {String} project_id Looker Project ID - */ - _ project_id: String, - /** - * @param {WriteGitDiagnosticReport} body - */ - _ body: WriteGitDiagnosticReport, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_project_id = encodeParam(project_id) - let result: SDKResponse = self.post("/projects/\(path_project_id)/git_diagnostic_report", nil, try! self.encode(body), options) - return result - } - - /** - * ### Retrieve Live Git Diagnostic Suite Execution Status - * - * GET /projects/{project_id}/git_diagnostic_report/{report_id} -> GitDiagnosticReport - */ - public func get_git_diagnostic_report( - /** - * @param {String} project_id Looker Project ID - */ - _ project_id: String, - /** - * @param {String} report_id Report ID - */ - _ report_id: String, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_project_id = encodeParam(project_id) - let path_report_id = encodeParam(report_id) - let result: SDKResponse = self.get("/projects/\(path_project_id)/git_diagnostic_report/\(path_report_id)", nil, nil, options) - return result - } - - /** - * ### Repair Git Configuration Issues - * - * POST /projects/{project_id}/git_diagnostic_report/{report_id}/repair -> GitDiagnosticReport - */ - public func repair_git_diagnostic_report( - /** - * @param {String} project_id Looker Project ID - */ - _ project_id: String, - /** - * @param {String} report_id Report ID - */ - _ report_id: String, - /** - * @param {WriteGitDiagnosticReport} body - */ - _ body: WriteGitDiagnosticReport, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_project_id = encodeParam(project_id) - let path_report_id = encodeParam(report_id) - let result: SDKResponse = self.post("/projects/\(path_project_id)/git_diagnostic_report/\(path_report_id)/repair", nil, try! self.encode(body), options) - return result - } - /** * ### Configure Repository Credential for a remote dependency * @@ -9189,6 +9492,8 @@ open class LookerSDKStream: APIMethods { * Use [query_task(query_task_id)](#!/Query/query_task) to check the execution status of the query task. * After the query task status reaches "Complete", use [query_task_results(query_task_id)](#!/Query/query_task_results) to fetch the results of the query. * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /query_tasks -> QueryTask */ public func create_query_task( @@ -9465,6 +9770,8 @@ open class LookerSDKStream: APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/{query_id}/run/{result_format} -> String * * **Note**: Binary content may be returned by this method. @@ -9588,6 +9895,8 @@ open class LookerSDKStream: APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * POST /queries/run/{result_format} -> String * * **Note**: Binary content may be returned by this method. @@ -9712,6 +10021,8 @@ open class LookerSDKStream: APIMethods { * | png | A PNG image of the visualization of the query * | jpg | A JPG image of the visualization of the query * + * **Note**: Streaming queries only write results to the cache when using the `json_detail` format. Queries in other formats only populate the cache if they cannot be streamed (such as when table calculations or row totals are present). Once cached, all result formats can retrieve results from the cache. + * * GET /queries/models/{model_name}/views/{view_name}/run/{result_format} -> String * * **Note**: Binary content may be returned by this method. @@ -11264,6 +11575,22 @@ open class LookerSDKStream: APIMethods { * @param {String} delivery_format Match scheduled plan's delivery format. */ delivery_format: String? = nil, + /** + * @param {Bool} all_states Return all scheduled plans including disabled and run_once plans (requires modernize_schedule_management feature flag). + */ + all_states: Bool? = nil, + /** + * @param {Bool} run_once Match Scheduled plan's run_once. + */ + run_once: Bool? = nil, + /** + * @param {Bool} enabled Match Scheduled plan's enabled status. + */ + enabled: Bool? = nil, + /** + * @param {String} last_run_status Match scheduled plan's last run status. + */ + last_run_status: String? = nil, /** * @param {Bool} filter_or Combine given search criteria in a boolean OR expression */ @@ -11271,7 +11598,7 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let result: SDKResponse = self.get("/scheduled_plans/search", - ["user_id": user_id, "fields": fields, "all_users": all_users as Any?, "limit": limit, "offset": offset, "sorts": sorts, "name": name, "user_first_name": user_first_name, "user_last_name": user_last_name, "dashboard_id": dashboard_id, "look_id": look_id, "lookml_dashboard_id": lookml_dashboard_id, "recipient": recipient, "destination_type": destination_type, "delivery_format": delivery_format, "filter_or": filter_or as Any?], nil, options) + ["user_id": user_id, "fields": fields, "all_users": all_users as Any?, "limit": limit, "offset": offset, "sorts": sorts, "name": name, "user_first_name": user_first_name, "user_last_name": user_last_name, "dashboard_id": dashboard_id, "look_id": look_id, "lookml_dashboard_id": lookml_dashboard_id, "recipient": recipient, "destination_type": destination_type, "delivery_format": delivery_format, "all_states": all_states as Any?, "run_once": run_once as Any?, "enabled": enabled as Any?, "last_run_status": last_run_status, "filter_or": filter_or as Any?], nil, options) return result } @@ -12151,283 +12478,217 @@ open class LookerSDKStream: APIMethods { } /** - * ### Get information about the current user; i.e. the user account currently calling the API. + * ### Email/password login information for the specified user. * - * GET /user -> User + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_email -> CredentialsEmail */ - public func me( + public func user_credentials_email( + /** + * @param {String} user_id Id of user + */ + _ user_id: String, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let result: SDKResponse = self.get("/user", + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_email", ["fields": fields], nil, options) return result } /** - * ### Get information about all users. + * ### Email/password login information for the specified user. * - * GET /users -> [User] + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * POST /users/{user_id}/credentials_email -> CredentialsEmail */ - public func all_users( + public func create_user_credentials_email( /** - * @param {String} fields Requested fields. + * @param {String} user_id Id of user */ - fields: String? = nil, + _ user_id: String, /** - * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results + * @param {WriteCredentialsEmail} body */ - page: Int64? = nil, + _ body: WriteCredentialsEmail, /** - * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page + * @param {String} fields Requested fields. */ - per_page: Int64? = nil, + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email", + ["fields": fields], try! self.encode(body), options) + return result + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * PATCH /users/{user_id}/credentials_email -> CredentialsEmail + */ + public func update_user_credentials_email( /** - * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) + * @param {String} user_id Id of user */ - limit: Int64? = nil, + _ user_id: String, /** - * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + * @param {WriteCredentialsEmail} body */ - offset: Int64? = nil, + _ body: WriteCredentialsEmail, /** - * @param {String} sorts Fields to sort by. + * @param {String} fields Requested fields. */ - sorts: String? = nil, + fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.patch("/users/\(path_user_id)/credentials_email", + ["fields": fields], try! self.encode(body), options) + return result + } + + /** + * ### Email/password login information for the specified user. + * + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_email -> String + */ + public func delete_user_credentials_email( /** - * @param {DelimArray} ids Optional list of ids to get specific users. + * @param {String} user_id Id of user */ - ids: DelimArray? = nil, + _ user_id: String, options: ITransportSettings? = nil ) -> SDKResponse { - let result: SDKResponse = self.get("/users", - ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "ids": ids as Any?], nil, options) + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_email", nil, nil, options) return result } /** - * ### Create a user with the specified information. + * ### Create a password reset token. + * This will create a cryptographically secure random password reset token for the user. + * If the user already has a password reset token then this invalidates the old token and creates a new one. + * The token is expressed as the 'password_reset_url' of the user's email/password credential object. + * This takes an optional 'expires' param to indicate if the new token should be an expiring token. + * Tokens that expire are typically used for self-service password resets for existing users. + * Invitation emails for new users typically are not set to expire. + * The expire period is always 60 minutes when expires is enabled. + * This method can be called with an empty body. * - * POST /users -> User + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail */ - public func create_user( + public func create_user_credentials_email_password_reset( /** - * @param {WriteUser} body + * @param {String} user_id Id of user */ - body: WriteUser?, + _ user_id: String, + /** + * @param {Bool} expires Expiring token. + */ + expires: Bool? = nil, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let result: SDKResponse = self.post("/users", - ["fields": fields], try! self.encode(body), options) + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email/password_reset", + ["expires": expires as Any?, "fields": fields], nil, options) return result } /** - * ### Search users - * - * Returns all* user records that match the given search criteria. - * - * If multiple search params are given and `filter_or` is FALSE or not specified, - * search params are combined in a logical AND operation. - * Only rows that match *all* search param criteria will be returned. - * - * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. - * Results will include rows that match **any** of the search criteria. - * - * String search params use case-insensitive matching. - * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. - * example="dan%" will match "danger" and "Danzig" but not "David" - * example="D_m%" will match "Damage" and "dump" - * - * Integer search params can accept a single value or a comma separated list of values. The multiple - * values will be combined under a logical OR operation - results will match at least one of - * the given values. - * - * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match - * or exclude (respectively) rows where the column is null. - * - * Boolean search params accept only "true" and "false" as values. - * + * ### Send a password reset token. + * This will send a password reset email to the user. If a password reset token does not already exist + * for this user, it will create one and then send it. + * If the user has not yet set up their account, it will send a setup email to the user. + * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. + * Password reset URLs will expire in 60 minutes. + * This method can be called with an empty body. * - * (*) Results are always filtered to the level of information the caller is permitted to view. - * Looker admins can see all user details; normal users in an open system can see - * names of other users but no details; normal users in a closed system can only see - * names of other users who are members of the same group as the user. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/search -> [User] + * POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail */ - public func search_users( - /** - * @param {String} fields Include only these fields in the response - */ - fields: String? = nil, + public func send_user_credentials_email_password_reset( /** - * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results + * @param {String} user_id Id of user */ - page: Int64? = nil, + _ user_id: String, /** - * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page + * @param {String} fields Requested fields. */ - per_page: Int64? = nil, - /** - * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) - */ - limit: Int64? = nil, - /** - * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - */ - offset: Int64? = nil, - /** - * @param {String} sorts Fields to sort by. - */ - sorts: String? = nil, - /** - * @param {String} id Match User Id. - */ - id: String? = nil, - /** - * @param {String} first_name Match First name. - */ - first_name: String? = nil, - /** - * @param {String} last_name Match Last name. - */ - last_name: String? = nil, - /** - * @param {String} full_name Match Full name (First Last). - */ - full_name: String? = nil, - /** - * @param {Bool} verified_looker_employee Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details. - */ - verified_looker_employee: Bool? = nil, - /** - * @param {Bool} embed_user Search for only embed users - */ - embed_user: Bool? = nil, - /** - * @param {String} email Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details. - */ - email: String? = nil, - /** - * @param {Bool} is_disabled Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details. - */ - is_disabled: Bool? = nil, - /** - * @param {Bool} filter_or Combine given search criteria in a boolean OR expression - */ - filter_or: Bool? = nil, - /** - * @param {String} content_metadata_id Search for users who have access to this content_metadata item - */ - content_metadata_id: String? = nil, - /** - * @param {String} group_id Search for users who are direct members of this group - */ - group_id: String? = nil, - /** - * @param {Bool} can_manage_api3_creds Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance. - */ - can_manage_api3_creds: Bool? = nil, - /** - * @param {Bool} is_service_account Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details. - */ - is_service_account: Bool? = nil, + fields: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let result: SDKResponse = self.get("/users/search", - ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "id": id, "first_name": first_name, "last_name": last_name, "full_name": full_name, "verified_looker_employee": verified_looker_employee as Any?, "embed_user": embed_user as Any?, "email": email, "is_disabled": is_disabled as Any?, "filter_or": filter_or as Any?, "content_metadata_id": content_metadata_id, "group_id": group_id, "can_manage_api3_creds": can_manage_api3_creds as Any?, "is_service_account": is_service_account as Any?], nil, options) + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email/send_password_reset", + ["fields": fields], nil, options) return result } /** - * ### Search for user accounts by name - * - * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. - * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. - * - * Any additional search params will be combined into a logical AND expression. + * ### Google authentication login information for the specified user. * - * GET /users/search/names/{pattern} -> [User] + * GET /users/{user_id}/credentials_google -> CredentialsGoogle */ - public func search_users_names( + public func user_credentials_google( /** - * @param {String} pattern Pattern to match + * @param {String} user_id Id of user */ - _ pattern: String, + _ user_id: String, /** - * @param {String} fields Include only these fields in the response + * @param {String} fields Requested fields. */ fields: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_google", + ["fields": fields], nil, options) + return result + } + + /** + * ### Delete Google authentication login information for the specified user. + * + * DELETE /users/{user_id}/credentials_google -> String + */ + public func delete_user_credentials_google( /** - * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results - */ - page: Int64? = nil, - /** - * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page - */ - per_page: Int64? = nil, - /** - * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) - */ - limit: Int64? = nil, - /** - * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) - */ - offset: Int64? = nil, - /** - * @param {String} sorts Fields to sort by - */ - sorts: String? = nil, - /** - * @param {String} id Match User Id - */ - id: String? = nil, - /** - * @param {String} first_name Match First name - */ - first_name: String? = nil, - /** - * @param {String} last_name Match Last name - */ - last_name: String? = nil, - /** - * @param {Bool} verified_looker_employee Match Verified Looker employee - */ - verified_looker_employee: Bool? = nil, - /** - * @param {String} email Match Email Address - */ - email: String? = nil, - /** - * @param {Bool} is_disabled Include or exclude disabled accounts in the results + * @param {String} user_id Id of user */ - is_disabled: Bool? = nil, + _ user_id: String, options: ITransportSettings? = nil ) -> SDKResponse { - let path_pattern = encodeParam(pattern) - let result: SDKResponse = self.get("/users/search/names/\(path_pattern)", - ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "id": id, "first_name": first_name, "last_name": last_name, "verified_looker_employee": verified_looker_employee as Any?, "email": email, "is_disabled": is_disabled as Any?], nil, options) + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_google", nil, nil, options) return result } /** - * ### Get information about the user with a specific id. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * If the caller is an admin or the caller is the user being specified, then full user information will - * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains - * The user name and avatar url, but no sensitive information. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/{user_id} -> User + * GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid */ - public func user( + public func user_credentials_looker_openid( /** * @param {String} user_id Id of user */ @@ -12439,25 +12700,40 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)", + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_looker_openid", ["fields": fields], nil, options) return result } /** - * ### Update information about the user with a specific id. + * ### Looker Openid login information for the specified user. Used by Looker Analysts. * - * PATCH /users/{user_id} -> User + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_looker_openid -> String */ - public func update_user( + public func delete_user_credentials_looker_openid( /** * @param {String} user_id Id of user */ _ user_id: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_looker_openid", nil, nil, options) + return result + } + + /** + * ### Saml authentication login information for the specified user. + * + * GET /users/{user_id}/credentials_saml -> CredentialsSaml + */ + public func user_credentials_saml( /** - * @param {WriteUser} body + * @param {String} user_id Id of user */ - _ body: WriteUser, + _ user_id: String, /** * @param {String} fields Requested fields. */ @@ -12465,31 +12741,17 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.patch("/users/\(path_user_id)", - ["fields": fields], try! self.encode(body), options) + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_saml", + ["fields": fields], nil, options) return result } /** - * ### Delete the user with a specific id. + * ### Delete Saml authentication login information for the specified user. * - * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the users or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. - * - * The user cannot delete themselves. - * The last administrator user cannot be deleted. - * - * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. - * Please use the dedicated `delete_service_account` endpoint. - * - * DELETE /users/{user_id} -> String + * DELETE /users/{user_id}/credentials_saml -> String */ - public func delete_user( + public func delete_user_credentials_saml( /** * @param {String} user_id Id of user */ @@ -12497,82 +12759,50 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)", nil, nil, options) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_saml", nil, nil, options) return result } /** - * ### Get information about the user with a credential of given type with specific id. - * - * This is used to do things like find users by their embed external_user_id. Or, find the user with - * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential - * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id - * for the user and is specific to each type of credential. - * - * An example using the Ruby sdk might look like: - * - * `sdk.user_for_credential('embed', 'customer-4959425')` - * - * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows - * which field in the given credential type is actually searched when finding a user with the supplied - * 'credential_id'. - * - * | Credential Types | Id Field Matched | - * | ---------------- | ---------------- | - * | email | email | - * | google | google_user_id | - * | saml | saml_user_id | - * | oidc | oidc_user_id | - * | ldap | ldap_id | - * | api | token | - * | api3 | client_id | - * | embed | external_user_id | - * | looker_openid | email | - * - * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. + * ### Get two-factor login information for the specified user. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/credential/{credential_type}/{credential_id} -> User + * GET /users/{user_id}/credentials_totp -> CredentialsTotp */ - public func user_for_credential( - /** - * @param {String} credential_type Type name of credential - */ - _ credential_type: String, + public func user_credentials_totp( /** - * @param {String} credential_id Id of credential + * @param {String} user_id Id of user */ - _ credential_id: String, + _ user_id: String, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let path_credential_type = encodeParam(credential_type) - let path_credential_id = encodeParam(credential_id) - let result: SDKResponse = self.get("/users/credential/\(path_credential_type)/\(path_credential_id)", + let path_user_id = encodeParam(user_id) + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_totp", ["fields": fields], nil, options) return result } /** - * ### Update information for a specific service account. This action is restricted to Looker admins. + * ### Create two-factor login information for the specified user. * - * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * PATCH /users/service_accounts/{user_id} -> ServiceAccount + * POST /users/{user_id}/credentials_totp -> CredentialsTotp */ - public func update_service_account( + public func create_user_credentials_totp( /** - * @param {String} user_id Id of service account + * @param {String} user_id Id of user */ _ user_id: String, /** - * @param {WriteServiceAccount} body + * @param {CredentialsTotp} body WARNING: no writeable properties found for POST, PUT, or PATCH */ - _ body: WriteServiceAccount, + body: CredentialsTotp?, /** * @param {String} fields Requested fields. */ @@ -12580,145 +12810,308 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.patch("/users/service_accounts/\(path_user_id)", + let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_totp", ["fields": fields], try! self.encode(body), options) return result } /** - * ### Delete the service account with a specific id. - * - * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. - * - * Deletion will have the following impact: - * * Their reports, Looks and dashboards will be moved to Trash. - * * Any public URLs owned by them will no longer work. - * * Schedules created by the service account or that use their content will be deleted. - * * Alerts will continue to run, but will not be visible or editable from the dashboard. + * ### Delete two-factor login information for the specified user. * - * The service account cannot delete itself. + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * DELETE /users/service_accounts/{user_id} -> String + * DELETE /users/{user_id}/credentials_totp -> String */ - public func delete_service_account( + public func delete_user_credentials_totp( /** - * @param {String} user_id Id of service account user + * @param {String} user_id Id of user */ _ user_id: String, options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/service_accounts/\(path_user_id)", nil, nil, options) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_totp", nil, nil, options) return result } /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Get information about the current user; i.e. the user account currently calling the API. * - * GET /users/{user_id}/credentials_email -> CredentialsEmail + * GET /user -> User */ - public func user_credentials_email( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, + public func me( /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_email", + let result: SDKResponse = self.get("/user", ["fields": fields], nil, options) return result } /** - * ### Email/password login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Get information about all users. * - * POST /users/{user_id}/credentials_email -> CredentialsEmail + * GET /users -> [User] */ - public func create_user_credentials_email( + public func all_users( /** - * @param {String} user_id Id of user + * @param {String} fields Requested fields. */ - _ user_id: String, + fields: String? = nil, /** - * @param {WriteCredentialsEmail} body + * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results */ - _ body: WriteCredentialsEmail, + page: Int64? = nil, + /** + * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page + */ + per_page: Int64? = nil, + /** + * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + */ + offset: Int64? = nil, + /** + * @param {String} sorts Fields to sort by. + */ + sorts: String? = nil, + /** + * @param {DelimArray} ids Optional list of ids to get specific users. + */ + ids: DelimArray? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.get("/users", + ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "ids": ids as Any?], nil, options) + return result + } + + /** + * ### Create a user with the specified information. + * + * POST /users -> User + */ + public func create_user( + /** + * @param {WriteUser} body + */ + body: WriteUser?, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email", + let result: SDKResponse = self.post("/users", ["fields": fields], try! self.encode(body), options) return result } /** - * ### Email/password login information for the specified user. + * ### Search users * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all* user records that match the given search criteria. * - * PATCH /users/{user_id}/credentials_email -> CredentialsEmail + * If multiple search params are given and `filter_or` is FALSE or not specified, + * search params are combined in a logical AND operation. + * Only rows that match *all* search param criteria will be returned. + * + * If `filter_or` is TRUE, multiple search params are combined in a logical OR operation. + * Results will include rows that match **any** of the search criteria. + * + * String search params use case-insensitive matching. + * String search params can contain `%` and '_' as SQL LIKE pattern match wildcard expressions. + * example="dan%" will match "danger" and "Danzig" but not "David" + * example="D_m%" will match "Damage" and "dump" + * + * Integer search params can accept a single value or a comma separated list of values. The multiple + * values will be combined under a logical OR operation - results will match at least one of + * the given values. + * + * Most search params can accept "IS NULL" and "NOT NULL" as special expressions to match + * or exclude (respectively) rows where the column is null. + * + * Boolean search params accept only "true" and "false" as values. + * + * + * (*) Results are always filtered to the level of information the caller is permitted to view. + * Looker admins can see all user details; normal users in an open system can see + * names of other users but no details; normal users in a closed system can only see + * names of other users who are members of the same group as the user. + * + * GET /users/search -> [User] */ - public func update_user_credentials_email( + public func search_users( /** - * @param {String} user_id Id of user + * @param {String} fields Include only these fields in the response */ - _ user_id: String, + fields: String? = nil, /** - * @param {WriteCredentialsEmail} body + * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results */ - _ body: WriteCredentialsEmail, + page: Int64? = nil, /** - * @param {String} fields Requested fields. + * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page */ - fields: String? = nil, + per_page: Int64? = nil, + /** + * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + */ + offset: Int64? = nil, + /** + * @param {String} sorts Fields to sort by. + */ + sorts: String? = nil, + /** + * @param {String} id Match User Id. + */ + id: String? = nil, + /** + * @param {String} first_name Match First name. + */ + first_name: String? = nil, + /** + * @param {String} last_name Match Last name. + */ + last_name: String? = nil, + /** + * @param {String} full_name Match Full name (First Last). + */ + full_name: String? = nil, + /** + * @param {Bool} verified_looker_employee Search for user accounts associated with Looker employees. Availability of this filter is limited to users with permission to view complete user details. + */ + verified_looker_employee: Bool? = nil, + /** + * @param {Bool} embed_user Search for only embed users + */ + embed_user: Bool? = nil, + /** + * @param {String} email Search for the user with this email address. Availability of this filter is limited to users with permission to view complete user details. + */ + email: String? = nil, + /** + * @param {Bool} is_disabled Search for disabled user accounts. Availability of this filter is limited to users with permission to view complete user details. + */ + is_disabled: Bool? = nil, + /** + * @param {Bool} filter_or Combine given search criteria in a boolean OR expression + */ + filter_or: Bool? = nil, + /** + * @param {String} content_metadata_id Search for users who have access to this content_metadata item + */ + content_metadata_id: String? = nil, + /** + * @param {String} group_id Search for users who are direct members of this group + */ + group_id: String? = nil, + /** + * @param {Bool} can_manage_api3_creds Search for users who can manage API3 credentials. Availability of this filter is limited to users with permission to view complete user details. This is an experimental feature and may not yet be available on your instance. + */ + can_manage_api3_creds: Bool? = nil, + /** + * @param {Bool} is_service_account Search for service account users. Send true to get only service accounts, or false to get all other types of users. Availability of this filter is limited to users with permission to view complete user details. + */ + is_service_account: Bool? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.patch("/users/\(path_user_id)/credentials_email", - ["fields": fields], try! self.encode(body), options) + let result: SDKResponse = self.get("/users/search", + ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "id": id, "first_name": first_name, "last_name": last_name, "full_name": full_name, "verified_looker_employee": verified_looker_employee as Any?, "embed_user": embed_user as Any?, "email": email, "is_disabled": is_disabled as Any?, "filter_or": filter_or as Any?, "content_metadata_id": content_metadata_id, "group_id": group_id, "can_manage_api3_creds": can_manage_api3_creds as Any?, "is_service_account": is_service_account as Any?], nil, options) return result } /** - * ### Email/password login information for the specified user. + * ### Search for user accounts by name * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * Returns all user accounts where `first_name` OR `last_name` OR `email` field values match a pattern. + * The pattern can contain `%` and `_` wildcards as in SQL LIKE expressions. * - * DELETE /users/{user_id}/credentials_email -> String + * Any additional search params will be combined into a logical AND expression. + * + * GET /users/search/names/{pattern} -> [User] */ - public func delete_user_credentials_email( + public func search_users_names( /** - * @param {String} user_id Id of user + * @param {String} pattern Pattern to match */ - _ user_id: String, + _ pattern: String, + /** + * @param {String} fields Include only these fields in the response + */ + fields: String? = nil, + /** + * @param {Int64} page DEPRECATED. Use limit and offset instead. Return only page N of paginated results + */ + page: Int64? = nil, + /** + * @param {Int64} per_page DEPRECATED. Use limit and offset instead. Return N rows of data per page + */ + per_page: Int64? = nil, + /** + * @param {Int64} limit Number of results to return. (used with offset and takes priority over page and per_page) + */ + limit: Int64? = nil, + /** + * @param {Int64} offset Number of results to skip before returning any. (used with limit and takes priority over page and per_page) + */ + offset: Int64? = nil, + /** + * @param {String} sorts Fields to sort by + */ + sorts: String? = nil, + /** + * @param {String} id Match User Id + */ + id: String? = nil, + /** + * @param {String} first_name Match First name + */ + first_name: String? = nil, + /** + * @param {String} last_name Match Last name + */ + last_name: String? = nil, + /** + * @param {Bool} verified_looker_employee Match Verified Looker employee + */ + verified_looker_employee: Bool? = nil, + /** + * @param {String} email Match Email Address + */ + email: String? = nil, + /** + * @param {Bool} is_disabled Include or exclude disabled accounts in the results + */ + is_disabled: Bool? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_email", nil, nil, options) + let path_pattern = encodeParam(pattern) + let result: SDKResponse = self.get("/users/search/names/\(path_pattern)", + ["fields": fields, "page": page, "per_page": per_page, "limit": limit, "offset": offset, "sorts": sorts, "id": id, "first_name": first_name, "last_name": last_name, "verified_looker_employee": verified_looker_employee as Any?, "email": email, "is_disabled": is_disabled as Any?], nil, options) return result } /** - * ### Two-factor login information for the specified user. + * ### Get information about the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * If the caller is an admin or the caller is the user being specified, then full user information will + * be returned. Otherwise, a minimal 'public' variant of the user information will be returned. This contains + * The user name and avatar url, but no sensitive information. * - * GET /users/{user_id}/credentials_totp -> CredentialsTotp + * GET /users/{user_id} -> User */ - public func user_credentials_totp( + public func user( /** * @param {String} user_id Id of user */ @@ -12730,27 +13123,25 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_totp", + let result: SDKResponse = self.get("/users/\(path_user_id)", ["fields": fields], nil, options) return result } /** - * ### Two-factor login information for the specified user. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * ### Update information about the user with a specific id. * - * POST /users/{user_id}/credentials_totp -> CredentialsTotp + * PATCH /users/{user_id} -> User */ - public func create_user_credentials_totp( + public func update_user( /** * @param {String} user_id Id of user */ _ user_id: String, /** - * @param {CredentialsTotp} body WARNING: no writeable properties found for POST, PUT, or PATCH + * @param {WriteUser} body */ - body: CredentialsTotp?, + _ body: WriteUser, /** * @param {String} fields Requested fields. */ @@ -12758,19 +13149,31 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_totp", + let result: SDKResponse = self.patch("/users/\(path_user_id)", ["fields": fields], try! self.encode(body), options) return result } /** - * ### Two-factor login information for the specified user. + * ### Delete the user with a specific id. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * **This action cannot be undone.** If you want to keep the user's content, we recommend disabling their accounts instead of deleting them. * - * DELETE /users/{user_id}/credentials_totp -> String + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the users or that use their content will be deleted. + * * Alerts owned by the users will be deleted. + * + * The user cannot delete themselves. + * The last administrator user cannot be deleted. + * + * Deleting Service Accounts via this endpoint is deprecated and can be blocked in future versions. + * Please use the dedicated `delete_service_account` endpoint. + * + * DELETE /users/{user_id} -> String */ - public func delete_user_credentials_totp( + public func delete_user( /** * @param {String} user_id Id of user */ @@ -12778,63 +13181,82 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_totp", nil, nil, options) + let result: SDKResponse = self.delete("/users/\(path_user_id)", nil, nil, options) return result } /** - * ### LDAP login information for the specified user. + * ### Get information about the user with a credential of given type with specific id. + * + * This is used to do things like find users by their embed external_user_id. Or, find the user with + * a given api3 client_id, etc. The 'credential_type' matches the 'type' name of the various credential + * types. It must be one of the values listed in the table below. The 'credential_id' is your unique Id + * for the user and is specific to each type of credential. + * + * An example using the Ruby sdk might look like: + * + * `sdk.user_for_credential('embed', 'customer-4959425')` + * + * This table shows the supported 'Credential Type' strings. The right column is for reference; it shows + * which field in the given credential type is actually searched when finding a user with the supplied + * 'credential_id'. + * + * | Credential Types | Id Field Matched | + * | ---------------- | ---------------- | + * | email | email | + * | google | google_user_id | + * | saml | saml_user_id | + * | oidc | oidc_user_id | + * | ldap | ldap_id | + * | api | token | + * | api3 | client_id | + * | embed | external_user_id | + * | looker_openid | email | + * + * **NOTE**: The 'api' credential type was only used with the legacy Looker query API and is no longer supported. The credential type for API you are currently looking at is 'api3'. * * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). * - * GET /users/{user_id}/credentials_ldap -> CredentialsLDAP + * GET /users/credential/{credential_type}/{credential_id} -> User */ - public func user_credentials_ldap( + public func user_for_credential( /** - * @param {String} user_id Id of user + * @param {String} credential_type Type name of credential */ - _ user_id: String, + _ credential_type: String, + /** + * @param {String} credential_id Id of credential + */ + _ credential_id: String, /** * @param {String} fields Requested fields. */ fields: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_ldap", + let path_credential_type = encodeParam(credential_type) + let path_credential_id = encodeParam(credential_id) + let result: SDKResponse = self.get("/users/credential/\(path_credential_type)/\(path_credential_id)", ["fields": fields], nil, options) return result } /** - * ### LDAP login information for the specified user. + * ### Update information for a specific service account. This action is restricted to Looker admins. * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * This endpoint is exclusively for updating service accounts. To update a regular user, please use the `PATCH /api/3.x/users/:user_id` endpoint instead. * - * DELETE /users/{user_id}/credentials_ldap -> String + * PATCH /users/service_accounts/{user_id} -> ServiceAccount */ - public func delete_user_credentials_ldap( + public func update_service_account( /** - * @param {String} user_id Id of user + * @param {String} user_id Id of service account */ _ user_id: String, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_ldap", nil, nil, options) - return result - } - - /** - * ### Google authentication login information for the specified user. - * - * GET /users/{user_id}/credentials_google -> CredentialsGoogle - */ - public func user_credentials_google( /** - * @param {String} user_id Id of user + * @param {WriteServiceAccount} body */ - _ user_id: String, + _ body: WriteServiceAccount, /** * @param {String} fields Requested fields. */ @@ -12842,34 +13264,46 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_google", - ["fields": fields], nil, options) + let result: SDKResponse = self.patch("/users/service_accounts/\(path_user_id)", + ["fields": fields], try! self.encode(body), options) return result } /** - * ### Google authentication login information for the specified user. + * ### Delete the service account with a specific id. * - * DELETE /users/{user_id}/credentials_google -> String + * **This action cannot be undone.** If you want to keep the service account's content, we recommend disabling their accounts instead of deleting them. + * + * Deletion will have the following impact: + * * Their reports, Looks and dashboards will be moved to Trash. + * * Any public URLs owned by them will no longer work. + * * Schedules created by the service account or that use their content will be deleted. + * * Alerts owned by the service account will be deleted. + * + * The service account cannot delete itself. + * + * DELETE /users/service_accounts/{user_id} -> String */ - public func delete_user_credentials_google( + public func delete_service_account( /** - * @param {String} user_id Id of user + * @param {String} user_id Id of service account user */ _ user_id: String, options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_google", nil, nil, options) + let result: SDKResponse = self.delete("/users/service_accounts/\(path_user_id)", nil, nil, options) return result } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * GET /users/{user_id}/credentials_saml -> CredentialsSaml + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * GET /users/{user_id}/credentials_ldap -> CredentialsLDAP */ - public func user_credentials_saml( + public func user_credentials_ldap( /** * @param {String} user_id Id of user */ @@ -12881,17 +13315,19 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_saml", + let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_ldap", ["fields": fields], nil, options) return result } /** - * ### Saml authentication login information for the specified user. + * ### LDAP login information for the specified user. * - * DELETE /users/{user_id}/credentials_saml -> String + * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). + * + * DELETE /users/{user_id}/credentials_ldap -> String */ - public func delete_user_credentials_saml( + public func delete_user_credentials_ldap( /** * @param {String} user_id Id of user */ @@ -12899,7 +13335,7 @@ open class LookerSDKStream: APIMethods { options: ITransportSettings? = nil ) -> SDKResponse { let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_saml", nil, nil, options) + let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_ldap", nil, nil, options) return result } @@ -13143,49 +13579,6 @@ open class LookerSDKStream: APIMethods { return result } - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * GET /users/{user_id}/credentials_looker_openid -> CredentialsLookerOpenid - */ - public func user_credentials_looker_openid( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, - /** - * @param {String} fields Requested fields. - */ - fields: String? = nil, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.get("/users/\(path_user_id)/credentials_looker_openid", - ["fields": fields], nil, options) - return result - } - - /** - * ### Looker Openid login information for the specified user. Used by Looker Analysts. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * DELETE /users/{user_id}/credentials_looker_openid -> String - */ - public func delete_user_credentials_looker_openid( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.delete("/users/\(path_user_id)/credentials_looker_openid", nil, nil, options) - return result - } - /** * ### Web login session for the specified user. * @@ -13257,42 +13650,6 @@ open class LookerSDKStream: APIMethods { return result } - /** - * ### Create a password reset token. - * This will create a cryptographically secure random password reset token for the user. - * If the user already has a password reset token then this invalidates the old token and creates a new one. - * The token is expressed as the 'password_reset_url' of the user's email/password credential object. - * This takes an optional 'expires' param to indicate if the new token should be an expiring token. - * Tokens that expire are typically used for self-service password resets for existing users. - * Invitation emails for new users typically are not set to expire. - * The expire period is always 60 minutes when expires is enabled. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/password_reset -> CredentialsEmail - */ - public func create_user_credentials_email_password_reset( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, - /** - * @param {Bool} expires Expiring token. - */ - expires: Bool? = nil, - /** - * @param {String} fields Requested fields. - */ - fields: String? = nil, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email/password_reset", - ["expires": expires as Any?, "fields": fields], nil, options) - return result - } - /** * ### Get information about roles of a given user * @@ -13449,36 +13806,6 @@ open class LookerSDKStream: APIMethods { return result } - /** - * ### Send a password reset token. - * This will send a password reset email to the user. If a password reset token does not already exist - * for this user, it will create one and then send it. - * If the user has not yet set up their account, it will send a setup email to the user. - * The URL sent in the email is expressed as the 'password_reset_url' of the user's email/password credential object. - * Password reset URLs will expire in 60 minutes. - * This method can be called with an empty body. - * - * Calls to this endpoint may be denied by [Looker (Google Cloud core)](https://docs.cloud.google.com/looker/docs/r/looker-core/overview). - * - * POST /users/{user_id}/credentials_email/send_password_reset -> CredentialsEmail - */ - public func send_user_credentials_email_password_reset( - /** - * @param {String} user_id Id of user - */ - _ user_id: String, - /** - * @param {String} fields Requested fields. - */ - fields: String? = nil, - options: ITransportSettings? = nil - ) -> SDKResponse { - let path_user_id = encodeParam(user_id) - let result: SDKResponse = self.post("/users/\(path_user_id)/credentials_email/send_password_reset", - ["fields": fields], nil, options) - return result - } - /** * ### Change a disabled user's email addresses * diff --git a/yarn.lock b/yarn.lock index acc777f19..48e47c2db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5715,9 +5715,9 @@ camelize@^1.0.0: integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== caniuse-lite@^1.0.30001759: - version "1.0.30001778" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001778.tgz#79a8a124e3473a20b70616497b987c30d06570a0" - integrity sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg== + version "1.0.30001810" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz" + integrity sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg== caseless@~0.12.0: version "0.12.0" From a6cfb23a01dcf30dd2e6d9d29b37b99724c08b20 Mon Sep 17 00:00:00 2001 From: Mike DeAngelo Date: Mon, 5 Oct 2026 18:29:43 +0000 Subject: [PATCH 2/6] chore: update to deprecate reusable actions --- .github/workflows/codegen-ci.yml | 7 ++----- .github/workflows/go-ci.yml | 7 ++----- .github/workflows/lerna-publish.yml | 8 ++------ .github/workflows/python-ci.yml | 7 ++----- .github/workflows/tssdk-ci.yml | 6 ++---- 5 files changed, 10 insertions(+), 25 deletions(-) diff --git a/.github/workflows/codegen-ci.yml b/.github/workflows/codegen-ci.yml index 135b0a9c5..38ecfbba1 100644 --- a/.github/workflows/codegen-ci.yml +++ b/.github/workflows/codegen-ci.yml @@ -31,11 +31,8 @@ env: TS_JUNIT_OUTPUT_DIR: results/sdk-codegen jobs: - setup: - uses: looker-open-source/reusable-actions/.github/workflows/primary-version.yml@main unit: - needs: setup env: JEST_JUNIT_OUTPUT_DIR: results/sdk-codegen JEST_JUNIT_OUTPUT_NAME: ubuntu-latest.sdk-codegen15x.xml @@ -71,9 +68,9 @@ jobs: # TODO: can we cache some layers of the image for faster download? # we probably don't want to cache the final image for IP security... run: | - docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(needs.setup.outputs.matrix_json)[0] }} + docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} # set $LOOKER_OPTS to --no-ssl if we want to turn off ssl - docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(needs.setup.outputs.matrix_json)[0] }} + docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} docker logs -f looker-sdk-codegen-ci --until=30s & - uses: actions/setup-node@v4 diff --git a/.github/workflows/go-ci.yml b/.github/workflows/go-ci.yml index 1c792f772..9e37f48c5 100644 --- a/.github/workflows/go-ci.yml +++ b/.github/workflows/go-ci.yml @@ -69,11 +69,8 @@ jobs: name: ${{ env.JUNIT_ARTIFACT_DIR }}-${{ matrix.os }}-${{ matrix.go-version }} path: ${{ env.JUNIT_OUTPUT_DIR }} - setup: - uses: looker-open-source/reusable-actions/.github/workflows/supported-versions.yml@main - integration: - needs: [setup, unit] + needs: [unit] name: Integration - ${{ matrix.os }} / Looker.${{ matrix.looker }} env: LOOKERSDK_CLIENT_ID: ${{ secrets.LOOKERSDK_CLIENT_ID }} @@ -89,7 +86,7 @@ jobs: os: - ubuntu looker: - ${{ fromJson(needs.setup.outputs.matrix_json) }} + ${{ fromJson(vars.SUPPORTED_LOOKER_VERSIONS) }} # TODO uncomment `include:` when either macos or windows works to satisfaction. #include: diff --git a/.github/workflows/lerna-publish.yml b/.github/workflows/lerna-publish.yml index d143a43e3..3f079cbfc 100644 --- a/.github/workflows/lerna-publish.yml +++ b/.github/workflows/lerna-publish.yml @@ -11,11 +11,7 @@ on: required: true jobs: - setup: - uses: looker-open-source/reusable-actions/.github/workflows/primary-version.yml@main - publish: - needs: setup if: > (github.event.inputs) || (startsWith(github.event.release.tag_name, 'sdk-codegen-all') && @@ -50,8 +46,8 @@ jobs: - name: Pull and run Looker docker image run: | - docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(needs.setup.outputs.matrix_json)[0] }} - docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(needs.setup.outputs.matrix_json)[0] }} + docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} + docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} docker logs -f looker-sdk-codegen-ci --until=30s & - uses: actions/setup-node@v4 diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 620c46102..43fe9312f 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -27,9 +27,6 @@ permissions: checks: write jobs: - setup: - uses: looker-open-source/reusable-actions/.github/workflows/supported-versions.yml@main - typecheck: name: Mypy runs-on: ubuntu-latest @@ -107,7 +104,7 @@ jobs: path: python/results/ integration: - needs: [unit, setup] + needs: [unit] name: Integration - ${{ matrix.os }} / Looker.${{ matrix.looker }} env: TOX_JUNIT_OUTPUT_NAME: ${{ matrix.os }}.Looker-${{ matrix.looker }}.py3.x @@ -127,7 +124,7 @@ jobs: os: - large-ubuntu looker: - ${{ fromJson(needs.setup.outputs.matrix_json) }} + ${{ fromJson(vars.SUPPORTED_LOOKER_VERSIONS) }} # TODO uncomment `include:` when either macos or windows works to satisfaction. #include: diff --git a/.github/workflows/tssdk-ci.yml b/.github/workflows/tssdk-ci.yml index bbe84fb83..d55d31ff7 100644 --- a/.github/workflows/tssdk-ci.yml +++ b/.github/workflows/tssdk-ci.yml @@ -114,10 +114,8 @@ jobs: name: tssdk-test-results-${{ matrix.os }}-${{ matrix.node-version }} path: results/tssdk - setup: - uses: looker-open-source/reusable-actions/.github/workflows/primary-version.yml@main integration: - needs: [unit, setup] + needs: [unit] name: Integration - ${{ matrix.os }} / Node.${{ matrix.node-version }} / Looker.${{ matrix.looker }} env: JEST_JUNIT_OUTPUT_DIR: results/tssdk @@ -130,7 +128,7 @@ jobs: node-version: [20.x, 22.x] os: - ubuntu - looker: ${{ fromJson(needs.setup.outputs.matrix_json) }} + looker: ${{ fromJson(vars.PRIMARY_LOOKER_VERSION) }} steps: - name: Repo Checkout From dcea19bee26db98bb1053b4126987ec6eddd5c96 Mon Sep 17 00:00:00 2001 From: Mike DeAngelo Date: Mon, 5 Oct 2026 20:01:41 +0000 Subject: [PATCH 3/6] fixes for binary, fixes for zizmor, black reformats --- .github/workflows/apix-ci.yml | 14 +- .github/workflows/codegen-ci.yml | 18 +- .github/workflows/go-ci.yml | 28 +- .github/workflows/hackathon-ci.yml | 8 +- .github/workflows/kotlin-ci.yml | 12 +- .github/workflows/lerna-publish.yml | 8 +- .github/workflows/p3-issue-label.yml | 2 +- .github/workflows/python-ci.yml | 40 +- .github/workflows/python-publish.yml | 7 +- .github/workflows/release-metrics.yml | 4 +- .github/workflows/release-please.yml | 2 +- .github/workflows/required-checks-hack-ci.yml | 6 +- .github/workflows/resources-ci.yml | 8 +- .github/workflows/triage-issue-label.yml | 2 +- .github/workflows/tssdk-ci.yml | 26 +- csharp/sdk/4.0/methods.cs | 10 +- go/sdk/v4/methods.go | 6 +- kotlin/src/main/com/looker/sdk/4.0/methods.kt | 5256 ++++++++------- kotlin/src/main/com/looker/sdk/4.0/models.kt | 1973 +++--- kotlin/src/main/com/looker/sdk/4.0/streams.kt | 5707 ++++++++--------- packages/sdk-codegen/src/csharp.gen.spec.ts | 7 + packages/sdk-codegen/src/csharp.gen.ts | 6 + packages/sdk-codegen/src/go.gen.spec.ts | 6 + packages/sdk-codegen/src/go.gen.ts | 6 + packages/sdk-codegen/src/kotlin.gen.spec.ts | 7 + packages/sdk-codegen/src/kotlin.gen.ts | 6 + packages/sdk-codegen/src/python.gen.spec.ts | 7 + packages/sdk-codegen/src/python.gen.ts | 7 + packages/sdk-codegen/src/swift.gen.spec.ts | 7 + packages/sdk-codegen/src/swift.gen.ts | 6 + python/looker_sdk/__init__.py | 1 + python/looker_sdk/error.py | 2 +- python/looker_sdk/rtl/__init__.py | 1 - python/looker_sdk/rtl/api_methods.py | 27 +- python/looker_sdk/rtl/api_settings.py | 11 +- python/looker_sdk/rtl/auth_session.py | 4 +- python/looker_sdk/rtl/auth_token.py | 7 +- python/looker_sdk/rtl/hooks.py | 1 - python/looker_sdk/rtl/model.py | 7 +- python/looker_sdk/rtl/requests_transport.py | 3 +- python/looker_sdk/rtl/serialize.py | 7 +- python/looker_sdk/rtl/transport.py | 4 +- python/looker_sdk/sdk/api40/methods.py | 8 +- python/tests/integration/__init__.py | 3 +- python/tests/integration/test_methods.py | 58 +- python/tests/rtl/__init__.py | 3 +- python/tests/rtl/test_api_settings.py | 9 +- python/tests/rtl/test_auth_session.py | 6 +- python/tests/rtl/test_requests_transport.py | 24 +- python/tests/rtl/test_serialize.py | 1 + python/tests/rtl/test_transport.py | 1 + spec/Looker.4.0.json | 2 +- spec/Looker.4.0.oas.json | 2 +- swift/looker/sdk/methods.swift | 6 +- swift/looker/sdk/streams.swift | 2 +- 55 files changed, 6522 insertions(+), 6880 deletions(-) diff --git a/.github/workflows/apix-ci.yml b/.github/workflows/apix-ci.yml index fcc9fadeb..6667e5696 100644 --- a/.github/workflows/apix-ci.yml +++ b/.github/workflows/apix-ci.yml @@ -48,15 +48,17 @@ jobs: steps: - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Install Node ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: ${{ matrix.node-version }} @@ -90,7 +92,7 @@ jobs: - name: Upload ts unit test results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: apix-test-results path: results/apix-${{ matrix.os }}-${{ matrix.node-version }} @@ -106,12 +108,12 @@ jobs: steps: - name: Download Artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: path: artifacts - name: Publish Unit Test Results - uses: EnricoMi/publish-unit-test-result-action@v2 + uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 with: # Cosmetic issue with `check_name` being associated to the wrong # workflow: https://github.com/EnricoMi/publish-unit-test-result-action/issues/12 diff --git a/.github/workflows/codegen-ci.yml b/.github/workflows/codegen-ci.yml index 38ecfbba1..7c33cb90d 100644 --- a/.github/workflows/codegen-ci.yml +++ b/.github/workflows/codegen-ci.yml @@ -43,15 +43,17 @@ jobs: steps: - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - name: Authenticate to Google Cloud - uses: google-github-actions/auth@v2 + uses: google-github-actions/auth@c200f3691d83b41bf9bbd8638997a462592937ed # v2 with: credentials_json: ${{ secrets.GCP_AR_READER_SA_KEY }} project_id: ${{ secrets.GCP_PROJECT_ID }} @@ -59,7 +61,7 @@ jobs: export_environment_variables: true - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v2 + uses: google-github-actions/setup-gcloud@e427ad8a34f8676edf47cf7d7925499adf3eb74f # v2 - name: Authenticate Artifact Repository run: gcloud auth configure-docker us-west1-docker.pkg.dev --quiet @@ -73,7 +75,7 @@ jobs: docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} docker logs -f looker-sdk-codegen-ci --until=30s & - - uses: actions/setup-node@v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 22.x @@ -123,7 +125,7 @@ jobs: - name: Upload ts unit test results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: sdk-codegen-test-results path: results/sdk-codegen @@ -139,12 +141,12 @@ jobs: steps: - name: Download Artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: path: artifacts - name: Publish Unit Test Results - uses: EnricoMi/publish-unit-test-result-action@v2 + uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 with: # Cosmetic issue with `check_name` being associated to the wrong # workflow: https://github.com/EnricoMi/publish-unit-test-result-action/issues/12 diff --git a/.github/workflows/go-ci.yml b/.github/workflows/go-ci.yml index 9e37f48c5..469c4ec81 100644 --- a/.github/workflows/go-ci.yml +++ b/.github/workflows/go-ci.yml @@ -41,15 +41,17 @@ jobs: steps: - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Install Go ${{ matrix.go-version }} - uses: actions/setup-go@v5 + uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 with: go-version: ${{ matrix.go-version }} @@ -64,7 +66,7 @@ jobs: - name: Upload Go unit test results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: ${{ env.JUNIT_ARTIFACT_DIR }}-${{ matrix.os }}-${{ matrix.go-version }} path: ${{ env.JUNIT_OUTPUT_DIR }} @@ -110,10 +112,12 @@ jobs: # looker: '7_20' steps: - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Authenticate to Google Cloud - uses: google-github-actions/auth@v2 + uses: google-github-actions/auth@c200f3691d83b41bf9bbd8638997a462592937ed # v2 with: credentials_json: ${{ secrets.GCP_AR_READER_SA_KEY }} project_id: ${{ secrets.GCP_PROJECT_ID }} @@ -121,14 +125,14 @@ jobs: export_environment_variables: true - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v2 + uses: google-github-actions/setup-gcloud@e427ad8a34f8676edf47cf7d7925499adf3eb74f # v2 - name: Authenticate Artifact Repository run: gcloud auth configure-docker us-west1-docker.pkg.dev --quiet - name: Install docker on macos if: ${{ matrix.os == 'macos' }} - uses: docker-practice/actions-setup-docker@v1 + uses: docker-practice/actions-setup-docker@fd7ecdac7caf8e2c541a48c9bcc280aae59a8461 # v1 with: docker_channel: stable docker_buildx: false @@ -162,7 +166,7 @@ jobs: MATRIX_LOOKER: ${{ matrix.looker }} - name: Install Go ${{ matrix.go-version }} - uses: actions/setup-go@v5 + uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 with: go-version: 1.23.0 check-latest: true @@ -182,7 +186,7 @@ jobs: - name: Upload Go unit test results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: ${{ env.JUNIT_ARTIFACT_DIR }}-${{ matrix.os }}-${{ matrix.looker }} path: ${{ env.JUNIT_OUTPUT_DIR }} @@ -198,12 +202,12 @@ jobs: steps: - name: Download Artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: path: artifacts - name: Publish All Test Results - uses: EnricoMi/publish-unit-test-result-action@v2 + uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 with: # Cosmetic issue with `check_name` being associated to the wrong # workflow: https://github.com/EnricoMi/publish-unit-test-result-action/issues/12 diff --git a/.github/workflows/hackathon-ci.yml b/.github/workflows/hackathon-ci.yml index ebc92896b..ad49735cc 100644 --- a/.github/workflows/hackathon-ci.yml +++ b/.github/workflows/hackathon-ci.yml @@ -42,15 +42,17 @@ jobs: steps: - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Install Node ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: ${{ matrix.node-version }} diff --git a/.github/workflows/kotlin-ci.yml b/.github/workflows/kotlin-ci.yml index 228c2f7c3..b4a1d6da4 100644 --- a/.github/workflows/kotlin-ci.yml +++ b/.github/workflows/kotlin-ci.yml @@ -31,9 +31,11 @@ jobs: contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Set up JDK 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@cf277c60eb25467037889841efdb72551f06f6c3 # v4 with: java-version: '17' distribution: 'temurin' @@ -50,9 +52,11 @@ jobs: contents: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Set up JDK 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@cf277c60eb25467037889841efdb72551f06f6c3 # v4 with: java-version: '17' distribution: 'temurin' diff --git a/.github/workflows/lerna-publish.yml b/.github/workflows/lerna-publish.yml index 3f079cbfc..16ae38310 100644 --- a/.github/workflows/lerna-publish.yml +++ b/.github/workflows/lerna-publish.yml @@ -25,13 +25,13 @@ jobs: LOOKERSDK_CLIENT_SECRET: ${{ secrets.LOOKERSDK_CLIENT_SECRET }} steps: - name: Clone repository - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: persist-credentials: false ref: ${{ github.event.release.tag_name || github.event.inputs.ref }} - name: Authenticate to Google Cloud - uses: google-github-actions/auth@v2 + uses: google-github-actions/auth@c200f3691d83b41bf9bbd8638997a462592937ed # v2 with: credentials_json: ${{ secrets.GCP_AR_READER_SA_KEY }} project_id: ${{ secrets.GCP_PROJECT_ID }} @@ -39,7 +39,7 @@ jobs: export_environment_variables: true - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v2 + uses: google-github-actions/setup-gcloud@e427ad8a34f8676edf47cf7d7925499adf3eb74f # v2 - name: Authenticate Artifact Repository run: gcloud auth configure-docker us-west1-docker.pkg.dev --quiet @@ -50,7 +50,7 @@ jobs: docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} docker logs -f looker-sdk-codegen-ci --until=30s & - - uses: actions/setup-node@v4 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 22.x registry-url: https://wombat-dressing-room.appspot.com diff --git a/.github/workflows/p3-issue-label.yml b/.github/workflows/p3-issue-label.yml index 4c9f825f5..ea883cb63 100644 --- a/.github/workflows/p3-issue-label.yml +++ b/.github/workflows/p3-issue-label.yml @@ -10,7 +10,7 @@ jobs: permissions: issues: write steps: - - uses: actions/github-script@v6 + - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6 with: script: | github.rest.issues.addLabels({ diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index 43fe9312f..ec966e286 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -37,11 +37,13 @@ jobs: steps: - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: '3.14' - run: pip install -e . @@ -81,10 +83,12 @@ jobs: steps: - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: ${{ matrix.python-version }} @@ -98,7 +102,7 @@ jobs: - name: Upload pytest test results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: python-test-results-${{ matrix.os }}-${{ matrix.python-version }} path: python/results/ @@ -148,15 +152,17 @@ jobs: # looker: '7_20' steps: - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Set up Python 3.14 - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: '3.14' - name: Authenticate to Google Cloud - uses: google-github-actions/auth@v2 + uses: google-github-actions/auth@c200f3691d83b41bf9bbd8638997a462592937ed # v2 with: credentials_json: ${{ secrets.GCP_AR_READER_SA_KEY }} project_id: ${{ secrets.GCP_PROJECT_ID }} @@ -164,14 +170,14 @@ jobs: export_environment_variables: true - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v2 + uses: google-github-actions/setup-gcloud@e427ad8a34f8676edf47cf7d7925499adf3eb74f # v2 - name: Authenticate Artifact Repository run: gcloud auth configure-docker us-west1-docker.pkg.dev --quiet - name: Install docker on macos if: ${{ matrix.os == 'macos' }} - uses: docker-practice/actions-setup-docker@v1 + uses: docker-practice/actions-setup-docker@fd7ecdac7caf8e2c541a48c9bcc280aae59a8461 # v1 with: docker_channel: stable docker_buildx: false @@ -218,7 +224,7 @@ jobs: - name: Upload pytest test results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: python-test-results-${{ matrix.os }}-${{ matrix.looker }} path: python/results/ @@ -232,8 +238,10 @@ jobs: working-directory: python/ steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: '3.14' - name: Twine upload check @@ -253,7 +261,7 @@ jobs: steps: - name: Download Artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: path: artifacts @@ -284,7 +292,7 @@ jobs: - name: Publish Unit Test Results if: steps.check-results-exist.outcome == 'success' - uses: EnricoMi/publish-unit-test-result-action@v2 + uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 with: # Cosmetic issue with `check_name` being associated to the wrong # workflow: https://github.com/EnricoMi/publish-unit-test-result-action/issues/12 diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 4b76116ed..1ea224895 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -23,11 +23,12 @@ jobs: !github.event.release.prerelease) runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: ref: ${{ github.event.release.tag_name || github.event.inputs.ref }} + persist-credentials: false - - uses: actions/setup-python@v5 + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: '3.10' @@ -36,7 +37,7 @@ jobs: pip install wheel python setup.py sdist bdist_wheel - - uses: pypa/gh-action-pypi-publish@v1.4.1 + - uses: pypa/gh-action-pypi-publish@54b39fb9371c0b3a6f9f14bb8a67394defc7a806 # v1.4.1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/release-metrics.yml b/.github/workflows/release-metrics.yml index 0ac19c49f..511871f70 100644 --- a/.github/workflows/release-metrics.yml +++ b/.github/workflows/release-metrics.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Authenticate to Google Cloud - uses: google-github-actions/auth@v2 + uses: google-github-actions/auth@c200f3691d83b41bf9bbd8638997a462592937ed # v2 with: credentials_json: ${{ secrets.GCP_BQ_METRICS_KEY }} project_id: ${{ secrets.GCP_PROJECT_ID }} @@ -15,7 +15,7 @@ jobs: export_environment_variables: true - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v2 + uses: google-github-actions/setup-gcloud@e427ad8a34f8676edf47cf7d7925499adf3eb74f # v2 - run: 'jq -c ''.release | { diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 82db65d22..0a0efb55a 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -8,7 +8,7 @@ jobs: release-please: runs-on: ubuntu-latest steps: - - uses: google-github-actions/release-please-action@v3.7.8 + - uses: google-github-actions/release-please-action@c078ea33917ab8cfa5300e48f4b7e6b16606aede # v3.7.8 with: command: manifest monorepo-tags: true diff --git a/.github/workflows/required-checks-hack-ci.yml b/.github/workflows/required-checks-hack-ci.yml index bcb753933..b4e6eb119 100644 --- a/.github/workflows/required-checks-hack-ci.yml +++ b/.github/workflows/required-checks-hack-ci.yml @@ -37,9 +37,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - - uses: tony84727/changed-file-filter@v0.2.3 + - uses: tony84727/changed-file-filter@20844f4c78ebd318b4e17fae8078b0d04547b13a # v0.2.3 id: filter with: filters: | diff --git a/.github/workflows/resources-ci.yml b/.github/workflows/resources-ci.yml index b33a2810c..1839a0415 100644 --- a/.github/workflows/resources-ci.yml +++ b/.github/workflows/resources-ci.yml @@ -31,15 +31,17 @@ jobs: steps: - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Install Node - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 22.x diff --git a/.github/workflows/triage-issue-label.yml b/.github/workflows/triage-issue-label.yml index a4a69088b..34d8960f1 100644 --- a/.github/workflows/triage-issue-label.yml +++ b/.github/workflows/triage-issue-label.yml @@ -9,7 +9,7 @@ jobs: permissions: issues: write steps: - - uses: actions/github-script@v6 + - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6 with: script: | github.rest.issues.addLabels({ diff --git a/.github/workflows/tssdk-ci.yml b/.github/workflows/tssdk-ci.yml index d55d31ff7..4e4550d23 100644 --- a/.github/workflows/tssdk-ci.yml +++ b/.github/workflows/tssdk-ci.yml @@ -52,15 +52,17 @@ jobs: steps: - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.12.1 + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 with: access_token: ${{ secrets.GITHUB_TOKEN }} - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Install Node ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: ${{ matrix.node-version }} @@ -109,7 +111,7 @@ jobs: - name: Upload ts unit test results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: tssdk-test-results-${{ matrix.os }}-${{ matrix.node-version }} path: results/tssdk @@ -132,10 +134,12 @@ jobs: steps: - name: Repo Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Authenticate to Google Cloud - uses: google-github-actions/auth@v2 + uses: google-github-actions/auth@c200f3691d83b41bf9bbd8638997a462592937ed # v2 with: credentials_json: ${{ secrets.GCP_AR_READER_SA_KEY }} project_id: ${{ secrets.GCP_PROJECT_ID }} @@ -143,7 +147,7 @@ jobs: export_environment_variables: true - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@v2 + uses: google-github-actions/setup-gcloud@e427ad8a34f8676edf47cf7d7925499adf3eb74f # v2 - name: Authenticate Artifact Repository run: gcloud auth configure-docker us-west1-docker.pkg.dev --quiet @@ -158,7 +162,7 @@ jobs: docker logs -f looker-sdk-codegen-ci --until=30s & - name: Install Node ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: ${{ matrix.node-version }} @@ -176,7 +180,7 @@ jobs: - name: Upload integration test results if: ${{ always() }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: tssdk-test-results-${{ matrix.os }}-${{ matrix.node-version }}-${{ matrix.looker }} path: results/tssdk @@ -192,12 +196,12 @@ jobs: steps: - name: Download Artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: path: artifacts - name: Publish Unit Test Results - uses: EnricoMi/publish-unit-test-result-action@v2 + uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 with: # Cosmetic issue with `check_name` being associated to the wrong # workflow: https://github.com/EnricoMi/publish-unit-test-result-action/issues/12 diff --git a/csharp/sdk/4.0/methods.cs b/csharp/sdk/4.0/methods.cs index 17e467068..3d61788fb 100644 --- a/csharp/sdk/4.0/methods.cs +++ b/csharp/sdk/4.0/methods.cs @@ -4456,15 +4456,15 @@ public async Task> delete_dashboard( /// /// Returns the image content for a dashboard element. /// - /// GET /dashboards/{dashboard_id}/images/{image_slug} -> binary + /// GET /dashboards/{dashboard_id}/images/{image_slug} -> string /// /// **Note**: Binary content may be returned by this method. /// /// - /// binary Image content (image/svg+xml) - /// binary Image content (image/png) - /// binary Image content (image/jpeg) - /// binary Image content (image/gif) + /// string Image content (image/svg+xml) + /// string Image content (image/png) + /// string Image content (image/jpeg) + /// string Image content (image/gif) /// /// /// Id of dashboard diff --git a/go/sdk/v4/methods.go b/go/sdk/v4/methods.go index 1deea5bcb..a2f02ac7b 100644 --- a/go/sdk/v4/methods.go +++ b/go/sdk/v4/methods.go @@ -3560,16 +3560,16 @@ func (l *LookerSDK) DeleteDashboard( // // Returns the image content for a dashboard element. // -// GET /dashboards/{dashboard_id}/images/{image_slug} -> binary +// GET /dashboards/{dashboard_id}/images/{image_slug} -> string // // **Note**: Binary content may be returned by this method. func (l *LookerSDK) GetDashboardImage( dashboardId string, imageSlug string, - options *rtl.ApiSettings) (binary, error) { + options *rtl.ApiSettings) (string, error) { dashboardId = url.PathEscape(dashboardId) imageSlug = url.PathEscape(imageSlug) - var result binary + var result string err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/dashboards/%v/images/%v", dashboardId, imageSlug), nil, nil, options) return result, err 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 f0bfd28d7..345fe646a 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/methods.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/methods.kt @@ -28,6 +28,7 @@ * 529 API methods */ + // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 package com.looker.sdk @@ -36,10 +37,11 @@ import java.util.* class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { - val stream by lazy { LookerSDKStream(this.authSession) } + val stream by lazy { LookerSDKStream(this.authSession) } //region Alert: Alert + /** * Follow an alert. * @@ -48,12 +50,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /alerts/{alert_id}/follow -> Void */ fun follow_alert( - alert_id: String, - ): SDKResponse { + alert_id: String + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) return this.post("/alerts/${path_alert_id}/follow", mapOf()) } + /** * Unfollow an alert. * @@ -62,12 +65,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /alerts/{alert_id}/follow -> Void */ fun unfollow_alert( - alert_id: String, - ): SDKResponse { + alert_id: String + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) return this.delete("/alerts/${path_alert_id}/follow", mapOf()) } + /** * ### Search Alerts * @@ -94,25 +98,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { condition_met: Boolean? = null, last_run_start: String? = null, last_run_end: String? = null, - all_owners: Boolean? = null, - ): SDKResponse { - return this.get>( - "/alerts/search", - mapOf( - "limit" to limit, - "offset" to offset, - "group_by" to group_by, - "fields" to fields, - "disabled" to disabled, - "frequency" to frequency, - "condition_met" to condition_met, - "last_run_start" to last_run_start, - "last_run_end" to last_run_end, - "all_owners" to all_owners, - ), - ) + all_owners: Boolean? = null + ) : SDKResponse { + return this.get>("/alerts/search", + mapOf("limit" to limit, + "offset" to offset, + "group_by" to group_by, + "fields" to fields, + "disabled" to disabled, + "frequency" to frequency, + "condition_met" to condition_met, + "last_run_start" to last_run_start, + "last_run_end" to last_run_end, + "all_owners" to all_owners)) } + /** * ### Get an alert by a given alert ID * @@ -121,12 +122,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /alerts/{alert_id} -> Alert */ fun get_alert( - alert_id: String, - ): SDKResponse { + alert_id: String + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) return this.get("/alerts/${path_alert_id}", mapOf()) } + /** * ### Update an alert * # Required fields: `owner_id`, `field`, `destinations`, `comparison_type`, `threshold`, `cron` @@ -139,12 +141,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_alert( alert_id: String, - body: WriteAlert, - ): SDKResponse { + body: WriteAlert + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) return this.put("/alerts/${path_alert_id}", mapOf(), body) } + /** * ### Update select alert fields * # Available fields: `owner_id`, `is_disabled`, `disabled_reason`, `is_public`, `threshold`, `enhancements` @@ -157,12 +160,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_alert_field( alert_id: String, - body: AlertPatch, - ): SDKResponse { + body: AlertPatch + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) return this.patch("/alerts/${path_alert_id}", mapOf(), body) } + /** * ### Delete an alert by a given alert ID * @@ -171,12 +175,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /alerts/{alert_id} -> Void */ fun delete_alert( - alert_id: String, - ): SDKResponse { + alert_id: String + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) return this.delete("/alerts/${path_alert_id}", mapOf()) } + /** * ### Create a new alert and return details of the newly created object * @@ -219,11 +224,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /alerts -> Alert */ fun create_alert( - body: WriteAlert, - ): SDKResponse { + body: WriteAlert + ) : SDKResponse { return this.post("/alerts", mapOf(), body) } + /** * ### Enqueue an Alert by ID * @@ -234,15 +240,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun enqueue_alert( alert_id: String, - force: Boolean? = null, - ): SDKResponse { + force: Boolean? = null + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.post( - "/alerts/${path_alert_id}/enqueue", - mapOf("force" to force), - ) + return this.post("/alerts/${path_alert_id}/enqueue", + mapOf("force" to force)) } + /** * # Alert Notifications. * The endpoint returns all the alert notifications received by the user on email in the past 7 days. It also returns whether the notifications have been read by the user. @@ -254,17 +259,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun alert_notifications( limit: Long? = null, - offset: Long? = null, - ): SDKResponse { - return this.get>( - "/alert_notifications", - mapOf( - "limit" to limit, - "offset" to offset, - ), - ) + offset: Long? = null + ) : SDKResponse { + return this.get>("/alert_notifications", + mapOf("limit" to limit, + "offset" to offset)) } + /** * # Reads a Notification * The endpoint marks a given alert notification as read by the user, in case it wasn't already read. The AlertNotification model is updated for this purpose. It returns the notification as a response. @@ -274,8 +276,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /alert_notifications/{alert_notification_id} -> AlertNotifications */ fun read_alert_notification( - alert_notification_id: String, - ): SDKResponse { + alert_notification_id: String + ) : SDKResponse { val path_alert_notification_id = encodeParam(alert_notification_id) return this.patch("/alert_notifications/${path_alert_notification_id}", mapOf()) } @@ -284,6 +286,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region ApiAuth: API Authentication + /** * ### Present client credentials to obtain an authorization token * @@ -321,20 +324,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun login( client_id: String? = null, - client_secret: String? = null, - ): SDKResponse { - return this.post( - "/login", - mapOf(), - encodeValues( - mapOf( - "client_id" to client_id, - "client_secret" to client_secret, - ), - ), - ) + client_secret: String? = null + ) : SDKResponse { + return this.post("/login", mapOf(), encodeValues( + mapOf("client_id" to client_id, + "client_secret" to client_secret))) } + /** * ### Create an access token that runs as a given user. * @@ -363,18 +360,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /login/{user_id} -> AccessToken */ fun login_user( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.post("/login/${path_user_id}", mapOf()) } + /** * ### Logout of the API and invalidate the current access token. * * DELETE /logout -> String */ - fun logout(): SDKResponse { + fun logout( + + ) : SDKResponse { return this.delete("/logout", mapOf()) } @@ -382,6 +382,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Artifact: Artifact Storage + /** * Get the maximum configured size of the entire artifact store, and the currently used storage in bytes. * @@ -392,14 +393,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /artifact/usage -> ArtifactUsage */ @JvmOverloads fun artifact_usage( - fields: String? = null, - ): SDKResponse { - return this.get( - "/artifact/usage", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/artifact/usage", + mapOf("fields" to fields)) } + /** * Get all artifact namespaces and the count of artifacts in each namespace * @@ -414,18 +414,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun artifact_namespaces( fields: String? = null, limit: Long? = null, - offset: Long? = null, - ): SDKResponse { - return this.get>( - "/artifact/namespaces", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - ), - ) + offset: Long? = null + ) : SDKResponse { + return this.get>("/artifact/namespaces", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset)) } + /** * ### Return the value of an artifact * @@ -440,15 +437,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun artifact_value( namespace: String, - key: String? = null, - ): SDKResponse { + key: String? = null + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.get( - "/artifact/${path_namespace}/value", - mapOf("key" to key), - ) + return this.get("/artifact/${path_namespace}/value", + mapOf("key" to key)) } + /** * Remove *all* artifacts from a namespace. Purged artifacts are permanently deleted * @@ -459,12 +455,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /artifact/{namespace}/purge -> Void */ fun purge_artifacts( - namespace: String, - ): SDKResponse { + namespace: String + ) : SDKResponse { val path_namespace = encodeParam(namespace) return this.delete("/artifact/${path_namespace}/purge", mapOf()) } + /** * ### Search all key/value pairs in a namespace for matching criteria. * @@ -505,24 +502,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { max_size: Long? = null, limit: Long? = null, offset: Long? = null, - tally: Boolean? = null, - ): SDKResponse { + tally: Boolean? = null + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.get>( - "/artifact/${path_namespace}/search", - mapOf( - "fields" to fields, - "key" to key, - "user_ids" to user_ids, - "min_size" to min_size, - "max_size" to max_size, - "limit" to limit, - "offset" to offset, - "tally" to tally, - ), - ) + return this.get>("/artifact/${path_namespace}/search", + mapOf("fields" to fields, + "key" to key, + "user_ids" to user_ids, + "min_size" to min_size, + "max_size" to max_size, + "limit" to limit, + "offset" to offset, + "tally" to tally)) } + /** * ### Get one or more artifacts * @@ -545,21 +539,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, limit: Long? = null, offset: Long? = null, - tally: Boolean? = null, - ): SDKResponse { + tally: Boolean? = null + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.get>( - "/artifact/${path_namespace}", - mapOf( - "key" to key, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "tally" to tally, - ), - ) + return this.get>("/artifact/${path_namespace}", + mapOf("key" to key, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "tally" to tally)) } + /** * ### Delete one or more artifacts * @@ -574,15 +565,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_artifact( namespace: String, - key: String, - ): SDKResponse { + key: String + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.delete( - "/artifact/${path_namespace}", - mapOf("key" to key), - ) + return this.delete("/artifact/${path_namespace}", + mapOf("key" to key)) } + /** * ### Create or update one or more artifacts * @@ -620,20 +610,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_artifacts( namespace: String, body: Array, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.put>( - "/artifacts/${path_namespace}", - mapOf("fields" to fields), - body, - ) + return this.put>("/artifacts/${path_namespace}", + mapOf("fields" to fields), body) } //endregion Artifact: Artifact Storage //region Auth: Manage User Authentication Configuration + /** * ### Create an embed secret using the specified information. * @@ -646,11 +634,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /embed_config/secrets -> EmbedSecret */ @JvmOverloads fun create_embed_secret( - body: WriteEmbedSecret? = null, - ): SDKResponse { + body: WriteEmbedSecret? = null + ) : SDKResponse { return this.post("/embed_config/secrets", mapOf(), body) } + /** * ### Delete an embed secret. * @@ -661,12 +650,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /embed_config/secrets/{embed_secret_id} -> String */ fun delete_embed_secret( - embed_secret_id: String, - ): SDKResponse { + embed_secret_id: String + ) : SDKResponse { val path_embed_secret_id = encodeParam(embed_secret_id) return this.delete("/embed_config/secrets/${path_embed_secret_id}", mapOf()) } + /** * ### Create Signed Embed URL * @@ -718,11 +708,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/sso_url -> EmbedUrlResponse */ fun create_sso_embed_url( - body: EmbedSsoParams, - ): SDKResponse { + body: EmbedSsoParams + ) : SDKResponse { return this.post("/embed/sso_url", mapOf(), body) } + /** * ### Create an Embed URL * @@ -755,11 +746,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/token_url/me -> EmbedUrlResponse */ fun create_embed_url_as_me( - body: EmbedParams, - ): SDKResponse { + body: EmbedParams + ) : SDKResponse { return this.post("/embed/token_url/me", mapOf(), body) } + /** * ### Validate a Signed Embed URL * @@ -768,14 +760,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /embed/sso/validate -> EmbedUrlResponse */ @JvmOverloads fun validate_embed_url( - url: String? = null, - ): SDKResponse { - return this.get( - "/embed/sso/validate", - mapOf("url" to url), - ) + url: String? = null + ) : SDKResponse { + return this.get("/embed/sso/validate", + mapOf("url" to url)) } + /** * ### Acquire a cookieless embed session. * @@ -815,11 +806,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/cookieless_session/acquire -> EmbedCookielessSessionAcquireResponse */ fun acquire_embed_cookieless_session( - body: EmbedCookielessSessionAcquire, - ): SDKResponse { + body: EmbedCookielessSessionAcquire + ) : SDKResponse { return this.post("/embed/cookieless_session/acquire", mapOf(), body) } + /** * ### Delete cookieless embed session * @@ -834,12 +826,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /embed/cookieless_session/{session_reference_token} -> String */ fun delete_embed_cookieless_session( - session_reference_token: String, - ): SDKResponse { + session_reference_token: String + ) : SDKResponse { val path_session_reference_token = encodeParam(session_reference_token) return this.delete("/embed/cookieless_session/${path_session_reference_token}", mapOf()) } + /** * ### Generate api and navigation tokens for a cookieless embed session * @@ -863,11 +856,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /embed/cookieless_session/generate_tokens -> EmbedCookielessSessionGenerateTokensResponse */ fun generate_tokens_for_cookieless_session( - body: EmbedCookielessSessionGenerateTokens, - ): SDKResponse { + body: EmbedCookielessSessionGenerateTokens + ) : SDKResponse { return this.put("/embed/cookieless_session/generate_tokens", mapOf(), body) } + /** * ### Get the LDAP configuration. * @@ -890,10 +884,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /ldap_config -> LDAPConfig */ - fun ldap_config(): SDKResponse { + fun ldap_config( + + ) : SDKResponse { return this.get("/ldap_config", mapOf()) } + /** * ### Update the LDAP configuration. * @@ -914,11 +911,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /ldap_config -> LDAPConfig */ fun update_ldap_config( - body: WriteLDAPConfig, - ): SDKResponse { + body: WriteLDAPConfig + ) : SDKResponse { return this.patch("/ldap_config", mapOf(), body) } + /** * ### Test the connection settings for an LDAP configuration. * @@ -946,11 +944,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_connection -> LDAPConfigTestResult */ fun test_ldap_config_connection( - body: WriteLDAPConfig, - ): SDKResponse { + body: WriteLDAPConfig + ) : SDKResponse { return this.put("/ldap_config/test_connection", mapOf(), body) } + /** * ### Test the connection authentication settings for an LDAP configuration. * @@ -980,11 +979,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_auth -> LDAPConfigTestResult */ fun test_ldap_config_auth( - body: WriteLDAPConfig, - ): SDKResponse { + body: WriteLDAPConfig + ) : SDKResponse { return this.put("/ldap_config/test_auth", mapOf(), body) } + /** * ### Test the user authentication settings for an LDAP configuration without authenticating the user. * @@ -1003,11 +1003,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_user_info -> LDAPConfigTestResult */ fun test_ldap_config_user_info( - body: WriteLDAPConfig, - ): SDKResponse { + body: WriteLDAPConfig + ) : SDKResponse { return this.put("/ldap_config/test_user_info", mapOf(), body) } + /** * ### Test the user authentication settings for an LDAP configuration. * @@ -1026,11 +1027,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_user_auth -> LDAPConfigTestResult */ fun test_ldap_config_user_auth( - body: WriteLDAPConfig, - ): SDKResponse { + body: WriteLDAPConfig + ) : SDKResponse { return this.put("/ldap_config/test_user_auth", mapOf(), body) } + /** * ### Registers a mobile device. * # Required fields: [:device_token, :device_type] @@ -1040,11 +1042,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /mobile/device -> MobileToken */ fun register_mobile_device( - body: WriteMobileToken, - ): SDKResponse { + body: WriteMobileToken + ) : SDKResponse { return this.post("/mobile/device", mapOf(), body) } + /** * ### Updates the mobile device registration * @@ -1053,12 +1056,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /mobile/device/{device_id} -> MobileToken */ fun update_mobile_device_registration( - device_id: String, - ): SDKResponse { + device_id: String + ) : SDKResponse { val path_device_id = encodeParam(device_id) return this.patch("/mobile/device/${path_device_id}", mapOf()) } + /** * ### Deregister a mobile device. * @@ -1067,12 +1071,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /mobile/device/{device_id} -> Void */ fun deregister_mobile_device( - device_id: String, - ): SDKResponse { + device_id: String + ) : SDKResponse { val path_device_id = encodeParam(device_id) return this.delete("/mobile/device/${path_device_id}", mapOf()) } + /** * ### List All OAuth Client Apps * @@ -1087,14 +1092,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /oauth_client_apps -> Array */ @JvmOverloads fun all_oauth_client_apps( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/oauth_client_apps", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/oauth_client_apps", + mapOf("fields" to fields)) } + /** * ### Get Oauth Client App * @@ -1107,15 +1111,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun oauth_client_app( client_guid: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.get( - "/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), - ) + return this.get("/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields)) } + /** * ### Register an OAuth2 Client App * @@ -1133,16 +1136,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun register_oauth_client_app( client_guid: String, body: WriteOauthClientApp, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.post( - "/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), - body, - ) + return this.post("/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), body) } + /** * ### Update OAuth2 Client App Details * @@ -1157,16 +1158,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_oauth_client_app( client_guid: String, body: WriteOauthClientApp, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.patch( - "/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), - body, - ) + return this.patch("/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), body) } + /** * ### Delete OAuth Client App * @@ -1183,12 +1182,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oauth_client_apps/{client_guid} -> String */ fun delete_oauth_client_app( - client_guid: String, - ): SDKResponse { + client_guid: String + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) return this.delete("/oauth_client_apps/${path_client_guid}", mapOf()) } + /** * ### Invalidate All Issued Tokens * @@ -1200,12 +1200,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oauth_client_apps/{client_guid}/tokens -> String */ fun invalidate_tokens( - client_guid: String, - ): SDKResponse { + client_guid: String + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) return this.delete("/oauth_client_apps/${path_client_guid}/tokens", mapOf()) } + /** * ### Activate an app for a user * @@ -1224,16 +1225,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun activate_app_user( client_guid: String, user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) val path_user_id = encodeParam(user_id) - return this.post( - "/oauth_client_apps/${path_client_guid}/users/${path_user_id}", - mapOf("fields" to fields), - ) + return this.post("/oauth_client_apps/${path_client_guid}/users/${path_user_id}", + mapOf("fields" to fields)) } + /** * ### Deactivate an app for a user * @@ -1255,16 +1255,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun deactivate_app_user( client_guid: String, user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) val path_user_id = encodeParam(user_id) - return this.delete( - "/oauth_client_apps/${path_client_guid}/users/${path_user_id}", - mapOf("fields" to fields), - ) + return this.delete("/oauth_client_apps/${path_client_guid}/users/${path_user_id}", + mapOf("fields" to fields)) } + /** * ### Get the OIDC configuration. * @@ -1283,10 +1282,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /oidc_config -> OIDCConfig */ - fun oidc_config(): SDKResponse { + fun oidc_config( + + ) : SDKResponse { return this.get("/oidc_config", mapOf()) } + /** * ### Update the OIDC configuration. * @@ -1305,11 +1307,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /oidc_config -> OIDCConfig */ fun update_oidc_config( - body: WriteOIDCConfig, - ): SDKResponse { + body: WriteOIDCConfig + ) : SDKResponse { return this.patch("/oidc_config", mapOf(), body) } + /** * ### Get a OIDC test configuration by test_slug. * @@ -1320,12 +1323,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /oidc_test_configs/{test_slug} -> OIDCConfig */ fun oidc_test_config( - test_slug: String, - ): SDKResponse { + test_slug: String + ) : SDKResponse { val path_test_slug = encodeParam(test_slug) return this.get("/oidc_test_configs/${path_test_slug}", mapOf()) } + /** * ### Delete a OIDC test configuration. * @@ -1336,12 +1340,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oidc_test_configs/{test_slug} -> String */ fun delete_oidc_test_config( - test_slug: String, - ): SDKResponse { + test_slug: String + ) : SDKResponse { val path_test_slug = encodeParam(test_slug) return this.delete("/oidc_test_configs/${path_test_slug}", mapOf()) } + /** * ### Create a OIDC test configuration. * @@ -1352,11 +1357,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /oidc_test_configs -> OIDCConfig */ fun create_oidc_test_config( - body: WriteOIDCConfig, - ): SDKResponse { + body: WriteOIDCConfig + ) : SDKResponse { return this.post("/oidc_test_configs", mapOf(), body) } + /** * ### Get password config. * @@ -1364,10 +1370,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /password_config -> PasswordConfig */ - fun password_config(): SDKResponse { + fun password_config( + + ) : SDKResponse { return this.get("/password_config", mapOf()) } + /** * ### Update password config. * @@ -1378,11 +1387,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /password_config -> PasswordConfig */ fun update_password_config( - body: WritePasswordConfig, - ): SDKResponse { + body: WritePasswordConfig + ) : SDKResponse { return this.patch("/password_config", mapOf(), body) } + /** * ### Force all credentials_email users to reset their login passwords upon their next login. * @@ -1390,10 +1400,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * PUT /password_config/force_password_reset_at_next_login_for_all_users -> String */ - fun force_password_reset_at_next_login_for_all_users(): SDKResponse { + fun force_password_reset_at_next_login_for_all_users( + + ) : SDKResponse { return this.put("/password_config/force_password_reset_at_next_login_for_all_users", mapOf()) } + /** * ### Get the SAML configuration. * @@ -1412,10 +1425,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /saml_config -> SamlConfig */ - fun saml_config(): SDKResponse { + fun saml_config( + + ) : SDKResponse { return this.get("/saml_config", mapOf()) } + /** * ### Update the SAML configuration. * @@ -1434,11 +1450,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /saml_config -> SamlConfig */ fun update_saml_config( - body: WriteSamlConfig, - ): SDKResponse { + body: WriteSamlConfig + ) : SDKResponse { return this.patch("/saml_config", mapOf(), body) } + /** * ### Get a SAML test configuration by test_slug. * @@ -1449,12 +1466,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /saml_test_configs/{test_slug} -> SamlConfig */ fun saml_test_config( - test_slug: String, - ): SDKResponse { + test_slug: String + ) : SDKResponse { val path_test_slug = encodeParam(test_slug) return this.get("/saml_test_configs/${path_test_slug}", mapOf()) } + /** * ### Delete a SAML test configuration. * @@ -1465,12 +1483,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /saml_test_configs/{test_slug} -> String */ fun delete_saml_test_config( - test_slug: String, - ): SDKResponse { + test_slug: String + ) : SDKResponse { val path_test_slug = encodeParam(test_slug) return this.delete("/saml_test_configs/${path_test_slug}", mapOf()) } + /** * ### Create a SAML test configuration. * @@ -1481,11 +1500,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /saml_test_configs -> SamlConfig */ fun create_saml_test_config( - body: WriteSamlConfig, - ): SDKResponse { + body: WriteSamlConfig + ) : SDKResponse { return this.post("/saml_test_configs", mapOf(), body) } + /** * ### Parse the given xml as a SAML IdP metadata document and return the result. * @@ -1496,11 +1516,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /parse_saml_idp_metadata -> SamlMetadataParseResult */ fun parse_saml_idp_metadata( - body: String, - ): SDKResponse { + body: String + ) : SDKResponse { return this.post("/parse_saml_idp_metadata", mapOf(), body) } + /** * ### Fetch the given url and parse it as a SAML IdP metadata document and return the result. * Note that this requires that the url be public or at least at a location where the Looker instance @@ -1513,20 +1534,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /fetch_and_parse_saml_idp_metadata -> SamlMetadataParseResult */ fun fetch_and_parse_saml_idp_metadata( - body: String, - ): SDKResponse { + body: String + ) : SDKResponse { return this.post("/fetch_and_parse_saml_idp_metadata", mapOf(), body) } + /** * ### Get session config. * * GET /session_config -> SessionConfig */ - fun session_config(): SDKResponse { + fun session_config( + + ) : SDKResponse { return this.get("/session_config", mapOf()) } + /** * ### Update session config. * @@ -1535,11 +1560,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /session_config -> SessionConfig */ fun update_session_config( - body: WriteSessionConfig, - ): SDKResponse { + body: WriteSessionConfig + ) : SDKResponse { return this.patch("/session_config", mapOf(), body) } + /** * ### Get Support Access Allowlist Users * @@ -1552,14 +1578,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /support_access/allowlist -> Array */ @JvmOverloads fun get_support_access_allowlist_entries( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/support_access/allowlist", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/support_access/allowlist", + mapOf("fields" to fields)) } + /** * ### Add Support Access Allowlist Users * @@ -1572,11 +1597,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /support_access/allowlist -> Array */ fun add_support_access_allowlist_entries( - body: SupportAccessAddEntries, - ): SDKResponse { + body: SupportAccessAddEntries + ) : SDKResponse { return this.post>("/support_access/allowlist", mapOf(), body) } + /** * ### Delete Support Access Allowlist User * @@ -1589,12 +1615,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /support_access/allowlist/{entry_id} -> String */ fun delete_support_access_allowlist_entry( - entry_id: String, - ): SDKResponse { + entry_id: String + ) : SDKResponse { val path_entry_id = encodeParam(entry_id) return this.delete("/support_access/allowlist/${path_entry_id}", mapOf()) } + /** * ### Enable Support Access * @@ -1607,11 +1634,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /support_access/enable -> SupportAccessStatus */ fun enable_support_access( - body: SupportAccessEnable, - ): SDKResponse { + body: SupportAccessEnable + ) : SDKResponse { return this.put("/support_access/enable", mapOf(), body) } + /** * ### Disable Support Access * @@ -1621,10 +1649,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * PUT /support_access/disable -> SupportAccessStatus */ - fun disable_support_access(): SDKResponse { + fun disable_support_access( + + ) : SDKResponse { return this.put("/support_access/disable", mapOf()) } + /** * ### Support Access Status * @@ -1634,10 +1665,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /support_access/status -> SupportAccessStatus */ - fun support_access_status(): SDKResponse { + fun support_access_status( + + ) : SDKResponse { return this.get("/support_access/status", mapOf()) } + /** * ### Get currently locked-out users. * @@ -1646,14 +1680,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /user_login_lockouts -> Array */ @JvmOverloads fun all_user_login_lockouts( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/user_login_lockouts", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/user_login_lockouts", + mapOf("fields" to fields)) } + /** * ### Search currently locked-out users. * @@ -1682,26 +1715,23 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { full_name: String? = null, email: String? = null, remote_id: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get>( - "/user_login_lockouts/search", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "auth_type" to auth_type, - "full_name" to full_name, - "email" to email, - "remote_id" to remote_id, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get>("/user_login_lockouts/search", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "auth_type" to auth_type, + "full_name" to full_name, + "email" to email, + "remote_id" to remote_id, + "filter_or" to filter_or)) } + /** * ### Removes login lockout for the associated user. * @@ -1710,8 +1740,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_login_lockout/{key} -> String */ fun delete_user_login_lockout( - key: String, - ): SDKResponse { + key: String + ) : SDKResponse { val path_key = encodeParam(key) return this.delete("/user_login_lockout/${path_key}", mapOf()) } @@ -1720,6 +1750,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Board: Manage Boards + /** * ### Get information about all boards. * @@ -1728,14 +1759,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /boards -> Array */ @JvmOverloads fun all_boards( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/boards", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/boards", + mapOf("fields" to fields)) } + /** * ### Create a new board. * @@ -1746,15 +1776,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board( body: WriteBoard, - fields: String? = null, - ): SDKResponse { - return this.post( - "/boards", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/boards", + mapOf("fields" to fields), body) } + /** * ### Search Boards * @@ -1810,29 +1838,26 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, limit: Long? = null, filter_or: Boolean? = null, - permission: String? = null, - ): SDKResponse { - return this.get>( - "/boards/search", - mapOf( - "title" to title, - "created_at" to created_at, - "first_name" to first_name, - "last_name" to last_name, - "fields" to fields, - "favorited" to favorited, - "creator_id" to creator_id, - "sorts" to sorts, - "page" to page, - "per_page" to per_page, - "offset" to offset, - "limit" to limit, - "filter_or" to filter_or, - "permission" to permission, - ), - ) + permission: String? = null + ) : SDKResponse { + return this.get>("/boards/search", + mapOf("title" to title, + "created_at" to created_at, + "first_name" to first_name, + "last_name" to last_name, + "fields" to fields, + "favorited" to favorited, + "creator_id" to creator_id, + "sorts" to sorts, + "page" to page, + "per_page" to per_page, + "offset" to offset, + "limit" to limit, + "filter_or" to filter_or, + "permission" to permission)) } + /** * ### Get information about a board. * @@ -1843,15 +1868,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board( board_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_id = encodeParam(board_id) - return this.get( - "/boards/${path_board_id}", - mapOf("fields" to fields), - ) + return this.get("/boards/${path_board_id}", + mapOf("fields" to fields)) } + /** * ### Update a board definition. * @@ -1864,16 +1888,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board( board_id: String, body: WriteBoard, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_id = encodeParam(board_id) - return this.patch( - "/boards/${path_board_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/boards/${path_board_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a board. * @@ -1882,12 +1904,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /boards/{board_id} -> String */ fun delete_board( - board_id: String, - ): SDKResponse { + board_id: String + ) : SDKResponse { val path_board_id = encodeParam(board_id) return this.delete("/boards/${path_board_id}", mapOf()) } + /** * ### Get information about all board items. * @@ -1900,18 +1923,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_board_items( fields: String? = null, sorts: String? = null, - board_section_id: String? = null, - ): SDKResponse { - return this.get>( - "/board_items", - mapOf( - "fields" to fields, - "sorts" to sorts, - "board_section_id" to board_section_id, - ), - ) + board_section_id: String? = null + ) : SDKResponse { + return this.get>("/board_items", + mapOf("fields" to fields, + "sorts" to sorts, + "board_section_id" to board_section_id)) } + /** * ### Create a new board item. * @@ -1922,15 +1942,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board_item( body: WriteBoardItem, - fields: String? = null, - ): SDKResponse { - return this.post( - "/board_items", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/board_items", + mapOf("fields" to fields), body) } + /** * ### Get information about a board item. * @@ -1941,15 +1959,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board_item( board_item_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.get( - "/board_items/${path_board_item_id}", - mapOf("fields" to fields), - ) + return this.get("/board_items/${path_board_item_id}", + mapOf("fields" to fields)) } + /** * ### Update a board item definition. * @@ -1962,16 +1979,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board_item( board_item_id: String, body: WriteBoardItem, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.patch( - "/board_items/${path_board_item_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/board_items/${path_board_item_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a board item. * @@ -1980,12 +1995,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /board_items/{board_item_id} -> String */ fun delete_board_item( - board_item_id: String, - ): SDKResponse { + board_item_id: String + ) : SDKResponse { val path_board_item_id = encodeParam(board_item_id) return this.delete("/board_items/${path_board_item_id}", mapOf()) } + /** * ### Get information about all board sections. * @@ -1996,17 +2012,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_board_sections( fields: String? = null, - sorts: String? = null, - ): SDKResponse { - return this.get>( - "/board_sections", - mapOf( - "fields" to fields, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get>("/board_sections", + mapOf("fields" to fields, + "sorts" to sorts)) } + /** * ### Create a new board section. * @@ -2017,15 +2030,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board_section( body: WriteBoardSection, - fields: String? = null, - ): SDKResponse { - return this.post( - "/board_sections", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/board_sections", + mapOf("fields" to fields), body) } + /** * ### Get information about a board section. * @@ -2036,15 +2047,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board_section( board_section_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.get( - "/board_sections/${path_board_section_id}", - mapOf("fields" to fields), - ) + return this.get("/board_sections/${path_board_section_id}", + mapOf("fields" to fields)) } + /** * ### Update a board section definition. * @@ -2057,16 +2067,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board_section( board_section_id: String, body: WriteBoardSection, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.patch( - "/board_sections/${path_board_section_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/board_sections/${path_board_section_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a board section. * @@ -2075,8 +2083,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /board_sections/{board_section_id} -> String */ fun delete_board_section( - board_section_id: String, - ): SDKResponse { + board_section_id: String + ) : SDKResponse { val path_board_section_id = encodeParam(board_section_id) return this.delete("/board_sections/${path_board_section_id}", mapOf()) } @@ -2085,6 +2093,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region ColorCollection: Manage Color Collections + /** * ### Get an array of all existing Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2100,14 +2109,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections -> Array */ @JvmOverloads fun all_color_collections( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/color_collections", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/color_collections", + mapOf("fields" to fields)) } + /** * ### Create a custom color collection with the specified information * @@ -2124,11 +2132,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /color_collections -> ColorCollection */ fun create_color_collection( - body: WriteColorCollection, - ): SDKResponse { + body: WriteColorCollection + ) : SDKResponse { return this.post("/color_collections", mapOf(), body) } + /** * ### Get an array of all existing **Custom** Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2142,14 +2151,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections/custom -> Array */ @JvmOverloads fun color_collections_custom( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/color_collections/custom", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/color_collections/custom", + mapOf("fields" to fields)) } + /** * ### Get an array of all existing **Standard** Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2163,14 +2171,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections/standard -> Array */ @JvmOverloads fun color_collections_standard( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/color_collections/standard", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/color_collections/standard", + mapOf("fields" to fields)) } + /** * ### Get the default color collection * @@ -2180,10 +2187,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /color_collections/default -> ColorCollection */ - fun default_color_collection(): SDKResponse { + fun default_color_collection( + + ) : SDKResponse { return this.get("/color_collections/default", mapOf()) } + /** * ### Set the global default Color Collection by ID * @@ -2195,14 +2205,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /color_collections/default -> ColorCollection */ fun set_default_color_collection( - collection_id: String, - ): SDKResponse { - return this.put( - "/color_collections/default", - mapOf("collection_id" to collection_id), - ) + collection_id: String + ) : SDKResponse { + return this.put("/color_collections/default", + mapOf("collection_id" to collection_id)) } + /** * ### Get a Color Collection by ID * @@ -2222,15 +2231,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun color_collection( collection_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_collection_id = encodeParam(collection_id) - return this.get( - "/color_collections/${path_collection_id}", - mapOf("fields" to fields), - ) + return this.get("/color_collections/${path_collection_id}", + mapOf("fields" to fields)) } + /** * ### Update a custom color collection by id. * **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. @@ -2242,12 +2250,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_color_collection( collection_id: String, - body: WriteColorCollection, - ): SDKResponse { + body: WriteColorCollection + ) : SDKResponse { val path_collection_id = encodeParam(collection_id) return this.patch("/color_collections/${path_collection_id}", mapOf(), body) } + /** * ### Delete a custom color collection by id * @@ -2263,8 +2272,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /color_collections/{collection_id} -> String */ fun delete_color_collection( - collection_id: String, - ): SDKResponse { + collection_id: String + ) : SDKResponse { val path_collection_id = encodeParam(collection_id) return this.delete("/color_collections/${path_collection_id}", mapOf()) } @@ -2273,15 +2282,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Config: Manage General Configuration + /** * Get the current Cloud Storage Configuration. * * GET /cloud_storage -> BackupConfiguration */ - fun cloud_storage_configuration(): SDKResponse { + fun cloud_storage_configuration( + + ) : SDKResponse { return this.get("/cloud_storage", mapOf()) } + /** * Update the current Cloud Storage Configuration. * @@ -2290,21 +2303,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /cloud_storage -> BackupConfiguration */ fun update_cloud_storage_configuration( - body: WriteBackupConfiguration, - ): SDKResponse { + body: WriteBackupConfiguration + ) : SDKResponse { return this.patch("/cloud_storage", mapOf(), body) } + /** * ### Get the current status and content of custom welcome emails * * GET /custom_welcome_email -> CustomWelcomeEmail */ @Deprecated(message = "Deprecated method") - fun custom_welcome_email(): SDKResponse { + fun custom_welcome_email( + + ) : SDKResponse { return this.get("/custom_welcome_email", mapOf()) } + /** * Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user. * @@ -2314,18 +2331,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /custom_welcome_email -> CustomWelcomeEmail */ @Deprecated(message = "Deprecated method") - @JvmOverloads - fun update_custom_welcome_email( + @JvmOverloads fun update_custom_welcome_email( body: CustomWelcomeEmail, - send_test_welcome_email: Boolean? = null, - ): SDKResponse { - return this.patch( - "/custom_welcome_email", - mapOf("send_test_welcome_email" to send_test_welcome_email), - body, - ) + send_test_welcome_email: Boolean? = null + ) : SDKResponse { + return this.patch("/custom_welcome_email", + mapOf("send_test_welcome_email" to send_test_welcome_email), body) } + /** * Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user. * @@ -2334,20 +2348,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PUT /custom_welcome_email_test -> WelcomeEmailTest */ fun update_custom_welcome_email_test( - body: WelcomeEmailTest, - ): SDKResponse { + body: WelcomeEmailTest + ) : SDKResponse { return this.put("/custom_welcome_email_test", mapOf(), body) } + /** * ### Retrieve the value for whether or not digest emails is enabled * * GET /digest_emails_enabled -> DigestEmails */ - fun digest_emails_enabled(): SDKResponse { + fun digest_emails_enabled( + + ) : SDKResponse { return this.get("/digest_emails_enabled", mapOf()) } + /** * ### Update the setting for enabling/disabling digest emails * @@ -2356,11 +2374,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /digest_emails_enabled -> DigestEmails */ fun update_digest_emails_enabled( - body: DigestEmails, - ): SDKResponse { + body: DigestEmails + ) : SDKResponse { return this.patch("/digest_emails_enabled", mapOf(), body) } + /** * ### Trigger the generation of digest email records and send them to Looker's internal system. This does not send * any actual emails, it generates records containing content which may be of interest for users who have become inactive. @@ -2368,10 +2387,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * POST /digest_email_send -> DigestEmailSend */ - fun create_digest_email_send(): SDKResponse { + fun create_digest_email_send( + + ) : SDKResponse { return this.post("/digest_email_send", mapOf()) } + /** * ### Get Egress IP Addresses * @@ -2381,19 +2403,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /public_egress_ip_addresses -> EgressIpAddresses */ - fun public_egress_ip_addresses(): SDKResponse { + fun public_egress_ip_addresses( + + ) : SDKResponse { return this.get("/public_egress_ip_addresses", mapOf()) } + /** * ### Set the menu item name and content for internal help resources * * GET /internal_help_resources_content -> InternalHelpResourcesContent */ - fun internal_help_resources_content(): SDKResponse { + fun internal_help_resources_content( + + ) : SDKResponse { return this.get("/internal_help_resources_content", mapOf()) } + /** * Update internal help resources content * @@ -2402,20 +2430,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /internal_help_resources_content -> InternalHelpResourcesContent */ fun update_internal_help_resources_content( - body: WriteInternalHelpResourcesContent, - ): SDKResponse { + body: WriteInternalHelpResourcesContent + ) : SDKResponse { return this.patch("/internal_help_resources_content", mapOf(), body) } + /** * ### Get and set the options for internal help resources * * GET /internal_help_resources_enabled -> InternalHelpResources */ - fun internal_help_resources(): SDKResponse { + fun internal_help_resources( + + ) : SDKResponse { return this.get("/internal_help_resources_enabled", mapOf()) } + /** * Update internal help resources settings * @@ -2424,11 +2456,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /internal_help_resources -> InternalHelpResources */ fun update_internal_help_resources( - body: WriteInternalHelpResources, - ): SDKResponse { + body: WriteInternalHelpResources + ) : SDKResponse { return this.patch("/internal_help_resources", mapOf(), body) } + /** * ### Get all legacy features. * @@ -2436,10 +2469,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /legacy_features -> Array */ - fun all_legacy_features(): SDKResponse { + fun all_legacy_features( + + ) : SDKResponse { return this.get>("/legacy_features", mapOf()) } + /** * ### Get information about the legacy feature with a specific id. * @@ -2450,12 +2486,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /legacy_features/{legacy_feature_id} -> LegacyFeature */ fun legacy_feature( - legacy_feature_id: String, - ): SDKResponse { + legacy_feature_id: String + ) : SDKResponse { val path_legacy_feature_id = encodeParam(legacy_feature_id) return this.get("/legacy_features/${path_legacy_feature_id}", mapOf()) } + /** * ### Update information about the legacy feature with a specific id. * @@ -2468,30 +2505,37 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_legacy_feature( legacy_feature_id: String, - body: WriteLegacyFeature, - ): SDKResponse { + body: WriteLegacyFeature + ) : SDKResponse { val path_legacy_feature_id = encodeParam(legacy_feature_id) return this.patch("/legacy_features/${path_legacy_feature_id}", mapOf(), body) } + /** * ### Get a list of locales that Looker supports. * * GET /locales -> Array */ - fun all_locales(): SDKResponse { + fun all_locales( + + ) : SDKResponse { return this.get>("/locales", mapOf()) } + /** * ### Get all mobile settings. * * GET /mobile/settings -> MobileSettings */ - fun mobile_settings(): SDKResponse { + fun mobile_settings( + + ) : SDKResponse { return this.get("/mobile/settings", mapOf()) } + /** * ### Get Looker Settings * @@ -2531,14 +2575,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /setting -> Setting */ @JvmOverloads fun get_setting( - fields: String? = null, - ): SDKResponse { - return this.get( - "/setting", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/setting", + mapOf("fields" to fields)) } + /** * ### Configure Looker Settings * @@ -2584,15 +2627,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun set_setting( body: WriteSetting, - fields: String? = null, - ): SDKResponse { - return this.patch( - "/setting", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.patch("/setting", + mapOf("fields" to fields), body) } + /** * ### Configure SMTP Settings * This API allows users to configure the SMTP settings on the Looker instance. @@ -2603,11 +2644,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /smtp_settings -> Void */ fun set_smtp_settings( - body: SmtpSettings, - ): SDKResponse { + body: SmtpSettings + ) : SDKResponse { return this.post("/smtp_settings", mapOf(), body) } + /** * ### Get current SMTP status. * @@ -2616,23 +2658,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /smtp_status -> SmtpStatus */ @JvmOverloads fun smtp_status( - fields: String? = null, - ): SDKResponse { - return this.get( - "/smtp_status", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/smtp_status", + mapOf("fields" to fields)) } + /** * ### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks). * * GET /timezones -> Array */ - fun all_timezones(): SDKResponse { + fun all_timezones( + + ) : SDKResponse { return this.get>("/timezones", mapOf()) } + /** * ### Get information about all API versions supported by this Looker instance. * @@ -2641,14 +2685,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /versions -> ApiVersion */ @JvmOverloads fun versions( - fields: String? = null, - ): SDKResponse { - return this.get( - "/versions", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/versions", + mapOf("fields" to fields)) } + /** * ### Get an API specification for this Looker instance. * @@ -2661,13 +2704,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun api_spec( api_version: String, - specification: String, - ): SDKResponse { + specification: String + ) : SDKResponse { val path_api_version = encodeParam(api_version) val path_specification = encodeParam(specification) return this.get("/api_spec/${path_api_version}/${path_specification}", mapOf()) } + /** * ### This feature is enabled only by special license. * @@ -2680,16 +2724,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /whitelabel_configuration -> WhitelabelConfiguration */ @Deprecated(message = "Deprecated method") - @JvmOverloads - fun whitelabel_configuration( - fields: String? = null, - ): SDKResponse { - return this.get( - "/whitelabel_configuration", - mapOf("fields" to fields), - ) + @JvmOverloads fun whitelabel_configuration( + fields: String? = null + ) : SDKResponse { + return this.get("/whitelabel_configuration", + mapOf("fields" to fields)) } + /** * ### Update the private label configuration * @@ -2701,8 +2743,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @Deprecated(message = "Deprecated method") fun update_whitelabel_configuration( - body: WriteWhitelabelConfiguration, - ): SDKResponse { + body: WriteWhitelabelConfiguration + ) : SDKResponse { return this.put("/whitelabel_configuration", mapOf(), body) } @@ -2710,6 +2752,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Connection: Manage Database Connections + /** * ### Get information about all connections. * @@ -2718,14 +2761,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /connections -> Array */ @JvmOverloads fun all_connections( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/connections", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/connections", + mapOf("fields" to fields)) } + /** * ### Create a connection using the specified configuration. * @@ -2734,11 +2776,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /connections -> DBConnection */ fun create_connection( - body: WriteDBConnection, - ): SDKResponse { + body: WriteDBConnection + ) : SDKResponse { return this.post("/connections", mapOf(), body) } + /** * ### Get information about a connection. * @@ -2749,15 +2792,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun connection( connection_name: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get( - "/connections/${path_connection_name}", - mapOf("fields" to fields), - ) + return this.get("/connections/${path_connection_name}", + mapOf("fields" to fields)) } + /** * ### Update a connection using the specified configuration. * @@ -2768,12 +2810,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_connection( connection_name: String, - body: WriteDBConnection, - ): SDKResponse { + body: WriteDBConnection + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) return this.patch("/connections/${path_connection_name}", mapOf(), body) } + /** * ### Delete a connection. * @@ -2782,12 +2825,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /connections/{connection_name} -> String */ fun delete_connection( - connection_name: String, - ): SDKResponse { + connection_name: String + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) return this.delete("/connections/${path_connection_name}", mapOf()) } + /** * ### Delete a connection override. * @@ -2798,13 +2842,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_connection_override( connection_name: String, - override_context: String, - ): SDKResponse { + override_context: String + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) val path_override_context = encodeParam(override_context) return this.delete("/connections/${path_connection_name}/connection_override/${path_override_context}", mapOf()) } + /** * ### Test an existing connection. * @@ -2822,15 +2867,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun test_connection( connection_name: String, - tests: DelimArray? = null, - ): SDKResponse { + tests: DelimArray? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.put>( - "/connections/${path_connection_name}/test", - mapOf("tests" to tests), - ) + return this.put>("/connections/${path_connection_name}/test", + mapOf("tests" to tests)) } + /** * ### Test a connection configuration. * @@ -2848,15 +2892,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun test_connection_config( body: WriteDBConnection, - tests: DelimArray? = null, - ): SDKResponse { - return this.put>( - "/connections/test", - mapOf("tests" to tests), - body, - ) + tests: DelimArray? = null + ) : SDKResponse { + return this.put>("/connections/test", + mapOf("tests" to tests), body) } + /** * ### Get information about all dialects. * @@ -2865,14 +2907,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dialect_info -> Array */ @JvmOverloads fun all_dialect_infos( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/dialect_info", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/dialect_info", + mapOf("fields" to fields)) } + /** * ### Get all External OAuth Applications. * @@ -2885,17 +2926,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_external_oauth_applications( name: String? = null, - client_id: String? = null, - ): SDKResponse { - return this.get>( - "/external_oauth_applications", - mapOf( - "name" to name, - "client_id" to client_id, - ), - ) + client_id: String? = null + ) : SDKResponse { + return this.get>("/external_oauth_applications", + mapOf("name" to name, + "client_id" to client_id)) } + /** * ### Create an OAuth Application using the specified configuration. * @@ -2906,11 +2944,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /external_oauth_applications -> ExternalOauthApplication */ fun create_external_oauth_application( - body: WriteExternalOauthApplication, - ): SDKResponse { + body: WriteExternalOauthApplication + ) : SDKResponse { return this.post("/external_oauth_applications", mapOf(), body) } + /** * ### Update an OAuth Application's client secret. * @@ -2923,12 +2962,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_external_oauth_application( client_id: String, - body: WriteExternalOauthApplication, - ): SDKResponse { + body: WriteExternalOauthApplication + ) : SDKResponse { val path_client_id = encodeParam(client_id) return this.patch("/external_oauth_applications/${path_client_id}", mapOf(), body) } + /** * ### Delete an OAuth Application. * @@ -2939,12 +2979,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /external_oauth_applications/{client_id} -> String */ fun delete_external_oauth_application( - client_id: String, - ): SDKResponse { + client_id: String + ) : SDKResponse { val path_client_id = encodeParam(client_id) return this.delete("/external_oauth_applications/${path_client_id}", mapOf()) } + /** * ### Create OAuth User state. * @@ -2953,11 +2994,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /external_oauth_applications/user_state -> CreateOAuthApplicationUserStateResponse */ fun create_oauth_application_user_state( - body: CreateOAuthApplicationUserStateRequest, - ): SDKResponse { + body: CreateOAuthApplicationUserStateRequest + ) : SDKResponse { return this.post("/external_oauth_applications/user_state", mapOf(), body) } + /** * ### Get information about all SSH Servers. * @@ -2966,14 +3008,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_servers -> Array */ @JvmOverloads fun all_ssh_servers( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/ssh_servers", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/ssh_servers", + mapOf("fields" to fields)) } + /** * ### Create an SSH Server. * @@ -2982,11 +3023,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /ssh_servers -> SshServer */ fun create_ssh_server( - body: WriteSshServer, - ): SDKResponse { + body: WriteSshServer + ) : SDKResponse { return this.post("/ssh_servers", mapOf(), body) } + /** * ### Get information about an SSH Server. * @@ -2995,12 +3037,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_server/{ssh_server_id} -> SshServer */ fun ssh_server( - ssh_server_id: String, - ): SDKResponse { + ssh_server_id: String + ) : SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) return this.get("/ssh_server/${path_ssh_server_id}", mapOf()) } + /** * ### Update an SSH Server. * @@ -3011,12 +3054,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_ssh_server( ssh_server_id: String, - body: WriteSshServer, - ): SDKResponse { + body: WriteSshServer + ) : SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) return this.patch("/ssh_server/${path_ssh_server_id}", mapOf(), body) } + /** * ### Delete an SSH Server. * @@ -3025,12 +3069,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /ssh_server/{ssh_server_id} -> String */ fun delete_ssh_server( - ssh_server_id: String, - ): SDKResponse { + ssh_server_id: String + ) : SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) return this.delete("/ssh_server/${path_ssh_server_id}", mapOf()) } + /** * ### Test the SSH Server * @@ -3039,12 +3084,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_server/{ssh_server_id}/test -> SshServer */ fun test_ssh_server( - ssh_server_id: String, - ): SDKResponse { + ssh_server_id: String + ) : SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) return this.get("/ssh_server/${path_ssh_server_id}/test", mapOf()) } + /** * ### Get information about all SSH Tunnels. * @@ -3053,14 +3099,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnels -> Array */ @JvmOverloads fun all_ssh_tunnels( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/ssh_tunnels", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/ssh_tunnels", + mapOf("fields" to fields)) } + /** * ### Create an SSH Tunnel * @@ -3069,11 +3114,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /ssh_tunnels -> SshTunnel */ fun create_ssh_tunnel( - body: WriteSshTunnel, - ): SDKResponse { + body: WriteSshTunnel + ) : SDKResponse { return this.post("/ssh_tunnels", mapOf(), body) } + /** * ### Get information about an SSH Tunnel. * @@ -3082,12 +3128,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnel/{ssh_tunnel_id} -> SshTunnel */ fun ssh_tunnel( - ssh_tunnel_id: String, - ): SDKResponse { + ssh_tunnel_id: String + ) : SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) return this.get("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) } + /** * ### Update an SSH Tunnel * @@ -3098,12 +3145,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_ssh_tunnel( ssh_tunnel_id: String, - body: WriteSshTunnel, - ): SDKResponse { + body: WriteSshTunnel + ) : SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) return this.patch("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf(), body) } + /** * ### Delete an SSH Tunnel * @@ -3112,12 +3160,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /ssh_tunnel/{ssh_tunnel_id} -> String */ fun delete_ssh_tunnel( - ssh_tunnel_id: String, - ): SDKResponse { + ssh_tunnel_id: String + ) : SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) return this.delete("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) } + /** * ### Test the SSH Tunnel * @@ -3126,12 +3175,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnel/{ssh_tunnel_id}/test -> SshTunnel */ fun test_ssh_tunnel( - ssh_tunnel_id: String, - ): SDKResponse { + ssh_tunnel_id: String + ) : SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) return this.get("/ssh_tunnel/${path_ssh_tunnel_id}/test", mapOf()) } + /** * ### Get the SSH public key * @@ -3139,10 +3189,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /ssh_public_key -> SshPublicKey */ - fun ssh_public_key(): SDKResponse { + fun ssh_public_key( + + ) : SDKResponse { return this.get("/ssh_public_key", mapOf()) } + /** * ### Get All User DB Connections * @@ -3153,14 +3206,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /user_db_connections -> Array */ @JvmOverloads fun all_user_db_connections( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/user_db_connections", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/user_db_connections", + mapOf("fields" to fields)) } + /** * ### Update User DB Connection * @@ -3173,12 +3225,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_user_db_connection( user_db_connection_id: String, - body: WriteUserDbConnection, - ): SDKResponse { + body: WriteUserDbConnection + ) : SDKResponse { val path_user_db_connection_id = encodeParam(user_db_connection_id) return this.patch("/user_db_connections/${path_user_db_connection_id}", mapOf(), body) } + /** * ### Delete User DB Connection * @@ -3189,8 +3242,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_db_connections/{user_db_connection_id} -> Void */ fun delete_user_db_connection( - user_db_connection_id: String, - ): SDKResponse { + user_db_connection_id: String + ) : SDKResponse { val path_user_db_connection_id = encodeParam(user_db_connection_id) return this.delete("/user_db_connections/${path_user_db_connection_id}", mapOf()) } @@ -3199,6 +3252,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Content: Manage Content + /** * ### Search Favorite Content * @@ -3252,28 +3306,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, fields: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get>( - "/content_favorite/search", - mapOf( - "id" to id, - "user_id" to user_id, - "content_metadata_id" to content_metadata_id, - "dashboard_id" to dashboard_id, - "look_id" to look_id, - "board_id" to board_id, - "lookml_dashboard_id" to lookml_dashboard_id, - "include_board_items" to include_board_items, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "fields" to fields, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get>("/content_favorite/search", + mapOf("id" to id, + "user_id" to user_id, + "content_metadata_id" to content_metadata_id, + "dashboard_id" to dashboard_id, + "look_id" to look_id, + "board_id" to board_id, + "lookml_dashboard_id" to lookml_dashboard_id, + "include_board_items" to include_board_items, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "fields" to fields, + "filter_or" to filter_or)) } + /** * ### Get favorite content by its id * @@ -3284,15 +3335,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun content_favorite( content_favorite_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_content_favorite_id = encodeParam(content_favorite_id) - return this.get( - "/content_favorite/${path_content_favorite_id}", - mapOf("fields" to fields), - ) + return this.get("/content_favorite/${path_content_favorite_id}", + mapOf("fields" to fields)) } + /** * ### Delete favorite content * @@ -3301,12 +3351,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /content_favorite/{content_favorite_id} -> String */ fun delete_content_favorite( - content_favorite_id: String, - ): SDKResponse { + content_favorite_id: String + ) : SDKResponse { val path_content_favorite_id = encodeParam(content_favorite_id) return this.delete("/content_favorite/${path_content_favorite_id}", mapOf()) } + /** * ### Create favorite content * @@ -3315,11 +3366,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /content_favorite -> ContentFavorite */ fun create_content_favorite( - body: WriteContentFavorite, - ): SDKResponse { + body: WriteContentFavorite + ) : SDKResponse { return this.post("/content_favorite", mapOf(), body) } + /** * ### Get information about all content metadata in a space. * @@ -3330,17 +3382,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_content_metadatas( parent_id: String, - fields: String? = null, - ): SDKResponse { - return this.get>( - "/content_metadata", - mapOf( - "parent_id" to parent_id, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/content_metadata", + mapOf("parent_id" to parent_id, + "fields" to fields)) } + /** * ### Get information about an individual content metadata record. * @@ -3351,15 +3400,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun content_metadata( content_metadata_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_content_metadata_id = encodeParam(content_metadata_id) - return this.get( - "/content_metadata/${path_content_metadata_id}", - mapOf("fields" to fields), - ) + return this.get("/content_metadata/${path_content_metadata_id}", + mapOf("fields" to fields)) } + /** * ### Move a piece of content. * @@ -3370,12 +3418,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_content_metadata( content_metadata_id: String, - body: WriteContentMeta, - ): SDKResponse { + body: WriteContentMeta + ) : SDKResponse { val path_content_metadata_id = encodeParam(content_metadata_id) return this.patch("/content_metadata/${path_content_metadata_id}", mapOf(), body) } + /** * ### All content metadata access records for a content metadata item. * @@ -3386,17 +3435,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_content_metadata_accesses( content_metadata_id: String, - fields: String? = null, - ): SDKResponse { - return this.get>( - "/content_metadata_access", - mapOf( - "content_metadata_id" to content_metadata_id, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/content_metadata_access", + mapOf("content_metadata_id" to content_metadata_id, + "fields" to fields)) } + /** * ### Create content metadata access. * @@ -3407,15 +3453,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_content_metadata_access( body: ContentMetaGroupUser, - send_boards_notification_email: Boolean? = null, - ): SDKResponse { - return this.post( - "/content_metadata_access", - mapOf("send_boards_notification_email" to send_boards_notification_email), - body, - ) + send_boards_notification_email: Boolean? = null + ) : SDKResponse { + return this.post("/content_metadata_access", + mapOf("send_boards_notification_email" to send_boards_notification_email), body) } + /** * ### Update type of access for content metadata. * @@ -3426,12 +3470,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_content_metadata_access( content_metadata_access_id: String, - body: ContentMetaGroupUser, - ): SDKResponse { + body: ContentMetaGroupUser + ) : SDKResponse { val path_content_metadata_access_id = encodeParam(content_metadata_access_id) return this.put("/content_metadata_access/${path_content_metadata_access_id}", mapOf(), body) } + /** * ### Remove content metadata access. * @@ -3440,12 +3485,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /content_metadata_access/{content_metadata_access_id} -> String */ fun delete_content_metadata_access( - content_metadata_access_id: String, - ): SDKResponse { + content_metadata_access_id: String + ) : SDKResponse { val path_content_metadata_access_id = encodeParam(content_metadata_access_id) return this.delete("/content_metadata_access/${path_content_metadata_access_id}", mapOf()) } + /** * ### Search across looks, dashboards, and lookml dashboards. The terms field will be matched against the * title and description of the content and the closest results are returned. Content that has been frequently @@ -3474,22 +3520,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, page: Long? = null, - per_page: Long? = null, - ): SDKResponse { + per_page: Long? = null + ) : SDKResponse { val path_terms = encodeParam(terms) - return this.get>( - "/content/${path_terms}", - mapOf( - "fields" to fields, - "types" to types, - "limit" to limit, - "offset" to offset, - "page" to page, - "per_page" to per_page, - ), - ) + return this.get>("/content/${path_terms}", + mapOf("fields" to fields, + "types" to types, + "limit" to limit, + "offset" to offset, + "page" to page, + "per_page" to per_page)) } + /** * ### Get Content Summary * @@ -3513,22 +3556,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { target_group_id: String? = null, target_user_id: String? = null, target_content_type: String? = null, - sorts: String? = null, - ): SDKResponse { - return this.get>( - "/content_summary", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "target_group_id" to target_group_id, - "target_user_id" to target_user_id, - "target_content_type" to target_content_type, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get>("/content_summary", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "target_group_id" to target_group_id, + "target_user_id" to target_user_id, + "target_content_type" to target_content_type, + "sorts" to sorts)) } + /** * ### Get an image representing the contents of a dashboard or look. * @@ -3554,22 +3594,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { theme: String? = null, format: String? = null, width: Long? = null, - height: Long? = null, - ): SDKResponse { + height: Long? = null + ) : SDKResponse { val path_type = encodeParam(type) val path_resource_id = encodeParam(resource_id) - return this.get( - "/content_thumbnail/${path_type}/${path_resource_id}", - mapOf( - "reload" to reload, - "theme" to theme, - "format" to format, - "width" to width, - "height" to height, - ), - ) + return this.get("/content_thumbnail/${path_type}/${path_resource_id}", + mapOf("reload" to reload, + "theme" to theme, + "format" to format, + "width" to width, + "height" to height)) } + /** * ### Validate All Content * @@ -3585,18 +3622,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun content_validation( fields: String? = null, project_names: DelimArray? = null, - space_ids: DelimArray? = null, - ): SDKResponse { - return this.get( - "/content_validation", - mapOf( - "fields" to fields, - "project_names" to project_names, - "space_ids" to space_ids, - ), - ) + space_ids: DelimArray? = null + ) : SDKResponse { + return this.get("/content_validation", + mapOf("fields" to fields, + "project_names" to project_names, + "space_ids" to space_ids)) } + /** * ### Search Content Views * @@ -3650,28 +3684,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get>( - "/content_view/search", - mapOf( - "view_count" to view_count, - "group_id" to group_id, - "look_id" to look_id, - "dashboard_id" to dashboard_id, - "content_metadata_id" to content_metadata_id, - "start_of_week_date" to start_of_week_date, - "all_time" to all_time, - "user_id" to user_id, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get>("/content_view/search", + mapOf("view_count" to view_count, + "group_id" to group_id, + "look_id" to look_id, + "dashboard_id" to dashboard_id, + "content_metadata_id" to content_metadata_id, + "start_of_week_date" to start_of_week_date, + "all_time" to all_time, + "user_id" to user_id, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or)) } + /** * ### Get a vector image representing the contents of a dashboard or look. * @@ -3687,24 +3718,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /vector_thumbnail/{type}/{resource_id} -> String */ @Deprecated(message = "Deprecated method") - @JvmOverloads - fun vector_thumbnail( + @JvmOverloads fun vector_thumbnail( type: String, resource_id: String, - reload: String? = null, - ): SDKResponse { + reload: String? = null + ) : SDKResponse { val path_type = encodeParam(type) val path_resource_id = encodeParam(resource_id) - return this.get( - "/vector_thumbnail/${path_type}/${path_resource_id}", - mapOf("reload" to reload), - ) + return this.get("/vector_thumbnail/${path_type}/${path_resource_id}", + mapOf("reload" to reload)) } //endregion Content: Manage Content //region ConversationalAnalytics: Manage Conversations, Agents and Messages + /** * ### Search Agents * @@ -3743,28 +3772,25 @@ 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", - mapOf( - "id" to id, - "name" to name, - "description" to description, - "created_by_user_id" to created_by_user_id, - "fields" to fields, - "limit" to limit, - "category" to category, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "not_owned_by" to not_owned_by, - "deleted" to deleted, - "primary_agent_id" to primary_agent_id, - ), - ) + primary_agent_id: String? = null + ) : SDKResponse { + return this.get>("/agents/search", + mapOf("id" to id, + "name" to name, + "description" to description, + "created_by_user_id" to created_by_user_id, + "fields" to fields, + "limit" to limit, + "category" to category, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "not_owned_by" to not_owned_by, + "deleted" to deleted, + "primary_agent_id" to primary_agent_id)) } + /** * ### Create Agent * @@ -3778,15 +3804,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_agent( body: WriteAgent, - fields: String? = null, - ): SDKResponse { - return this.post( - "/agents", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/agents", + mapOf("fields" to fields), body) } + /** * ### Delete Agents * @@ -3799,17 +3823,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun delete_agent( id: String, - fields: String? = null, - ): SDKResponse { - return this.delete( - "/agents", - mapOf( - "id" to id, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.delete("/agents", + mapOf("id" to id, + "fields" to fields)) } + /** * ### Get Agent * @@ -3822,15 +3843,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun get_agent( agent_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_agent_id = encodeParam(agent_id) - return this.get( - "/agents/${path_agent_id}", - mapOf("fields" to fields), - ) + return this.get("/agents/${path_agent_id}", + mapOf("fields" to fields)) } + /** * ### Update Agent * @@ -3845,16 +3865,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_agent( agent_id: String, body: WriteAgent, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_agent_id = encodeParam(agent_id) - return this.patch( - "/agents/${path_agent_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/agents/${path_agent_id}", + mapOf("fields" to fields), body) } + /** * ### Get LookML of a UDD Agent * @@ -3865,12 +3883,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /agents/lookml/{agent_id} -> AgentLookml */ fun agent_lookml( - agent_id: String, - ): SDKResponse { + agent_id: String + ) : SDKResponse { val path_agent_id = encodeParam(agent_id) return this.get("/agents/lookml/${path_agent_id}", mapOf()) } + /** * ### Get All Conversation Messages * @@ -3883,15 +3902,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_conversation_messages( conversation_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.get>( - "/conversations/${path_conversation_id}/messages", - mapOf("fields" to fields), - ) + return this.get>("/conversations/${path_conversation_id}/messages", + mapOf("fields" to fields)) } + /** * ### Create Conversation Message * @@ -3910,16 +3928,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_conversation_message( conversation_id: String, body: WriteConversationMessages, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.post>( - "/conversations/${path_conversation_id}/messages", - mapOf("fields" to fields), - body, - ) + return this.post>("/conversations/${path_conversation_id}/messages", + mapOf("fields" to fields), body) } + /** * ### Delete Conversation Message * @@ -3934,18 +3950,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun delete_conversation_message( conversation_id: String, id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.delete( - "/conversations/${path_conversation_id}/messages", - mapOf( - "id" to id, - "fields" to fields, - ), - ) + return this.delete("/conversations/${path_conversation_id}/messages", + mapOf("id" to id, + "fields" to fields)) } + /** * ### Get Conversation Message * @@ -3960,16 +3973,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun get_conversation_message( conversation_id: String, message_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) val path_message_id = encodeParam(message_id) - return this.get( - "/conversations/${path_conversation_id}/messages/${path_message_id}", - mapOf("fields" to fields), - ) + return this.get("/conversations/${path_conversation_id}/messages/${path_message_id}", + mapOf("fields" to fields)) } + /** * ### Update Conversation Message * @@ -3986,17 +3998,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { conversation_id: String, message_id: String, body: WriteConversationMessage, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) val path_message_id = encodeParam(message_id) - return this.patch( - "/conversations/${path_conversation_id}/messages/${path_message_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/conversations/${path_conversation_id}/messages/${path_message_id}", + mapOf("fields" to fields), body) } + /** * ### Get Agent Responses for User Message * @@ -4015,16 +4025,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun get_conversation_message_responses( conversation_id: String, user_message_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) val path_user_message_id = encodeParam(user_message_id) - return this.get>( - "/conversations/${path_conversation_id}/messages/${path_user_message_id}/responses", - mapOf("fields" to fields), - ) + return this.get>("/conversations/${path_conversation_id}/messages/${path_user_message_id}/responses", + mapOf("fields" to fields)) } + /** * ### Search Conversations * @@ -4058,25 +4067,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, filter_or: Boolean? = null, category: String? = null, - deleted: Boolean? = null, - ): SDKResponse { - return this.get>( - "/conversations/search", - mapOf( - "id" to id, - "name" to name, - "agent_id" to agent_id, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "category" to category, - "deleted" to deleted, - ), - ) + deleted: Boolean? = null + ) : SDKResponse { + return this.get>("/conversations/search", + mapOf("id" to id, + "name" to name, + "agent_id" to agent_id, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "category" to category, + "deleted" to deleted)) } + /** * ### Create Conversation * @@ -4090,15 +4096,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_conversation( body: WriteConversation, - fields: String? = null, - ): SDKResponse { - return this.post( - "/conversations", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/conversations", + mapOf("fields" to fields), body) } + /** * ### Delete Conversations * @@ -4111,17 +4115,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun delete_conversation( id: String, - fields: String? = null, - ): SDKResponse { - return this.delete( - "/conversations", - mapOf( - "id" to id, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.delete("/conversations", + mapOf("id" to id, + "fields" to fields)) } + /** * ### Get Conversation * @@ -4134,15 +4135,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun get_conversation( conversation_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.get( - "/conversations/${path_conversation_id}", - mapOf("fields" to fields), - ) + return this.get("/conversations/${path_conversation_id}", + mapOf("fields" to fields)) } + /** * ### Update Conversation * @@ -4157,16 +4157,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_conversation( conversation_id: String, body: WriteConversation, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.patch( - "/conversations/${path_conversation_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/conversations/${path_conversation_id}", + mapOf("fields" to fields), body) } + /** * ## Takes the latest conversation context (ID and a user message) and * ## returns a list of newly generated system messages. @@ -4176,11 +4174,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /conversational_analytics/chat -> Array */ fun conversational_analytics_chat( - body: ConversationalAnalyticsChatRequest, - ): SDKResponse { + body: ConversationalAnalyticsChatRequest + ) : SDKResponse { return this.post>("/conversational_analytics/chat", mapOf(), body) } + /** * ### Create Golden Query * @@ -4191,11 +4190,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /golden_queries -> GoldenQuery */ fun create_golden_query( - body: WriteGoldenQuery, - ): SDKResponse { + body: WriteGoldenQuery + ) : SDKResponse { return this.post("/golden_queries", mapOf(), body) } + /** * ### Update Golden Query * @@ -4208,12 +4208,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_golden_query( golden_query_id: Long, - body: WriteGoldenQuery, - ): SDKResponse { + 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 * @@ -4224,8 +4225,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /golden_queries/{golden_query_id} -> String */ fun delete_golden_query( - golden_query_id: Long, - ): SDKResponse { + golden_query_id: Long + ) : SDKResponse { val path_golden_query_id = encodeParam(golden_query_id) return this.delete("/golden_queries/${path_golden_query_id}", mapOf()) } @@ -4234,6 +4235,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Dashboard: Manage Dashboards + /** * ### Get information about all active dashboards. * @@ -4248,14 +4250,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards -> Array */ @JvmOverloads fun all_dashboards( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/dashboards", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/dashboards", + mapOf("fields" to fields)) } + /** * ### Create a new dashboard * @@ -4277,11 +4278,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards -> Dashboard */ fun create_dashboard( - body: WriteDashboard, - ): SDKResponse { + body: WriteDashboard + ) : SDKResponse { return this.post("/dashboards", mapOf(), body) } + /** * ### Search Dashboards * @@ -4357,35 +4359,32 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, filter_or: Boolean? = null, - not_owned_by: Boolean? = null, - ): SDKResponse { - return this.get>( - "/dashboards/search", - mapOf( - "id" to id, - "slug" to slug, - "title" to title, - "description" to description, - "content_favorite_id" to content_favorite_id, - "folder_id" to folder_id, - "deleted" to deleted, - "user_id" to user_id, - "view_count" to view_count, - "content_metadata_id" to content_metadata_id, - "curate" to curate, - "last_viewed_at" to last_viewed_at, - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "not_owned_by" to not_owned_by, - ), - ) + not_owned_by: Boolean? = null + ) : SDKResponse { + return this.get>("/dashboards/search", + mapOf("id" to id, + "slug" to slug, + "title" to title, + "description" to description, + "content_favorite_id" to content_favorite_id, + "folder_id" to folder_id, + "deleted" to deleted, + "user_id" to user_id, + "view_count" to view_count, + "content_metadata_id" to content_metadata_id, + "curate" to curate, + "last_viewed_at" to last_viewed_at, + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "not_owned_by" to not_owned_by)) } + /** * ### Import a LookML dashboard to a space as a UDD * Creates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard @@ -4411,17 +4410,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { lookml_dashboard_id: String, space_id: String, body: WriteDashboard? = null, - raw_locale: Boolean? = null, - ): SDKResponse { + raw_locale: Boolean? = null + ) : SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) val path_space_id = encodeParam(space_id) - return this.post( - "/dashboards/${path_lookml_dashboard_id}/import/${path_space_id}", - mapOf("raw_locale" to raw_locale), - body, - ) + return this.post("/dashboards/${path_lookml_dashboard_id}/import/${path_space_id}", + mapOf("raw_locale" to raw_locale), body) } + /** * ### Update all linked dashboards to match the specified LookML dashboard. * @@ -4444,18 +4441,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun sync_lookml_dashboard( lookml_dashboard_id: String, raw_locale: Boolean? = null, - dashboard_ids: DelimArray? = null, - ): SDKResponse { + dashboard_ids: DelimArray? = null + ) : SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) - return this.patch>( - "/dashboards/${path_lookml_dashboard_id}/sync", - mapOf( - "raw_locale" to raw_locale, - "dashboard_ids" to dashboard_ids, - ), - ) + return this.patch>("/dashboards/${path_lookml_dashboard_id}/sync", + mapOf("raw_locale" to raw_locale, + "dashboard_ids" to dashboard_ids)) } + /** * ### Get information about a dashboard * @@ -4472,15 +4466,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard( dashboard_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get( - "/dashboards/${path_dashboard_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboards/${path_dashboard_id}", + mapOf("fields" to fields)) } + /** * ### Update a dashboard * @@ -4500,12 +4493,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_dashboard( dashboard_id: String, - body: WriteDashboard, - ): SDKResponse { + body: WriteDashboard + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.patch("/dashboards/${path_dashboard_id}", mapOf(), body) } + /** * ### Delete the dashboard with the specified id * @@ -4520,12 +4514,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboards/{dashboard_id} -> String */ fun delete_dashboard( - dashboard_id: String, - ): SDKResponse { + dashboard_id: String + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.delete("/dashboards/${path_dashboard_id}", mapOf()) } + /** * ### Get Dashboard Image * @@ -4534,19 +4529,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * @param {String} dashboard_id Id of dashboard * @param {String} image_slug Slug of image * - * GET /dashboards/{dashboard_id}/images/{image_slug} -> binary + * GET /dashboards/{dashboard_id}/images/{image_slug} -> String * * **Note**: Binary content may be returned by this method. */ fun get_dashboard_image( dashboard_id: String, - image_slug: String, - ): SDKResponse { + image_slug: String + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) val path_image_slug = encodeParam(image_slug) - return this.get("/dashboards/${path_dashboard_id}/images/${path_image_slug}", mapOf()) + return this.get("/dashboards/${path_dashboard_id}/images/${path_image_slug}", mapOf()) } + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -4557,12 +4553,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards/aggregate_table_lookml/{dashboard_id} -> DashboardAggregateTableLookml */ fun dashboard_aggregate_table_lookml( - dashboard_id: String, - ): SDKResponse { + dashboard_id: String + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.get("/dashboards/aggregate_table_lookml/${path_dashboard_id}", mapOf()) } + /** * ### Search LookML Dashboards * @@ -4614,22 +4611,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null, - ): SDKResponse { - return this.get( - "/dashboards/lookml/search", - mapOf( - "folder_id" to folder_id, - "title" to title, - "content_favorite_id" to content_favorite_id, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get("/dashboards/lookml/search", + mapOf("folder_id" to folder_id, + "title" to title, + "content_favorite_id" to content_favorite_id, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts)) } + /** * ### Get lookml of a UDD * @@ -4640,12 +4634,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards/lookml/{dashboard_id} -> DashboardLookml */ fun dashboard_lookml( - dashboard_id: String, - ): SDKResponse { + dashboard_id: String + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.get("/dashboards/lookml/${path_dashboard_id}", mapOf()) } + /** * ### Move an existing dashboard * @@ -4663,18 +4658,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun move_dashboard( dashboard_id: String, folder_id: String, - project_name: String? = null, - ): SDKResponse { + project_name: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch( - "/dashboards/${path_dashboard_id}/move", - mapOf( - "folder_id" to folder_id, - "project_name" to project_name, - ), - ) + return this.patch("/dashboards/${path_dashboard_id}/move", + mapOf("folder_id" to folder_id, + "project_name" to project_name)) } + /** * ### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard. * @@ -4697,11 +4689,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards/lookml -> Dashboard */ fun import_dashboard_from_lookml( - body: WriteDashboardLookml, - ): SDKResponse { + body: WriteDashboardLookml + ) : SDKResponse { return this.post("/dashboards/lookml", mapOf(), body) } + /** * # DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml) * @@ -4710,11 +4703,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards/from_lookml -> Dashboard */ fun create_dashboard_from_lookml( - body: WriteDashboardLookml, - ): SDKResponse { + body: WriteDashboardLookml + ) : SDKResponse { return this.post("/dashboards/from_lookml", mapOf(), body) } + /** * ### Copy an existing dashboard * @@ -4733,15 +4727,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun copy_dashboard( dashboard_id: String, - folder_id: String? = null, - ): SDKResponse { + folder_id: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.post( - "/dashboards/${path_dashboard_id}/copy", - mapOf("folder_id" to folder_id), - ) + return this.post("/dashboards/${path_dashboard_id}/copy", + mapOf("folder_id" to folder_id)) } + /** * ### Update dashboard certification * @@ -4752,12 +4745,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_dashboard_certification( dashboard_id: String, - body: WriteCertification, - ): SDKResponse { + body: WriteCertification + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.patch("/dashboards/${path_dashboard_id}/certification", mapOf(), body) } + /** * ### Update LookML dashboard certification * @@ -4768,12 +4762,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_lookml_certification( dashboard_id: String, - body: WriteCertification, - ): SDKResponse { + body: WriteCertification + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) return this.patch("/dashboards/lookml/${path_dashboard_id}/certification", mapOf(), body) } + /** * ### Search Dashboard Elements * @@ -4817,22 +4812,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { deleted: Boolean? = null, fields: String? = null, filter_or: Boolean? = null, - sorts: String? = null, - ): SDKResponse { - return this.get>( - "/dashboard_elements/search", - mapOf( - "dashboard_id" to dashboard_id, - "look_id" to look_id, - "title" to title, - "deleted" to deleted, - "fields" to fields, - "filter_or" to filter_or, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get>("/dashboard_elements/search", + mapOf("dashboard_id" to dashboard_id, + "look_id" to look_id, + "title" to title, + "deleted" to deleted, + "fields" to fields, + "filter_or" to filter_or, + "sorts" to sorts)) } + /** * ### Get information about the dashboard element with a specific id. * @@ -4843,15 +4835,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_element( dashboard_element_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.get( - "/dashboard_elements/${path_dashboard_element_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboard_elements/${path_dashboard_element_id}", + mapOf("fields" to fields)) } + /** * ### Update the dashboard element with a specific id. * @@ -4864,16 +4855,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_element( dashboard_element_id: String, body: WriteDashboardElement, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.patch( - "/dashboard_elements/${path_dashboard_element_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/dashboard_elements/${path_dashboard_element_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a dashboard element with a specific id. * @@ -4882,12 +4871,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_elements/{dashboard_element_id} -> String */ fun delete_dashboard_element( - dashboard_element_id: String, - ): SDKResponse { + dashboard_element_id: String + ) : SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) return this.delete("/dashboard_elements/${path_dashboard_element_id}", mapOf()) } + /** * ### Get information about all the dashboard elements on a dashboard with a specific id. * @@ -4898,15 +4888,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_elements( dashboard_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get>( - "/dashboards/${path_dashboard_id}/dashboard_elements", - mapOf("fields" to fields), - ) + return this.get>("/dashboards/${path_dashboard_id}/dashboard_elements", + mapOf("fields" to fields)) } + /** * ### Create a dashboard element on the dashboard with a specific id. * @@ -4919,18 +4908,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_dashboard_element( body: WriteDashboardElement, fields: String? = null, - apply_filters: Boolean? = null, - ): SDKResponse { - return this.post( - "/dashboard_elements", - mapOf( - "fields" to fields, - "apply_filters" to apply_filters, - ), - body, - ) + apply_filters: Boolean? = null + ) : SDKResponse { + return this.post("/dashboard_elements", + mapOf("fields" to fields, + "apply_filters" to apply_filters), body) } + /** * ### Get information about the dashboard filters with a specific id. * @@ -4941,15 +4926,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_filter( dashboard_filter_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.get( - "/dashboard_filters/${path_dashboard_filter_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboard_filters/${path_dashboard_filter_id}", + mapOf("fields" to fields)) } + /** * ### Update the dashboard filter with a specific id. * @@ -4962,16 +4946,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_filter( dashboard_filter_id: String, body: WriteDashboardFilter, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.patch( - "/dashboard_filters/${path_dashboard_filter_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/dashboard_filters/${path_dashboard_filter_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a dashboard filter with a specific id. * @@ -4980,12 +4962,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_filters/{dashboard_filter_id} -> String */ fun delete_dashboard_filter( - dashboard_filter_id: String, - ): SDKResponse { + dashboard_filter_id: String + ) : SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) return this.delete("/dashboard_filters/${path_dashboard_filter_id}", mapOf()) } + /** * ### Get information about all the dashboard filters on a dashboard with a specific id. * @@ -4996,15 +4979,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_filters( dashboard_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get>( - "/dashboards/${path_dashboard_id}/dashboard_filters", - mapOf("fields" to fields), - ) + return this.get>("/dashboards/${path_dashboard_id}/dashboard_filters", + mapOf("fields" to fields)) } + /** * ### Create a dashboard filter on the dashboard with a specific id. * @@ -5015,15 +4997,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_dashboard_filter( body: WriteCreateDashboardFilter, - fields: String? = null, - ): SDKResponse { - return this.post( - "/dashboard_filters", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/dashboard_filters", + mapOf("fields" to fields), body) } + /** * ### Get information about the dashboard elements with a specific id. * @@ -5034,15 +5014,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout_component( dashboard_layout_component_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_component_id = encodeParam(dashboard_layout_component_id) - return this.get( - "/dashboard_layout_components/${path_dashboard_layout_component_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboard_layout_components/${path_dashboard_layout_component_id}", + mapOf("fields" to fields)) } + /** * ### Update the dashboard element with a specific id. * @@ -5055,16 +5034,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_layout_component( dashboard_layout_component_id: String, body: WriteDashboardLayoutComponent, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_component_id = encodeParam(dashboard_layout_component_id) - return this.patch( - "/dashboard_layout_components/${path_dashboard_layout_component_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/dashboard_layout_components/${path_dashboard_layout_component_id}", + mapOf("fields" to fields), body) } + /** * ### Get information about all the dashboard layout components for a dashboard layout with a specific id. * @@ -5075,15 +5052,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout_dashboard_layout_components( dashboard_layout_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.get>( - "/dashboard_layouts/${path_dashboard_layout_id}/dashboard_layout_components", - mapOf("fields" to fields), - ) + return this.get>("/dashboard_layouts/${path_dashboard_layout_id}/dashboard_layout_components", + mapOf("fields" to fields)) } + /** * ### Get information about the dashboard layouts with a specific id. * @@ -5094,15 +5070,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout( dashboard_layout_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.get( - "/dashboard_layouts/${path_dashboard_layout_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboard_layouts/${path_dashboard_layout_id}", + mapOf("fields" to fields)) } + /** * ### Update the dashboard layout with a specific id. * @@ -5115,16 +5090,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_layout( dashboard_layout_id: String, body: WriteDashboardLayout, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.patch( - "/dashboard_layouts/${path_dashboard_layout_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/dashboard_layouts/${path_dashboard_layout_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a dashboard layout with a specific id. * @@ -5133,12 +5106,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_layouts/{dashboard_layout_id} -> String */ fun delete_dashboard_layout( - dashboard_layout_id: String, - ): SDKResponse { + dashboard_layout_id: String + ) : SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) return this.delete("/dashboard_layouts/${path_dashboard_layout_id}", mapOf()) } + /** * ### Get information about all the dashboard elements on a dashboard with a specific id. * @@ -5149,15 +5123,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_layouts( dashboard_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get>( - "/dashboards/${path_dashboard_id}/dashboard_layouts", - mapOf("fields" to fields), - ) + return this.get>("/dashboards/${path_dashboard_id}/dashboard_layouts", + mapOf("fields" to fields)) } + /** * ### Create a dashboard layout on the dashboard with a specific id. * @@ -5168,15 +5141,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_dashboard_layout( body: WriteDashboardLayout, - fields: String? = null, - ): SDKResponse { - return this.post( - "/dashboard_layouts", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/dashboard_layouts", + mapOf("fields" to fields), body) } + /** * ### Get Dashboard Filter State * Returns the stored filter state for a given GUID. @@ -5186,12 +5157,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboard_filter_state/{guid} -> String */ fun dashboard_filter_state( - guid: String, - ): SDKResponse { + 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. @@ -5201,8 +5173,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboard_filter_state -> Dashboard */ fun create_dashboard_filter_state( - body: String, - ): SDKResponse { + body: String + ) : SDKResponse { return this.post("/dashboard_filter_state", mapOf(), body) } @@ -5210,6 +5182,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region DataAction: Run Data Actions + /** * Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action. * @@ -5218,11 +5191,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /data_actions -> DataActionResponse */ fun perform_data_action( - body: DataActionRequest, - ): SDKResponse { + body: DataActionRequest + ) : SDKResponse { return this.post("/data_actions", mapOf(), body) } + /** * For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user. * @@ -5231,8 +5205,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /data_actions/form -> DataActionForm */ fun fetch_remote_data_action_form( - body: Map, - ): SDKResponse { + body: Map + ) : SDKResponse { return this.post("/data_actions/form", mapOf(), body) } @@ -5240,15 +5214,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Datagroup: Manage Datagroups + /** * ### Get information about all datagroups. * * GET /datagroups -> Array */ - fun all_datagroups(): SDKResponse { + fun all_datagroups( + + ) : SDKResponse { return this.get>("/datagroups", mapOf()) } + /** * ### Get information about a datagroup. * @@ -5257,12 +5235,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /datagroups/{datagroup_id} -> Datagroup */ fun datagroup( - datagroup_id: String, - ): SDKResponse { + datagroup_id: String + ) : SDKResponse { val path_datagroup_id = encodeParam(datagroup_id) return this.get("/datagroups/${path_datagroup_id}", mapOf()) } + /** * ### Update a datagroup using the specified params. * @@ -5273,8 +5252,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_datagroup( datagroup_id: String, - body: WriteDatagroup, - ): SDKResponse { + body: WriteDatagroup + ) : SDKResponse { val path_datagroup_id = encodeParam(datagroup_id) return this.patch("/datagroups/${path_datagroup_id}", mapOf(), body) } @@ -5283,6 +5262,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region DerivedTable: View Derived Table graphs + /** * ### Discover information about derived tables * @@ -5295,18 +5275,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun graph_derived_tables_for_model( model: String, format: String? = null, - color: String? = null, - ): SDKResponse { + color: String? = null + ) : SDKResponse { val path_model = encodeParam(model) - return this.get( - "/derived_table/graph/model/${path_model}", - mapOf( - "format" to format, - "color" to color, - ), - ) + return this.get("/derived_table/graph/model/${path_model}", + mapOf("format" to format, + "color" to color)) } + /** * ### Get the subgraph representing this derived table and its dependencies. * @@ -5319,18 +5296,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun graph_derived_tables_for_view( view: String, models: String? = null, - workspace: String? = null, - ): SDKResponse { + workspace: String? = null + ) : SDKResponse { val path_view = encodeParam(view) - return this.get( - "/derived_table/graph/view/${path_view}", - mapOf( - "models" to models, - "workspace" to workspace, - ), - ) + return this.get("/derived_table/graph/view/${path_view}", + mapOf("models" to models, + "workspace" to workspace)) } + /** * Enqueue materialization for a PDT with the given model name and view name * @@ -5349,21 +5323,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { force_rebuild: String? = null, force_full_incremental: String? = null, workspace: String? = null, - source: String? = null, - ): SDKResponse { + source: String? = null + ) : SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) - return this.get( - "/derived_table/${path_model_name}/${path_view_name}/start", - mapOf( - "force_rebuild" to force_rebuild, - "force_full_incremental" to force_full_incremental, - "workspace" to workspace, - "source" to source, - ), - ) + return this.get("/derived_table/${path_model_name}/${path_view_name}/start", + mapOf("force_rebuild" to force_rebuild, + "force_full_incremental" to force_full_incremental, + "workspace" to workspace, + "source" to source)) } + /** * Check status of PDT materialization * @@ -5372,12 +5343,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /derived_table/{materialization_id}/status -> MaterializePDT */ fun check_pdt_build( - materialization_id: String, - ): SDKResponse { + materialization_id: String + ) : SDKResponse { val path_materialization_id = encodeParam(materialization_id) return this.get("/derived_table/${path_materialization_id}/status", mapOf()) } + /** * Stop a PDT materialization * @@ -5388,19 +5360,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun stop_pdt_build( materialization_id: String, - source: String? = null, - ): SDKResponse { + source: String? = null + ) : SDKResponse { val path_materialization_id = encodeParam(materialization_id) - return this.get( - "/derived_table/${path_materialization_id}/stop", - mapOf("source" to source), - ) + return this.get("/derived_table/${path_materialization_id}/stop", + mapOf("source" to source)) } //endregion DerivedTable: View Derived Table graphs //region Folder: Manage Folders + /** * Search for folders by creator id, parent id, name, etc * @@ -5433,28 +5404,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { creator_id: String? = null, filter_or: Boolean? = null, is_shared_root: Boolean? = null, - is_users_root: Boolean? = null, - ): SDKResponse { - return this.get>( - "/folders/search", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "name" to name, - "id" to id, - "parent_id" to parent_id, - "creator_id" to creator_id, - "filter_or" to filter_or, - "is_shared_root" to is_shared_root, - "is_users_root" to is_users_root, - ), - ) + is_users_root: Boolean? = null + ) : SDKResponse { + return this.get>("/folders/search", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "name" to name, + "id" to id, + "parent_id" to parent_id, + "creator_id" to creator_id, + "filter_or" to filter_or, + "is_shared_root" to is_shared_root, + "is_users_root" to is_users_root)) } + /** * ### Get information about the folder with a specific id. * @@ -5465,15 +5433,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}", - mapOf("fields" to fields), - ) + return this.get("/folders/${path_folder_id}", + mapOf("fields" to fields)) } + /** * ### Update the folder with a specific id. * @@ -5484,12 +5451,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_folder( folder_id: String, - body: UpdateFolder, - ): SDKResponse { + body: UpdateFolder + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) return this.patch("/folders/${path_folder_id}", mapOf(), body) } + /** * ### Delete the folder with a specific id including any children folders. * **DANGER** this will delete all looks and dashboards in the folder. @@ -5499,12 +5467,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /folders/{folder_id} -> String */ fun delete_folder( - folder_id: String, - ): SDKResponse { + folder_id: String + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) return this.delete("/folders/${path_folder_id}", mapOf()) } + /** * ### Get information about all folders. * @@ -5515,14 +5484,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /folders -> Array */ @JvmOverloads fun all_folders( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/folders", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/folders", + mapOf("fields" to fields)) } + /** * ### Create a folder with specified information. * @@ -5534,11 +5502,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /folders -> Folder */ fun create_folder( - body: CreateFolder, - ): SDKResponse { + body: CreateFolder + ) : SDKResponse { return this.post("/folders", mapOf(), body) } + /** * ### Get the children of a folder. * @@ -5559,22 +5528,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { per_page: Long? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null, - ): SDKResponse { + sorts: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>( - "/folders/${path_folder_id}/children", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - ), - ) + return this.get>("/folders/${path_folder_id}/children", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts)) } + /** * ### Search the children of a folder * @@ -5589,19 +5555,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { folder_id: String, fields: String? = null, sorts: String? = null, - name: String? = null, - ): SDKResponse { + name: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>( - "/folders/${path_folder_id}/children/search", - mapOf( - "fields" to fields, - "sorts" to sorts, - "name" to name, - ), - ) + return this.get>("/folders/${path_folder_id}/children/search", + mapOf("fields" to fields, + "sorts" to sorts, + "name" to name)) } + /** * ### Get the parent of a folder * @@ -5612,15 +5575,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_parent( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}/parent", - mapOf("fields" to fields), - ) + return this.get("/folders/${path_folder_id}/parent", + mapOf("fields" to fields)) } + /** * ### Get the ancestors of a folder * @@ -5631,15 +5593,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_ancestors( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>( - "/folders/${path_folder_id}/ancestors", - mapOf("fields" to fields), - ) + return this.get>("/folders/${path_folder_id}/ancestors", + mapOf("fields" to fields)) } + /** * ### Get all looks in a folder. * In API 4.0+, all looks in a folder will be returned, excluding looks in the trash. @@ -5651,15 +5612,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_looks( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>( - "/folders/${path_folder_id}/looks", - mapOf("fields" to fields), - ) + return this.get>("/folders/${path_folder_id}/looks", + mapOf("fields" to fields)) } + /** * ### Get the dashboards in a folder * @@ -5670,19 +5630,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_dashboards( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get>( - "/folders/${path_folder_id}/dashboards", - mapOf("fields" to fields), - ) + return this.get>("/folders/${path_folder_id}/dashboards", + mapOf("fields" to fields)) } //endregion Folder: Manage Folders //region Group: Manage Groups + /** * ### Get information about all groups. * @@ -5707,24 +5666,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, ids: DelimArray? = null, content_metadata_id: String? = null, - can_add_to_content_metadata: Boolean? = null, - ): SDKResponse { - return this.get>( - "/groups", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "ids" to ids, - "content_metadata_id" to content_metadata_id, - "can_add_to_content_metadata" to can_add_to_content_metadata, - ), - ) + can_add_to_content_metadata: Boolean? = null + ) : SDKResponse { + return this.get>("/groups", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "ids" to ids, + "content_metadata_id" to content_metadata_id, + "can_add_to_content_metadata" to can_add_to_content_metadata)) } + /** * ### Creates a new group (admin only). * @@ -5735,15 +5691,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_group( body: WriteGroup, - fields: String? = null, - ): SDKResponse { - return this.post( - "/groups", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/groups", + mapOf("fields" to fields), body) } + /** * ### Search groups * @@ -5793,25 +5747,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null, - ): SDKResponse { - return this.get>( - "/groups/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned, - ), - ) + externally_orphaned: Boolean? = null + ) : SDKResponse { + return this.get>("/groups/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned)) } + /** * ### Search groups include roles * @@ -5861,25 +5812,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null, - ): SDKResponse { - return this.get>( - "/groups/search/with_roles", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned, - ), - ) + externally_orphaned: Boolean? = null + ) : SDKResponse { + return this.get>("/groups/search/with_roles", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned)) } + /** * ### Search groups include hierarchy * @@ -5930,25 +5878,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null, - ): SDKResponse { - return this.get>( - "/groups/search/with_hierarchy", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned, - ), - ) + externally_orphaned: Boolean? = null + ) : SDKResponse { + return this.get>("/groups/search/with_hierarchy", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned)) } + /** * ### Get information about a group. * @@ -5959,15 +5904,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun group( group_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.get( - "/groups/${path_group_id}", - mapOf("fields" to fields), - ) + return this.get("/groups/${path_group_id}", + mapOf("fields" to fields)) } + /** * ### Updates the a group (admin only). * @@ -5980,16 +5924,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_group( group_id: String, body: WriteGroup, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.patch( - "/groups/${path_group_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/groups/${path_group_id}", + mapOf("fields" to fields), body) } + /** * ### Deletes a group (admin only). * @@ -5998,12 +5940,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /groups/{group_id} -> String */ fun delete_group( - group_id: String, - ): SDKResponse { + group_id: String + ) : SDKResponse { val path_group_id = encodeParam(group_id) return this.delete("/groups/${path_group_id}", mapOf()) } + /** * ### Get information about all the groups in a group * @@ -6014,15 +5957,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_group_groups( group_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.get>( - "/groups/${path_group_id}/groups", - mapOf("fields" to fields), - ) + return this.get>("/groups/${path_group_id}/groups", + mapOf("fields" to fields)) } + /** * ### Adds a new group to a group. * @@ -6033,12 +5975,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun add_group_group( group_id: String, - body: GroupIdForGroupInclusion, - ): SDKResponse { + body: GroupIdForGroupInclusion + ) : SDKResponse { val path_group_id = encodeParam(group_id) return this.post("/groups/${path_group_id}/groups", mapOf(), body) } + /** * ### Get information about all the users directly included in a group. * @@ -6059,22 +6002,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { per_page: Long? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null, - ): SDKResponse { + sorts: String? = null + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.get>( - "/groups/${path_group_id}/users", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - ), - ) + return this.get>("/groups/${path_group_id}/users", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts)) } + /** * ### Adds a new user to a group. * @@ -6085,12 +6025,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun add_group_user( group_id: String, - body: GroupIdForGroupUserInclusion, - ): SDKResponse { + body: GroupIdForGroupUserInclusion + ) : SDKResponse { val path_group_id = encodeParam(group_id) return this.post("/groups/${path_group_id}/users", mapOf(), body) } + /** * ### Removes a user from a group. * @@ -6101,13 +6042,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_group_user( group_id: String, - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_group_id = encodeParam(group_id) val path_user_id = encodeParam(user_id) return this.delete("/groups/${path_group_id}/users/${path_user_id}", mapOf()) } + /** * ### Removes a group from a group. * @@ -6118,13 +6060,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_group_from_group( group_id: String, - deleting_group_id: String, - ): SDKResponse { + deleting_group_id: String + ) : SDKResponse { val path_group_id = encodeParam(group_id) val path_deleting_group_id = encodeParam(deleting_group_id) return this.delete("/groups/${path_group_id}/groups/${path_deleting_group_id}", mapOf()) } + /** * ### Set the value of a user attribute for a group. * @@ -6139,13 +6082,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fun update_user_attribute_group_value( group_id: String, user_attribute_id: String, - body: UserAttributeGroupValue, - ): SDKResponse { + body: UserAttributeGroupValue + ) : SDKResponse { val path_group_id = encodeParam(group_id) val path_user_attribute_id = encodeParam(user_attribute_id) return this.patch("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) } + /** * ### Remove a user attribute value from a group. * @@ -6156,8 +6100,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_attribute_group_value( group_id: String, - user_attribute_id: String, - ): SDKResponse { + user_attribute_id: String + ) : SDKResponse { val path_group_id = encodeParam(group_id) val path_user_attribute_id = encodeParam(user_attribute_id) return this.delete("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf()) @@ -6167,6 +6111,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Homepage: Manage Homepage + /** * ### Get information about the primary homepage's sections. * @@ -6175,18 +6120,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /primary_homepage_sections -> Array */ @JvmOverloads fun all_primary_homepage_sections( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/primary_homepage_sections", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/primary_homepage_sections", + mapOf("fields" to fields)) } //endregion Homepage: Manage Homepage //region Integration: Manage Integrations + /** * ### Get information about all Integration Hubs. * @@ -6195,14 +6139,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /integration_hubs -> Array */ @JvmOverloads fun all_integration_hubs( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/integration_hubs", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/integration_hubs", + mapOf("fields" to fields)) } + /** * ### Create a new Integration Hub. * @@ -6215,15 +6158,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_integration_hub( body: WriteIntegrationHub, - fields: String? = null, - ): SDKResponse { - return this.post( - "/integration_hubs", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/integration_hubs", + mapOf("fields" to fields), body) } + /** * ### Get information about a Integration Hub. * @@ -6234,15 +6175,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun integration_hub( integration_hub_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.get( - "/integration_hubs/${path_integration_hub_id}", - mapOf("fields" to fields), - ) + return this.get("/integration_hubs/${path_integration_hub_id}", + mapOf("fields" to fields)) } + /** * ### Update a Integration Hub definition. * @@ -6257,16 +6197,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_integration_hub( integration_hub_id: String, body: WriteIntegrationHub, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.patch( - "/integration_hubs/${path_integration_hub_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/integration_hubs/${path_integration_hub_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a Integration Hub. * @@ -6275,12 +6213,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /integration_hubs/{integration_hub_id} -> String */ fun delete_integration_hub( - integration_hub_id: String, - ): SDKResponse { + integration_hub_id: String + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) return this.delete("/integration_hubs/${path_integration_hub_id}", mapOf()) } + /** * Checks to see if the user is able to connect to their integration hub * @@ -6291,15 +6230,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun get_integration_hub_health( integration_hub_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.get( - "/integration_hubs/${path_integration_hub_id}/health", - mapOf("fields" to fields), - ) + return this.get("/integration_hubs/${path_integration_hub_id}/health", + mapOf("fields" to fields)) } + /** * Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false. * @@ -6308,12 +6246,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /integration_hubs/{integration_hub_id}/accept_legal_agreement -> IntegrationHub */ fun accept_integration_hub_legal_agreement( - integration_hub_id: String, - ): SDKResponse { + integration_hub_id: String + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) return this.post("/integration_hubs/${path_integration_hub_id}/accept_legal_agreement", mapOf()) } + /** * ### Get information about all Integrations. * @@ -6324,17 +6263,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_integrations( fields: String? = null, - integration_hub_id: String? = null, - ): SDKResponse { - return this.get>( - "/integrations", - mapOf( - "fields" to fields, - "integration_hub_id" to integration_hub_id, - ), - ) + integration_hub_id: String? = null + ) : SDKResponse { + return this.get>("/integrations", + mapOf("fields" to fields, + "integration_hub_id" to integration_hub_id)) } + /** * ### Get information about a Integration. * @@ -6345,15 +6281,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun integration( integration_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.get( - "/integrations/${path_integration_id}", - mapOf("fields" to fields), - ) + return this.get("/integrations/${path_integration_id}", + mapOf("fields" to fields)) } + /** * ### Update parameters on a Integration. * @@ -6366,16 +6301,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_integration( integration_id: String, body: WriteIntegration, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.patch( - "/integrations/${path_integration_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/integrations/${path_integration_id}", + mapOf("fields" to fields), body) } + /** * Returns the Integration form for presentation to the user. * @@ -6386,12 +6319,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun fetch_integration_form( integration_id: String, - body: Map? = null, - ): SDKResponse { + body: Map? = null + ) : SDKResponse { val path_integration_id = encodeParam(integration_id) return this.post("/integrations/${path_integration_id}/form", mapOf(), body) } + /** * Tests the integration to make sure all the settings are working. * @@ -6400,8 +6334,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /integrations/{integration_id}/test -> IntegrationTestResult */ fun test_integration( - integration_id: String, - ): SDKResponse { + integration_id: String + ) : SDKResponse { val path_integration_id = encodeParam(integration_id) return this.post("/integrations/${path_integration_id}/test", mapOf()) } @@ -6410,6 +6344,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region KeyDriverAnalysis: Run Key Driver Analysis + /** * ### Analyze Key Drivers * @@ -6427,8 +6362,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /internal/kda/analyze -> KdaResponsePayload */ fun run_key_driver_analysis( - body: KdaRequestPayload, - ): SDKResponse { + body: KdaRequestPayload + ) : SDKResponse { return this.post("/internal/kda/analyze", mapOf(), body) } @@ -6436,6 +6371,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Look: Run and Manage Looks + /** * ### Get information about all active Looks * @@ -6450,14 +6386,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /looks -> Array */ @JvmOverloads fun all_looks( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/looks", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/looks", + mapOf("fields" to fields)) } + /** * ### Create a Look * @@ -6474,15 +6409,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_look( body: WriteLookWithQuery, - fields: String? = null, - ): SDKResponse { - return this.post( - "/looks", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/looks", + mapOf("fields" to fields), body) } + /** * ### Search Looks * @@ -6551,33 +6484,30 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get>( - "/looks/search", - mapOf( - "id" to id, - "title" to title, - "description" to description, - "content_favorite_id" to content_favorite_id, - "folder_id" to folder_id, - "user_id" to user_id, - "view_count" to view_count, - "deleted" to deleted, - "query_id" to query_id, - "curate" to curate, - "last_viewed_at" to last_viewed_at, - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get>("/looks/search", + mapOf("id" to id, + "title" to title, + "description" to description, + "content_favorite_id" to content_favorite_id, + "folder_id" to folder_id, + "user_id" to user_id, + "view_count" to view_count, + "deleted" to deleted, + "query_id" to query_id, + "curate" to curate, + "last_viewed_at" to last_viewed_at, + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or)) } + /** * ### Get a Look. * @@ -6590,15 +6520,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun look( look_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.get( - "/looks/${path_look_id}", - mapOf("fields" to fields), - ) + return this.get("/looks/${path_look_id}", + mapOf("fields" to fields)) } + /** * ### Modify a Look * @@ -6630,16 +6559,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_look( look_id: String, body: WriteLookWithQuery, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch( - "/looks/${path_look_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/looks/${path_look_id}", + mapOf("fields" to fields), body) } + /** * ### Permanently Delete a Look * @@ -6654,12 +6581,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /looks/{look_id} -> String */ fun delete_look( - look_id: String, - ): SDKResponse { + look_id: String + ) : SDKResponse { val path_look_id = encodeParam(look_id) return this.delete("/looks/${path_look_id}", mapOf()) } + /** * ### Run a Look * @@ -6716,29 +6644,26 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null, - ): SDKResponse { + server_table_calcs: Boolean? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) val path_result_format = encodeParam(result_format) - return this.get( - "/looks/${path_look_id}/run/${path_result_format}", - mapOf( - "limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - ), - ) + return this.get("/looks/${path_look_id}/run/${path_result_format}", + mapOf("limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs)) } + /** * ### Copy an existing look * @@ -6755,15 +6680,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun copy_look( look_id: String, - folder_id: String? = null, - ): SDKResponse { + folder_id: String? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.post( - "/looks/${path_look_id}/copy", - mapOf("folder_id" to folder_id), - ) + return this.post("/looks/${path_look_id}/copy", + mapOf("folder_id" to folder_id)) } + /** * ### Move an existing look * @@ -6779,15 +6703,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun move_look( look_id: String, - folder_id: String, - ): SDKResponse { + folder_id: String + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch( - "/looks/${path_look_id}/move", - mapOf("folder_id" to folder_id), - ) + return this.patch("/looks/${path_look_id}/move", + mapOf("folder_id" to folder_id)) } + /** * ### Update look certification * @@ -6798,8 +6721,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_look_certification( look_id: String, - body: WriteCertification, - ): SDKResponse { + body: WriteCertification + ) : SDKResponse { val path_look_id = encodeParam(look_id) return this.patch("/looks/${path_look_id}/certification", mapOf(), body) } @@ -6808,6 +6731,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region LookmlModel: Manage LookML Models + /** * ### Get information about all lookml models. * @@ -6828,22 +6752,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { exclude_empty: Boolean? = null, exclude_hidden: Boolean? = null, include_internal: Boolean? = null, - include_self_service: Boolean? = null, - ): SDKResponse { - return this.get>( - "/lookml_models", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "exclude_empty" to exclude_empty, - "exclude_hidden" to exclude_hidden, - "include_internal" to include_internal, - "include_self_service" to include_self_service, - ), - ) + include_self_service: Boolean? = null + ) : SDKResponse { + return this.get>("/lookml_models", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "exclude_empty" to exclude_empty, + "exclude_hidden" to exclude_hidden, + "include_internal" to include_internal, + "include_self_service" to include_self_service)) } + /** * ### Create a lookml model using the specified configuration. * @@ -6852,11 +6773,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /lookml_models -> LookmlModel */ fun create_lookml_model( - body: WriteLookmlModel, - ): SDKResponse { + body: WriteLookmlModel + ) : SDKResponse { return this.post("/lookml_models", mapOf(), body) } + /** * ### Get information about a lookml model. * @@ -6867,15 +6789,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun lookml_model( lookml_model_name: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) - return this.get( - "/lookml_models/${path_lookml_model_name}", - mapOf("fields" to fields), - ) + return this.get("/lookml_models/${path_lookml_model_name}", + mapOf("fields" to fields)) } + /** * ### Update a lookml model using the specified configuration. * @@ -6886,12 +6807,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_lookml_model( lookml_model_name: String, - body: WriteLookmlModel, - ): SDKResponse { + body: WriteLookmlModel + ) : SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) return this.patch("/lookml_models/${path_lookml_model_name}", mapOf(), body) } + /** * ### Delete a lookml model. * @@ -6900,12 +6822,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /lookml_models/{lookml_model_name} -> String */ fun delete_lookml_model( - lookml_model_name: String, - ): SDKResponse { + lookml_model_name: String + ) : SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) return this.delete("/lookml_models/${path_lookml_model_name}", mapOf()) } + /** * ### Get information about a lookml model explore. * @@ -6920,23 +6843,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { lookml_model_name: String, explore_name: String, fields: String? = null, - add_drills_metadata: Boolean? = null, - ): SDKResponse { + add_drills_metadata: Boolean? = null + ) : SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) val path_explore_name = encodeParam(explore_name) - return this.get( - "/lookml_models/${path_lookml_model_name}/explores/${path_explore_name}", - mapOf( - "fields" to fields, - "add_drills_metadata" to add_drills_metadata, - ), - ) + return this.get("/lookml_models/${path_lookml_model_name}/explores/${path_explore_name}", + mapOf("fields" to fields, + "add_drills_metadata" to add_drills_metadata)) } //endregion LookmlModel: Manage LookML Models //region Metadata: Connection Metadata Features + /** * ### Field name suggestions for a model and view * @@ -6971,20 +6891,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { view_name: String, field_name: String, term: String? = null, - filters: Any? = null, - ): SDKResponse { + filters: Any? = null + ) : SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) val path_field_name = encodeParam(field_name) - return this.get( - "/models/${path_model_name}/views/${path_view_name}/fields/${path_field_name}/suggestions", - mapOf( - "term" to term, - "filters" to filters, - ), - ) + return this.get("/models/${path_model_name}/views/${path_view_name}/fields/${path_field_name}/suggestions", + mapOf("term" to term, + "filters" to filters)) } + /** * ### Get a single model * @@ -6993,12 +6910,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /models/{model_name} -> Model */ fun get_model( - model_name: String, - ): SDKResponse { + model_name: String + ) : SDKResponse { val path_model_name = encodeParam(model_name) return this.get("/models/${path_model_name}", mapOf()) } + /** * ### List databases available to this connection * @@ -7015,12 +6933,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /connections/{connection_name}/databases -> Array */ fun connection_databases( - connection_name: String, - ): SDKResponse { + connection_name: String + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) return this.get>("/connections/${path_connection_name}/databases", mapOf()) } + /** * ### Retrieve metadata features for this connection * @@ -7033,15 +6952,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun connection_features( connection_name: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get( - "/connections/${path_connection_name}/features", - mapOf("fields" to fields), - ) + return this.get("/connections/${path_connection_name}/features", + mapOf("fields" to fields)) } + /** * ### Get the list of schemas and tables for a connection * @@ -7056,19 +6974,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { connection_name: String, database: String? = null, cache: Boolean? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get>( - "/connections/${path_connection_name}/schemas", - mapOf( - "database" to database, - "cache" to cache, - "fields" to fields, - ), - ) + return this.get>("/connections/${path_connection_name}/schemas", + mapOf("database" to database, + "cache" to cache, + "fields" to fields)) } + /** * ### Get the list of tables for a schema * @@ -7094,22 +7009,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache: Boolean? = null, fields: String? = null, table_filter: String? = null, - table_limit: Long? = null, - ): SDKResponse { + table_limit: Long? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get>( - "/connections/${path_connection_name}/tables", - mapOf( - "database" to database, - "schema_name" to schema_name, - "cache" to cache, - "fields" to fields, - "table_filter" to table_filter, - "table_limit" to table_limit, - ), - ) + return this.get>("/connections/${path_connection_name}/tables", + mapOf("database" to database, + "schema_name" to schema_name, + "cache" to cache, + "fields" to fields, + "table_filter" to table_filter, + "table_limit" to table_limit)) } + /** * ### Get the columns (and therefore also the tables) in a specific schema * @@ -7130,22 +7042,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache: Boolean? = null, table_limit: Long? = null, table_names: String? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get>( - "/connections/${path_connection_name}/columns", - mapOf( - "database" to database, - "schema_name" to schema_name, - "cache" to cache, - "table_limit" to table_limit, - "table_names" to table_names, - "fields" to fields, - ), - ) + return this.get>("/connections/${path_connection_name}/columns", + mapOf("database" to database, + "schema_name" to schema_name, + "cache" to cache, + "table_limit" to table_limit, + "table_names" to table_names, + "fields" to fields)) } + /** * ### Search a connection for columns matching the specified name * @@ -7160,18 +7069,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun connection_search_columns( connection_name: String, column_name: String? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get>( - "/connections/${path_connection_name}/search_columns", - mapOf( - "column_name" to column_name, - "fields" to fields, - ), - ) + return this.get>("/connections/${path_connection_name}/search_columns", + mapOf("column_name" to column_name, + "fields" to fields)) } + /** * ### Connection cost estimating * @@ -7188,20 +7094,18 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun connection_cost_estimate( connection_name: String, body: CreateCostEstimate, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.post( - "/connections/${path_connection_name}/cost_estimate", - mapOf("fields" to fields), - body, - ) + return this.post("/connections/${path_connection_name}/cost_estimate", + mapOf("fields" to fields), body) } //endregion Metadata: Connection Metadata Features //region Project: Manage Projects + /** * ### Search Continuous Integration Runs for a project. * @@ -7228,24 +7132,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { trigger_type: String? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null, - ): SDKResponse { + sorts: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>( - "/projects/${path_project_id}/continuous_integration/runs/search", - mapOf( - "fields" to fields, - "suite_id" to suite_id, - "status" to status, - "user_id" to user_id, - "trigger_type" to trigger_type, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - ), - ) + return this.get>("/projects/${path_project_id}/continuous_integration/runs/search", + mapOf("fields" to fields, + "suite_id" to suite_id, + "status" to status, + "user_id" to user_id, + "trigger_type" to trigger_type, + "limit" to limit, + "offset" to offset, + "sorts" to sorts)) } + /** * ### Fetches Multiple CI Suite Configurations for Project. * @@ -7262,20 +7163,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, limit: Long? = null, offset: Long? = null, - created_at: Date? = null, - ): SDKResponse { + created_at: Date? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>( - "/projects/${path_project_id}/continuous_integration/suites", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "created_at" to created_at, - ), - ) + return this.get>("/projects/${path_project_id}/continuous_integration/suites", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "created_at" to created_at)) } + /** * ### Fetches a CI Suite Configuration. * @@ -7288,16 +7186,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_continuous_integration_suite( project_id: String, body: WriteProjectCISuite, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/continuous_integration/suites", - mapOf("fields" to fields), - body, - ) + return this.post("/projects/${path_project_id}/continuous_integration/suites", + mapOf("fields" to fields), body) } + /** * ### Fetches a CI Suite Configuration. * @@ -7310,16 +7206,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun get_continuous_integration_suite( project_id: String, suite_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_suite_id = encodeParam(suite_id) - return this.get( - "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields)) } + /** * ### Updates a Continuous Integration Suite. * @@ -7334,17 +7229,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { project_id: String, suite_id: String, body: WriteProjectCISuite, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_suite_id = encodeParam(suite_id) - return this.patch( - "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields), body) } + /** * ### Deletes a Continuous Integration Suite. * @@ -7357,16 +7250,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun delete_continuous_integration_suite( project_id: String, suite_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_suite_id = encodeParam(suite_id) - return this.delete( - "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", - mapOf("fields" to fields), - ) + return this.delete("/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields)) } + /** * ### Creates and queues a Continuous Integration Run. * @@ -7379,16 +7271,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_continuous_integration_run( project_id: String, body: CreateContinuousIntegrationRunRequest, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/continuous_integration/runs", - mapOf("fields" to fields), - body, - ) + return this.post("/projects/${path_project_id}/continuous_integration/runs", + mapOf("fields" to fields), body) } + /** * ### Duplicates and queues a Continuous Integration Run. * @@ -7401,16 +7291,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun duplicate_continuous_integration_run( project_id: String, run_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_run_id = encodeParam(run_id) - return this.post( - "/projects/${path_project_id}/continuous_integration/runs/${path_run_id}/duplicate", - mapOf("fields" to fields), - ) + return this.post("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}/duplicate", + mapOf("fields" to fields)) } + /** * ### Gets a Continuous Integration run. * @@ -7423,16 +7312,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun get_continuous_integration_run( project_id: String, run_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_run_id = encodeParam(run_id) - return this.get( - "/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", + mapOf("fields" to fields)) } + /** * ### Cancels a Continuous Integration Run. * @@ -7443,13 +7331,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun cancel_continuous_integration_run( project_id: String, - run_id: String, - ): SDKResponse { + run_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_run_id = encodeParam(run_id) return this.delete("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", mapOf()) } + /** * ### Generate Lockfile for All LookML Dependencies * @@ -7466,15 +7355,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun lock_all( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/manifest/lock_all", - mapOf("fields" to fields), - ) + return this.post("/projects/${path_project_id}/manifest/lock_all", + mapOf("fields" to fields)) } + /** * ### Get All Git Branches * @@ -7485,12 +7373,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git_branches -> Array */ fun all_git_branches( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.get>("/projects/${path_project_id}/git_branches", mapOf()) } + /** * ### Get the Current Git Branch * @@ -7501,12 +7390,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git_branch -> GitBranch */ fun git_branch( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.get("/projects/${path_project_id}/git_branch", mapOf()) } + /** * ### Checkout and/or reset --hard an existing Git Branch * @@ -7525,12 +7415,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_git_branch( project_id: String, - body: WriteGitBranch, - ): SDKResponse { + body: WriteGitBranch + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.put("/projects/${path_project_id}/git_branch", mapOf(), body) } + /** * ### Create and Checkout a Git Branch * @@ -7548,12 +7439,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun create_git_branch( project_id: String, - body: WriteGitBranch, - ): SDKResponse { + body: WriteGitBranch + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/git_branch", mapOf(), body) } + /** * ### Get the specified Git Branch * @@ -7566,13 +7458,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun find_git_branch( project_id: String, - branch_name: String, - ): SDKResponse { + branch_name: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_branch_name = encodeParam(branch_name) return this.get("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) } + /** * ### Delete the specified Git Branch * @@ -7585,13 +7478,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_git_branch( project_id: String, - branch_name: String, - ): SDKResponse { + branch_name: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_branch_name = encodeParam(branch_name) return this.delete("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) } + /** * ### Deploy a Remote Branch or Ref to Production * @@ -7612,18 +7506,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun deploy_ref_to_production( project_id: String, branch: String? = null, - ref: String? = null, - ): SDKResponse { + ref: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/deploy_ref_to_production", - mapOf( - "branch" to branch, - "ref" to ref, - ), - ) + return this.post("/projects/${path_project_id}/deploy_ref_to_production", + mapOf("branch" to branch, + "ref" to ref)) } + /** * ### Asynchronously Deploy a Remote Branch or Ref to Production * @@ -7641,18 +7532,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun async_deploy_ref_to_production( project_id: String, branch: String? = null, - ref: String? = null, - ): SDKResponse { + 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, - ), - ) + 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. @@ -7664,13 +7552,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun async_deploy_status( project_id: String, - deployment_id: Long, - ): SDKResponse { + 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 * @@ -7690,12 +7579,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/deploy_to_production -> String */ fun deploy_to_production( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/deploy_to_production", mapOf()) } + /** * ### Reset a project to the revision of the project that is in production. * @@ -7706,12 +7596,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/reset_to_production -> String */ fun reset_project_to_production( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/reset_to_production", mapOf()) } + /** * ### Reset a project development branch to the revision of the project that is on the remote. * @@ -7722,12 +7613,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/reset_to_remote -> String */ fun reset_project_to_remote( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/reset_to_remote", mapOf()) } + /** * ### Pull from Production * Pulls changes from the remote production branch into the current development workspace. @@ -7737,12 +7629,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/pull_from_production -> String */ fun pull_project_from_production( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/pull_from_production", mapOf()) } + /** * ### Pull from Remote * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. @@ -7752,12 +7645,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/pull_from_remote -> String */ fun pull_project_from_remote( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/pull_from_remote", mapOf()) } + /** * ### Get All Projects * @@ -7768,14 +7662,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects -> Array */ @JvmOverloads fun all_projects( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/projects", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/projects", + mapOf("fields" to fields)) } + /** * ### Create A Project * @@ -7790,11 +7683,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects -> Project */ fun create_project( - body: WriteProject, - ): SDKResponse { + body: WriteProject + ) : SDKResponse { return this.post("/projects", mapOf(), body) } + /** * ### Get A Project * @@ -7807,15 +7701,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}", + mapOf("fields" to fields)) } + /** * ### Update Project Configuration * @@ -7853,16 +7746,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_project( project_id: String, body: WriteProject, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.patch( - "/projects/${path_project_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/projects/${path_project_id}", + mapOf("fields" to fields), body) } + /** * ### Get A Projects Manifest object * @@ -7873,12 +7764,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/manifest -> Manifest */ fun manifest( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.get("/projects/${path_project_id}/manifest", mapOf()) } + /** * ### Git Deploy Key * @@ -7889,12 +7781,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git/deploy_key -> String */ fun git_deploy_key( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.get("/projects/${path_project_id}/git/deploy_key", mapOf()) } + /** * ### Create Git Deploy Key * @@ -7911,12 +7804,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/git/deploy_key -> String */ fun create_git_deploy_key( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) return this.post("/projects/${path_project_id}/git/deploy_key", mapOf()) } + /** * ### Get Cached Project Validation Results * @@ -7938,15 +7832,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project_validation_results( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/validate", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/validate", + mapOf("fields" to fields)) } + /** * ### Validate Project * @@ -7965,15 +7858,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun validate_project( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/validate", - mapOf("fields" to fields), - ) + return this.post("/projects/${path_project_id}/validate", + mapOf("fields" to fields)) } + /** * ### Get Project Workspace * @@ -7986,15 +7878,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project_workspace( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/current_workspace", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/current_workspace", + mapOf("fields" to fields)) } + /** * ### Get All Project Files * @@ -8007,15 +7898,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_project_files( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>( - "/projects/${path_project_id}/files", - mapOf("fields" to fields), - ) + return this.get>("/projects/${path_project_id}/files", + mapOf("fields" to fields)) } + /** * ### Get Project File Info * @@ -8030,18 +7920,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun project_file( project_id: String, file_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/files/file", - mapOf( - "file_id" to file_id, - "fields" to fields, - ), - ) + return this.get("/projects/${path_project_id}/files/file", + mapOf("file_id" to file_id, + "fields" to fields)) } + /** * ### Get All Git Connection Tests * @@ -8058,15 +7945,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_git_connection_tests( project_id: String, - remote_url: String? = null, - ): SDKResponse { + remote_url: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>( - "/projects/${path_project_id}/git_connection_tests", - mapOf("remote_url" to remote_url), - ) + return this.get>("/projects/${path_project_id}/git_connection_tests", + mapOf("remote_url" to remote_url)) } + /** * ### Run a git connection test * @@ -8087,19 +7973,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { project_id: String, test_id: String, remote_url: String? = null, - use_production: String? = null, - ): SDKResponse { + use_production: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_test_id = encodeParam(test_id) - return this.get( - "/projects/${path_project_id}/git_connection_tests/${path_test_id}", - mapOf( - "remote_url" to remote_url, - "use_production" to use_production, - ), - ) + return this.get("/projects/${path_project_id}/git_connection_tests/${path_test_id}", + mapOf("remote_url" to remote_url, + "use_production" to use_production)) } + /** * ### Get All LookML Tests * @@ -8114,15 +7997,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_lookml_tests( project_id: String, - file_id: String? = null, - ): SDKResponse { + file_id: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>( - "/projects/${path_project_id}/lookml_tests", - mapOf("file_id" to file_id), - ) + return this.get>("/projects/${path_project_id}/lookml_tests", + mapOf("file_id" to file_id)) } + /** * ### Run LookML Tests * @@ -8139,19 +8021,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { project_id: String, file_id: String? = null, test: String? = null, - model: String? = null, - ): SDKResponse { + model: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get>( - "/projects/${path_project_id}/lookml_tests/run", - mapOf( - "file_id" to file_id, - "test" to test, - "model" to model, - ), - ) + return this.get>("/projects/${path_project_id}/lookml_tests/run", + mapOf("file_id" to file_id, + "test" to test, + "model" to model)) } + /** * ### Creates a tag for the most recent commit, or a specific ref is a SHA is provided * @@ -8168,20 +8047,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { body: WriteProject, commit_sha: String? = null, tag_name: String? = null, - tag_message: String? = null, - ): SDKResponse { + tag_message: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/tag", - mapOf( - "commit_sha" to commit_sha, - "tag_name" to tag_name, - "tag_message" to tag_message, - ), - body, - ) + return this.post("/projects/${path_project_id}/tag", + mapOf("commit_sha" to commit_sha, + "tag_name" to tag_name, + "tag_message" to tag_message), body) } + /** * ### Configure Repository Credential for a remote dependency * @@ -8199,13 +8074,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fun update_repository_credential( root_project_id: String, credential_id: String, - body: WriteRepositoryCredential, - ): SDKResponse { + body: WriteRepositoryCredential + ) : SDKResponse { val path_root_project_id = encodeParam(root_project_id) val path_credential_id = encodeParam(credential_id) return this.put("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf(), body) } + /** * ### Repository Credential for a remote dependency * @@ -8221,13 +8097,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_repository_credential( root_project_id: String, - credential_id: String, - ): SDKResponse { + credential_id: String + ) : SDKResponse { val path_root_project_id = encodeParam(root_project_id) val path_credential_id = encodeParam(credential_id) return this.delete("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf()) } + /** * ### Get all Repository Credentials for a project * @@ -8238,8 +8115,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{root_project_id}/credentials -> Array */ fun get_all_repository_credentials( - root_project_id: String, - ): SDKResponse { + root_project_id: String + ) : SDKResponse { val path_root_project_id = encodeParam(root_project_id) return this.get>("/projects/${path_root_project_id}/credentials", mapOf()) } @@ -8248,6 +8125,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Query: Run and Manage Queries + /** * ### Create an async query task * @@ -8285,27 +8163,23 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { path_prefix: String? = null, rebuild_pdts: Boolean? = null, server_table_calcs: Boolean? = null, - fields: String? = null, - ): SDKResponse { - return this.post( - "/query_tasks", - mapOf( - "limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - "fields" to fields, - ), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/query_tasks", + mapOf("limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + "fields" to fields), body) } + /** * ### Fetch results of multiple async queries * @@ -8320,14 +8194,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /query_tasks/multi_results -> Map */ fun query_task_multi_results( - query_task_ids: DelimArray, - ): SDKResponse { - return this.get>( - "/query_tasks/multi_results", - mapOf("query_task_ids" to query_task_ids), - ) + query_task_ids: DelimArray + ) : SDKResponse { + return this.get>("/query_tasks/multi_results", + mapOf("query_task_ids" to query_task_ids)) } + /** * ### Get Query Task details * @@ -8344,15 +8217,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query_task( query_task_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.get( - "/query_tasks/${path_query_task_id}", - mapOf("fields" to fields), - ) + return this.get("/query_tasks/${path_query_task_id}", + mapOf("fields" to fields)) } + /** * ### Get Async Query Results * @@ -8383,12 +8255,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /query_tasks/{query_task_id}/results -> String */ fun query_task_results( - query_task_id: String, - ): SDKResponse { + query_task_id: String + ) : SDKResponse { val path_query_task_id = encodeParam(query_task_id) return this.get("/query_tasks/${path_query_task_id}/results", mapOf()) } + /** * ### Get a previously created query by id. * @@ -8415,15 +8288,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query( query_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_query_id = encodeParam(query_id) - return this.get( - "/queries/${path_query_id}", - mapOf("fields" to fields), - ) + return this.get("/queries/${path_query_id}", + mapOf("fields" to fields)) } + /** * ### Get the query for a given query slug. * @@ -8450,15 +8322,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query_for_slug( slug: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_slug = encodeParam(slug) - return this.get( - "/queries/slug/${path_slug}", - mapOf("fields" to fields), - ) + return this.get("/queries/slug/${path_slug}", + mapOf("fields" to fields)) } + /** * ### Create a query. * @@ -8476,15 +8347,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_query( body: WriteQuery, - fields: String? = null, - ): SDKResponse { - return this.post( - "/queries", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/queries", + mapOf("fields" to fields), body) } + /** * ### Run a saved query. * @@ -8544,29 +8413,26 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null, - ): SDKResponse { + server_table_calcs: Boolean? = null + ) : SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.get( - "/queries/${path_query_id}/run/${path_result_format}", - mapOf( - "limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - ), - ) + return this.get("/queries/${path_query_id}/run/${path_result_format}", + mapOf("limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs)) } + /** * ### Run the query that is specified inline in the posted body. * @@ -8655,29 +8521,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null, - ): SDKResponse { + server_table_calcs: Boolean? = null + ) : SDKResponse { val path_result_format = encodeParam(result_format) - return this.post( - "/queries/run/${path_result_format}", - mapOf( - "limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - ), - body, - ) + return this.post("/queries/run/${path_result_format}", + mapOf("limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs), body) } + /** * ### Run an URL encoded query. * @@ -8746,14 +8608,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fun run_url_encoded_query( model_name: String, view_name: String, - result_format: String, - ): SDKResponse { + result_format: String + ) : SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) val path_result_format = encodeParam(result_format) return this.get("/queries/models/${path_model_name}/views/${path_view_name}/run/${path_result_format}", mapOf()) } + /** * ### Get Merge Query * @@ -8766,15 +8629,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun merge_query( merge_query_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_merge_query_id = encodeParam(merge_query_id) - return this.get( - "/merge_queries/${path_merge_query_id}", - mapOf("fields" to fields), - ) + return this.get("/merge_queries/${path_merge_query_id}", + mapOf("fields" to fields)) } + /** * ### Create Merge Query * @@ -8801,24 +8663,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_merge_query( body: WriteMergeQuery? = null, - fields: String? = null, - ): SDKResponse { - return this.post( - "/merge_queries", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/merge_queries", + mapOf("fields" to fields), body) } + /** * Get information about all running queries. * * GET /running_queries -> Array */ - fun all_running_queries(): SDKResponse { + fun all_running_queries( + + ) : SDKResponse { return this.get>("/running_queries", mapOf()) } + /** * Kill a query with a specific query_task_id. * @@ -8827,12 +8690,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /running_queries/{query_task_id} -> String */ fun kill_query( - query_task_id: String, - ): SDKResponse { + query_task_id: String + ) : SDKResponse { val path_query_task_id = encodeParam(query_task_id) return this.delete("/running_queries/${path_query_task_id}", mapOf()) } + /** * ### Create a SQL Runner Query * @@ -8843,11 +8707,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /sql_queries -> SqlQuery */ fun create_sql_query( - body: SqlQueryCreate, - ): SDKResponse { + body: SqlQueryCreate + ) : SDKResponse { return this.post("/sql_queries", mapOf(), body) } + /** * Get a SQL Runner query. * @@ -8856,12 +8721,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /sql_queries/{slug} -> SqlQuery */ fun sql_query( - slug: String, - ): SDKResponse { + slug: String + ) : SDKResponse { val path_slug = encodeParam(slug) return this.get("/sql_queries/${path_slug}", mapOf()) } + /** * Execute a SQL Runner query in a given result_format. * @@ -8874,20 +8740,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun run_sql_query( slug: String, result_format: String, - download: String? = null, - ): SDKResponse { + download: String? = null + ) : SDKResponse { val path_slug = encodeParam(slug) val path_result_format = encodeParam(result_format) - return this.post( - "/sql_queries/${path_slug}/run/${path_result_format}", - mapOf("download" to download), - ) + return this.post("/sql_queries/${path_slug}/run/${path_result_format}", + mapOf("download" to download)) } //endregion Query: Run and Manage Queries //region RenderTask: Manage Render Tasks + /** * ### Create a new task to render a look to an image. * @@ -8908,20 +8773,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) val path_result_format = encodeParam(result_format) - return this.post( - "/render_tasks/looks/${path_look_id}/${path_result_format}", - mapOf( - "width" to width, - "height" to height, - "fields" to fields, - ), - ) + return this.post("/render_tasks/looks/${path_look_id}/${path_result_format}", + mapOf("width" to width, + "height" to height, + "fields" to fields)) } + /** * ### Create a new task to render an existing query to an image. * @@ -8942,20 +8804,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.post( - "/render_tasks/queries/${path_query_id}/${path_result_format}", - mapOf( - "width" to width, - "height" to height, - "fields" to fields, - ), - ) + return this.post("/render_tasks/queries/${path_query_id}/${path_result_format}", + mapOf("width" to width, + "height" to height, + "fields" to fields)) } + /** * ### Create a new task to render a dashboard to a document or image. * @@ -8986,25 +8845,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { pdf_paper_size: String? = null, pdf_landscape: Boolean? = null, long_tables: Boolean? = null, - theme: String? = null, - ): SDKResponse { + theme: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) val path_result_format = encodeParam(result_format) - return this.post( - "/render_tasks/dashboards/${path_dashboard_id}/${path_result_format}", - mapOf( - "width" to width, - "height" to height, - "fields" to fields, - "pdf_paper_size" to pdf_paper_size, - "pdf_landscape" to pdf_landscape, - "long_tables" to long_tables, - "theme" to theme, - ), - body, - ) + return this.post("/render_tasks/dashboards/${path_dashboard_id}/${path_result_format}", + mapOf("width" to width, + "height" to height, + "fields" to fields, + "pdf_paper_size" to pdf_paper_size, + "pdf_landscape" to pdf_landscape, + "long_tables" to long_tables, + "theme" to theme), body) } + /** * ### Get information about a render task. * @@ -9019,15 +8874,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun render_task( render_task_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_render_task_id = encodeParam(render_task_id) - return this.get( - "/render_tasks/${path_render_task_id}", - mapOf("fields" to fields), - ) + return this.get("/render_tasks/${path_render_task_id}", + mapOf("fields" to fields)) } + /** * ### Get the document or image produced by a completed render task. * @@ -9054,12 +8908,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * **Note**: Binary content is returned by this method. */ fun render_task_results( - render_task_id: String, - ): SDKResponse { + render_task_id: String + ) : SDKResponse { val path_render_task_id = encodeParam(render_task_id) return this.get("/render_tasks/${path_render_task_id}/results", mapOf()) } + /** * ### Create a new task to render a dashboard element to an image. * @@ -9080,24 +8935,21 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) val path_result_format = encodeParam(result_format) - return this.post( - "/render_tasks/dashboard_elements/${path_dashboard_element_id}/${path_result_format}", - mapOf( - "width" to width, - "height" to height, - "fields" to fields, - ), - ) + return this.post("/render_tasks/dashboard_elements/${path_dashboard_element_id}/${path_result_format}", + mapOf("width" to width, + "height" to height, + "fields" to fields)) } //endregion RenderTask: Manage Render Tasks //region Report: Report + /** * ### Search Reports * @@ -9145,28 +8997,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, limit: Long? = null, fields: String? = null, - next_page_token: String? = null, - ): SDKResponse { - return this.get>( - "/reports/search", - mapOf( - "folder_id" to folder_id, - "favorite" to favorite, - "recent" to recent, - "id" to id, - "title" to title, - "sorts" to sorts, - "limit" to limit, - "fields" to fields, - "next_page_token" to next_page_token, - ), - ) + next_page_token: String? = null + ) : SDKResponse { + return this.get>("/reports/search", + mapOf("folder_id" to folder_id, + "favorite" to favorite, + "recent" to recent, + "id" to id, + "title" to title, + "sorts" to sorts, + "limit" to limit, + "fields" to fields, + "next_page_token" to next_page_token)) } //endregion Report: Report //region Role: Manage Roles + /** * ### Search model sets * Returns all model set records that match the given search criteria. @@ -9214,25 +9063,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { all_access: Boolean? = null, built_in: Boolean? = null, filter_or: Boolean? = null, - models: String? = null, - ): SDKResponse { - return this.get>( - "/model_sets/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "all_access" to all_access, - "built_in" to built_in, - "filter_or" to filter_or, - "models" to models, - ), - ) + models: String? = null + ) : SDKResponse { + return this.get>("/model_sets/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "all_access" to all_access, + "built_in" to built_in, + "filter_or" to filter_or, + "models" to models)) } + /** * ### Get information about the model set with a specific id. * @@ -9243,15 +9089,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun model_set( model_set_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_model_set_id = encodeParam(model_set_id) - return this.get( - "/model_sets/${path_model_set_id}", - mapOf("fields" to fields), - ) + return this.get("/model_sets/${path_model_set_id}", + mapOf("fields" to fields)) } + /** * ### Update information about the model set with a specific id. * @@ -9262,12 +9107,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_model_set( model_set_id: String, - body: WriteModelSet, - ): SDKResponse { + body: WriteModelSet + ) : SDKResponse { val path_model_set_id = encodeParam(model_set_id) return this.patch("/model_sets/${path_model_set_id}", mapOf(), body) } + /** * ### Delete the model set with a specific id. * @@ -9276,12 +9122,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /model_sets/{model_set_id} -> String */ fun delete_model_set( - model_set_id: String, - ): SDKResponse { + model_set_id: String + ) : SDKResponse { val path_model_set_id = encodeParam(model_set_id) return this.delete("/model_sets/${path_model_set_id}", mapOf()) } + /** * ### Get information about all model sets. * @@ -9290,14 +9137,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /model_sets -> Array */ @JvmOverloads fun all_model_sets( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/model_sets", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/model_sets", + mapOf("fields" to fields)) } + /** * ### Create a model set with the specified information. Model sets are used by Roles. * @@ -9306,20 +9152,24 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /model_sets -> ModelSet */ fun create_model_set( - body: WriteModelSet, - ): SDKResponse { + body: WriteModelSet + ) : SDKResponse { return this.post("/model_sets", mapOf(), body) } + /** * ### Get all supported permissions. * * GET /permissions -> Array */ - fun all_permissions(): SDKResponse { + fun all_permissions( + + ) : SDKResponse { return this.get>("/permissions", mapOf()) } + /** * ### Search permission sets * Returns all permission set records that match the given search criteria. @@ -9367,25 +9217,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { all_access: Boolean? = null, built_in: Boolean? = null, filter_or: Boolean? = null, - permissions: String? = null, - ): SDKResponse { - return this.get>( - "/permission_sets/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "all_access" to all_access, - "built_in" to built_in, - "filter_or" to filter_or, - "permissions" to permissions, - ), - ) + permissions: String? = null + ) : SDKResponse { + return this.get>("/permission_sets/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "all_access" to all_access, + "built_in" to built_in, + "filter_or" to filter_or, + "permissions" to permissions)) } + /** * ### Get information about the permission set with a specific id. * @@ -9396,15 +9243,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun permission_set( permission_set_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) - return this.get( - "/permission_sets/${path_permission_set_id}", - mapOf("fields" to fields), - ) + return this.get("/permission_sets/${path_permission_set_id}", + mapOf("fields" to fields)) } + /** * ### Update information about the permission set with a specific id. * Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. @@ -9416,12 +9262,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_permission_set( permission_set_id: String, - body: WritePermissionSet, - ): SDKResponse { + body: WritePermissionSet + ) : SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) return this.patch("/permission_sets/${path_permission_set_id}", mapOf(), body) } + /** * ### Delete the permission set with a specific id. * @@ -9430,12 +9277,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /permission_sets/{permission_set_id} -> String */ fun delete_permission_set( - permission_set_id: String, - ): SDKResponse { + permission_set_id: String + ) : SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) return this.delete("/permission_sets/${path_permission_set_id}", mapOf()) } + /** * ### Get information about all permission sets. * @@ -9444,14 +9292,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /permission_sets -> Array */ @JvmOverloads fun all_permission_sets( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/permission_sets", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/permission_sets", + mapOf("fields" to fields)) } + /** * ### Create a permission set with the specified information. Permission sets are used by Roles. * Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. @@ -9461,11 +9308,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /permission_sets -> PermissionSet */ fun create_permission_set( - body: WritePermissionSet, - ): SDKResponse { + body: WritePermissionSet + ) : SDKResponse { return this.post("/permission_sets", mapOf(), body) } + /** * ### Get information about all roles. * @@ -9478,18 +9326,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_roles( fields: String? = null, ids: DelimArray? = null, - get_all_support_roles: Boolean? = null, - ): SDKResponse { - return this.get>( - "/roles", - mapOf( - "fields" to fields, - "ids" to ids, - "get_all_support_roles" to get_all_support_roles, - ), - ) + get_all_support_roles: Boolean? = null + ) : SDKResponse { + return this.get>("/roles", + mapOf("fields" to fields, + "ids" to ids, + "get_all_support_roles" to get_all_support_roles)) } + /** * ### Create a role with the specified information. * @@ -9498,11 +9343,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /roles -> Role */ fun create_role( - body: WriteRole, - ): SDKResponse { + body: WriteRole + ) : SDKResponse { return this.post("/roles", mapOf(), body) } + /** * ### Search roles * @@ -9552,25 +9398,22 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { permission_set_ids: String? = null, name: String? = null, built_in: Boolean? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get>( - "/roles/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "model_set_ids" to model_set_ids, - "permission_set_ids" to permission_set_ids, - "name" to name, - "built_in" to built_in, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get>("/roles/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "model_set_ids" to model_set_ids, + "permission_set_ids" to permission_set_ids, + "name" to name, + "built_in" to built_in, + "filter_or" to filter_or)) } + /** * ### Search roles include user count * @@ -9617,23 +9460,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, name: String? = null, built_in: Boolean? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get>( - "/roles/search/with_user_count", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "built_in" to built_in, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get>("/roles/search/with_user_count", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "built_in" to built_in, + "filter_or" to filter_or)) } + /** * ### Get information about the role with a specific id. * @@ -9642,12 +9482,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /roles/{role_id} -> Role */ fun role( - role_id: String, - ): SDKResponse { + role_id: String + ) : SDKResponse { val path_role_id = encodeParam(role_id) return this.get("/roles/${path_role_id}", mapOf()) } + /** * ### Update information about the role with a specific id. * @@ -9658,12 +9499,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_role( role_id: String, - body: WriteRole, - ): SDKResponse { + body: WriteRole + ) : SDKResponse { val path_role_id = encodeParam(role_id) return this.patch("/roles/${path_role_id}", mapOf(), body) } + /** * ### Delete the role with a specific id. * @@ -9672,12 +9514,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /roles/{role_id} -> String */ fun delete_role( - role_id: String, - ): SDKResponse { + role_id: String + ) : SDKResponse { val path_role_id = encodeParam(role_id) return this.delete("/roles/${path_role_id}", mapOf()) } + /** * ### Get information about all the groups with the role that has a specific id. * @@ -9688,15 +9531,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun role_groups( role_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.get>( - "/roles/${path_role_id}/groups", - mapOf("fields" to fields), - ) + return this.get>("/roles/${path_role_id}/groups", + mapOf("fields" to fields)) } + /** * ### Set all groups for a role, removing all existing group associations from that role. * @@ -9709,12 +9551,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun set_role_groups( role_id: String, - body: Array, - ): SDKResponse { + body: Array + ) : SDKResponse { val path_role_id = encodeParam(role_id) return this.put>("/roles/${path_role_id}/groups", mapOf(), body) } + /** * ### Get information about all the users with the role that has a specific id. * @@ -9727,18 +9570,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun role_users( role_id: String, fields: String? = null, - direct_association_only: Boolean? = null, - ): SDKResponse { + direct_association_only: Boolean? = null + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.get>( - "/roles/${path_role_id}/users", - mapOf( - "fields" to fields, - "direct_association_only" to direct_association_only, - ), - ) + return this.get>("/roles/${path_role_id}/users", + mapOf("fields" to fields, + "direct_association_only" to direct_association_only)) } + /** * ### Set all the users of the role with a specific id. * @@ -9749,8 +9589,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun set_role_users( role_id: String, - body: Array, - ): SDKResponse { + body: Array + ) : SDKResponse { val path_role_id = encodeParam(role_id) return this.put>("/roles/${path_role_id}/users", mapOf(), body) } @@ -9759,6 +9599,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region ScheduledPlan: Manage Scheduled Plans + /** * ### Get Scheduled Plans for a Space * @@ -9771,15 +9612,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plans_for_space( space_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_space_id = encodeParam(space_id) - return this.get>( - "/scheduled_plans/space/${path_space_id}", - mapOf("fields" to fields), - ) + return this.get>("/scheduled_plans/space/${path_space_id}", + mapOf("fields" to fields)) } + /** * ### Get Information About a Scheduled Plan * @@ -9792,15 +9632,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plan( scheduled_plan_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.get( - "/scheduled_plans/${path_scheduled_plan_id}", - mapOf("fields" to fields), - ) + return this.get("/scheduled_plans/${path_scheduled_plan_id}", + mapOf("fields" to fields)) } + /** * ### Update a Scheduled Plan * @@ -9852,12 +9691,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_scheduled_plan( scheduled_plan_id: String, - body: WriteScheduledPlan, - ): SDKResponse { + body: WriteScheduledPlan + ) : SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) return this.patch("/scheduled_plans/${path_scheduled_plan_id}", mapOf(), body) } + /** * ### Delete a Scheduled Plan * @@ -9870,12 +9710,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /scheduled_plans/{scheduled_plan_id} -> String */ fun delete_scheduled_plan( - scheduled_plan_id: String, - ): SDKResponse { + scheduled_plan_id: String + ) : SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) return this.delete("/scheduled_plans/${path_scheduled_plan_id}", mapOf()) } + /** * ### List All Scheduled Plans * @@ -9898,18 +9739,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_scheduled_plans( user_id: String? = null, fields: String? = null, - all_users: Boolean? = null, - ): SDKResponse { - return this.get>( - "/scheduled_plans", - mapOf( - "user_id" to user_id, - "fields" to fields, - "all_users" to all_users, - ), - ) + all_users: Boolean? = null + ) : SDKResponse { + return this.get>("/scheduled_plans", + mapOf("user_id" to user_id, + "fields" to fields, + "all_users" to all_users)) } + /** * ### Create a Scheduled Plan * @@ -9975,11 +9813,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /scheduled_plans -> ScheduledPlan */ fun create_scheduled_plan( - body: WriteScheduledPlan, - ): SDKResponse { + body: WriteScheduledPlan + ) : SDKResponse { return this.post("/scheduled_plans", mapOf(), body) } + /** * ### Run a Scheduled Plan Immediately * @@ -10024,11 +9863,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /scheduled_plans/run_once -> ScheduledPlan */ fun scheduled_plan_run_once( - body: WriteScheduledPlan, - ): SDKResponse { + body: WriteScheduledPlan + ) : SDKResponse { return this.post("/scheduled_plans/run_once", mapOf(), body) } + /** * ### Search Scheduled Plans * @@ -10085,35 +9925,32 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { run_once: Boolean? = null, enabled: Boolean? = null, last_run_status: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get>( - "/scheduled_plans/search", - mapOf( - "user_id" to user_id, - "fields" to fields, - "all_users" to all_users, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "name" to name, - "user_first_name" to user_first_name, - "user_last_name" to user_last_name, - "dashboard_id" to dashboard_id, - "look_id" to look_id, - "lookml_dashboard_id" to lookml_dashboard_id, - "recipient" to recipient, - "destination_type" to destination_type, - "delivery_format" to delivery_format, - "all_states" to all_states, - "run_once" to run_once, - "enabled" to enabled, - "last_run_status" to last_run_status, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get>("/scheduled_plans/search", + mapOf("user_id" to user_id, + "fields" to fields, + "all_users" to all_users, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "name" to name, + "user_first_name" to user_first_name, + "user_last_name" to user_last_name, + "dashboard_id" to dashboard_id, + "look_id" to look_id, + "lookml_dashboard_id" to lookml_dashboard_id, + "recipient" to recipient, + "destination_type" to destination_type, + "delivery_format" to delivery_format, + "all_states" to all_states, + "run_once" to run_once, + "enabled" to enabled, + "last_run_status" to last_run_status, + "filter_or" to filter_or)) } + /** * ### Get Scheduled Plans for a Look * @@ -10138,19 +9975,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { look_id: String, user_id: String? = null, fields: String? = null, - all_users: Boolean? = null, - ): SDKResponse { + all_users: Boolean? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.get>( - "/scheduled_plans/look/${path_look_id}", - mapOf( - "user_id" to user_id, - "fields" to fields, - "all_users" to all_users, - ), - ) + return this.get>("/scheduled_plans/look/${path_look_id}", + mapOf("user_id" to user_id, + "fields" to fields, + "all_users" to all_users)) } + /** * ### Get Scheduled Plans for a Dashboard * @@ -10175,19 +10009,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { dashboard_id: String, user_id: String? = null, all_users: Boolean? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get>( - "/scheduled_plans/dashboard/${path_dashboard_id}", - mapOf( - "user_id" to user_id, - "all_users" to all_users, - "fields" to fields, - ), - ) + return this.get>("/scheduled_plans/dashboard/${path_dashboard_id}", + mapOf("user_id" to user_id, + "all_users" to all_users, + "fields" to fields)) } + /** * ### Get Scheduled Plans for a LookML Dashboard * @@ -10212,19 +10043,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { lookml_dashboard_id: String, user_id: String? = null, fields: String? = null, - all_users: Boolean? = null, - ): SDKResponse { + all_users: Boolean? = null + ) : SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) - return this.get>( - "/scheduled_plans/lookml_dashboard/${path_lookml_dashboard_id}", - mapOf( - "user_id" to user_id, - "fields" to fields, - "all_users" to all_users, - ), - ) + return this.get>("/scheduled_plans/lookml_dashboard/${path_lookml_dashboard_id}", + mapOf("user_id" to user_id, + "fields" to fields, + "all_users" to all_users)) } + /** * ### Run a Scheduled Plan By Id Immediately * This function creates a run-once schedule plan based on an existing scheduled plan, @@ -10281,8 +10109,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plan_run_once_by_id( scheduled_plan_id: String, - body: WriteScheduledPlan? = null, - ): SDKResponse { + body: WriteScheduledPlan? = null + ) : SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) return this.post("/scheduled_plans/${path_scheduled_plan_id}/run_once", mapOf(), body) } @@ -10291,6 +10119,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region SelfService: Self Service Models + /** * ### Get Allowed Connections under advanced connection governance * @@ -10302,14 +10131,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * 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), - ) + google_sheets: Boolean? = null + ) : SDKResponse { + return this.get>("/self_service_models/allowed_connections", + mapOf("google_sheets" to google_sheets)) } + /** * ### Get Generated LookML for a Self Service Model * @@ -10318,12 +10146,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /self_service_models/{model_name}/lookml -> String */ fun get_self_service_model_lookml( - model_name: String, - ): SDKResponse { + model_name: String + ) : SDKResponse { val path_model_name = encodeParam(model_name) return this.get("/self_service_models/${path_model_name}/lookml", mapOf()) } + /** * ### Update certification for a Self Service Explore * @@ -10334,8 +10163,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_self_service_explore_certification( model_name: String, - body: WriteCertification, - ): SDKResponse { + body: WriteCertification + ) : SDKResponse { val path_model_name = encodeParam(model_name) return this.patch("/self_service_models/${path_model_name}/certification", mapOf(), body) } @@ -10344,6 +10173,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Session: Session Information + /** * ### Get API Session * @@ -10351,10 +10181,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /session -> ApiSession */ - fun session(): SDKResponse { + fun session( + + ) : SDKResponse { return this.get("/session", mapOf()) } + /** * ### Update API Session * @@ -10382,8 +10215,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * PATCH /session -> ApiSession */ fun update_session( - body: WriteApiSession, - ): SDKResponse { + body: WriteApiSession + ) : SDKResponse { return this.patch("/session", mapOf(), body) } @@ -10391,6 +10224,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region SqlInterfaceQuery: Run and Manage SQL Interface Queries + /** * ### Handles Avatica RPC metadata requests for SQL Interface queries * @@ -10399,14 +10233,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /sql_interface_queries/metadata -> SqlInterfaceQueryMetadata */ @JvmOverloads fun sql_interface_metadata( - avatica_request: String? = null, - ): SDKResponse { - return this.get( - "/sql_interface_queries/metadata", - mapOf("avatica_request" to avatica_request), - ) + avatica_request: String? = null + ) : SDKResponse { + return this.get("/sql_interface_queries/metadata", + mapOf("avatica_request" to avatica_request)) } + /** * ### Run a saved SQL interface query. * @@ -10427,13 +10260,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun run_sql_interface_query( query_id: Long, - result_format: String, - ): SDKResponse { + result_format: String + ) : SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) return this.get("/sql_interface_queries/${path_query_id}/run/${path_result_format}", mapOf()) } + /** * ### Create a SQL interface query. * @@ -10449,8 +10283,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /sql_interface_queries -> SqlInterfaceQuery */ fun create_sql_interface_query( - body: WriteSqlInterfaceQueryCreate, - ): SDKResponse { + body: WriteSqlInterfaceQueryCreate + ) : SDKResponse { return this.post("/sql_interface_queries", mapOf(), body) } @@ -10458,6 +10292,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Theme: Manage Themes + /** * ### Get an array of all existing themes * @@ -10472,14 +10307,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /themes -> Array */ @JvmOverloads fun all_themes( - fields: String? = null, - ): SDKResponse { - return this.get>( - "/themes", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/themes", + mapOf("fields" to fields)) } + /** * ### Create a theme * @@ -10502,11 +10336,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /themes -> Theme */ fun create_theme( - body: WriteTheme, - ): SDKResponse { + body: WriteTheme + ) : SDKResponse { return this.post("/themes", mapOf(), body) } + /** * ### Search all themes for matching criteria. * @@ -10570,25 +10405,22 @@ 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", - mapOf( - "id" to id, - "name" to name, - "begin_at" to begin_at, - "end_at" to end_at, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "fields" to fields, - "filter_or" to filter_or, - "theme_type" to theme_type, - ), - ) + theme_type: String? = null + ) : SDKResponse { + return this.get>("/themes/search", + mapOf("id" to id, + "name" to name, + "begin_at" to begin_at, + "end_at" to end_at, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "fields" to fields, + "filter_or" to filter_or, + "theme_type" to theme_type)) } + /** * ### Get the default theme * @@ -10605,16 +10437,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /themes/default -> Theme */ @Deprecated(message = "Deprecated method") - @JvmOverloads - fun default_theme( - ts: Date? = null, - ): SDKResponse { - return this.get( - "/themes/default", - mapOf("ts" to ts), - ) + @JvmOverloads fun default_theme( + ts: Date? = null + ) : SDKResponse { + return this.get("/themes/default", + mapOf("ts" to ts)) } + /** * ### Set the global default theme by theme name * @@ -10636,14 +10466,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @Deprecated(message = "Deprecated method") fun set_default_theme( - name: String, - ): SDKResponse { - return this.put( - "/themes/default", - mapOf("name" to name), - ) + name: String + ) : SDKResponse { + return this.put("/themes/default", + mapOf("name" to name)) } + /** * ### Get the default theme * @@ -10662,17 +10491,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun default_theme_by_type( theme_type: String, - ts: Date? = null, - ): SDKResponse { - return this.get( - "/themes/default_theme", - mapOf( - "ts" to ts, - "theme_type" to theme_type, - ), - ) + ts: Date? = null + ) : SDKResponse { + return this.get("/themes/default_theme", + mapOf("ts" to ts, + "theme_type" to theme_type)) } + /** * ### Set the global default theme by theme name * @@ -10693,17 +10519,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun set_default_theme_by_type( name: String, - theme_type: String, - ): SDKResponse { - return this.put( - "/themes/default_theme", - mapOf( - "name" to name, - "theme_type" to theme_type, - ), - ) + theme_type: String + ) : SDKResponse { + return this.put("/themes/default_theme", + mapOf("name" to name, + "theme_type" to theme_type)) } + /** * ### Get active themes * @@ -10726,19 +10549,16 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, ts: Date? = null, theme_type: String? = null, - fields: String? = null, - ): SDKResponse { - return this.get>( - "/themes/active", - mapOf( - "name" to name, - "ts" to ts, - "theme_type" to theme_type, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.get>("/themes/active", + mapOf("name" to name, + "ts" to ts, + "theme_type" to theme_type, + "fields" to fields)) } + /** * ### Get the named theme if it's active. Otherwise, return the default theme * @@ -10754,17 +10574,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun theme_or_default( name: String, - ts: Date? = null, - ): SDKResponse { - return this.get( - "/themes/theme_or_default", - mapOf( - "name" to name, - "ts" to ts, - ), - ) + ts: Date? = null + ) : SDKResponse { + return this.get("/themes/theme_or_default", + mapOf("name" to name, + "ts" to ts)) } + /** * ### Validate a theme with the specified information * @@ -10779,11 +10596,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /themes/validate -> ValidationError */ fun validate_theme( - body: WriteTheme, - ): SDKResponse { + body: WriteTheme + ) : SDKResponse { return this.post("/themes/validate", mapOf(), body) } + /** * ### Get a theme by ID * @@ -10798,15 +10616,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun theme( theme_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_theme_id = encodeParam(theme_id) - return this.get( - "/themes/${path_theme_id}", - mapOf("fields" to fields), - ) + return this.get("/themes/${path_theme_id}", + mapOf("fields" to fields)) } + /** * ### Update the theme by id. * @@ -10819,12 +10636,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun update_theme( theme_id: String, - body: WriteTheme, - ): SDKResponse { + body: WriteTheme + ) : SDKResponse { val path_theme_id = encodeParam(theme_id) return this.patch("/themes/${path_theme_id}", mapOf(), body) } + /** * ### Delete a specific theme by id * @@ -10841,8 +10659,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /themes/{theme_id} -> String */ fun delete_theme( - theme_id: String, - ): SDKResponse { + theme_id: String + ) : SDKResponse { val path_theme_id = encodeParam(theme_id) return this.delete("/themes/${path_theme_id}", mapOf()) } @@ -10851,6 +10669,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region User: Manage Users + /** * ### Search email credentials * @@ -10899,23 +10718,20 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, email: String? = null, emails: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get>( - "/credentials_email/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "email" to email, - "emails" to emails, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get>("/credentials_email/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "email" to email, + "emails" to emails, + "filter_or" to filter_or)) } + /** * ### Email/password login information for the specified user. * @@ -10928,15 +10744,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_email( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_email", + mapOf("fields" to fields)) } + /** * ### Email/password login information for the specified user. * @@ -10951,16 +10766,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_email( user_id: String, body: WriteCredentialsEmail, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - body, - ) + return this.post("/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), body) } + /** * ### Email/password login information for the specified user. * @@ -10975,16 +10788,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user_credentials_email( user_id: String, body: WriteCredentialsEmail, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - body, - ) + return this.patch("/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), body) } + /** * ### Email/password login information for the specified user. * @@ -10995,12 +10806,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_email -> String */ fun delete_user_credentials_email( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_email", mapOf()) } + /** * ### Create a password reset token. * This will create a cryptographically secure random password reset token for the user. @@ -11023,18 +10835,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_email_password_reset( user_id: String, expires: Boolean? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email/password_reset", - mapOf( - "expires" to expires, - "fields" to fields, - ), - ) + return this.post("/users/${path_user_id}/credentials_email/password_reset", + mapOf("expires" to expires, + "fields" to fields)) } + /** * ### Send a password reset token. * This will send a password reset email to the user. If a password reset token does not already exist @@ -11053,15 +10862,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun send_user_credentials_email_password_reset( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email/send_password_reset", - mapOf("fields" to fields), - ) + return this.post("/users/${path_user_id}/credentials_email/send_password_reset", + mapOf("fields" to fields)) } + /** * ### Google authentication login information for the specified user. * @@ -11072,15 +10880,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_google( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_google", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_google", + mapOf("fields" to fields)) } + /** * ### Delete Google authentication login information for the specified user. * @@ -11089,12 +10896,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_google -> String */ fun delete_user_credentials_google( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_google", mapOf()) } + /** * ### Looker Openid login information for the specified user. Used by Looker Analysts. * @@ -11107,15 +10915,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_looker_openid( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_looker_openid", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_looker_openid", + mapOf("fields" to fields)) } + /** * ### Looker Openid login information for the specified user. Used by Looker Analysts. * @@ -11126,12 +10933,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_looker_openid -> String */ fun delete_user_credentials_looker_openid( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) } + /** * ### Saml authentication login information for the specified user. * @@ -11142,15 +10950,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_saml( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_saml", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_saml", + mapOf("fields" to fields)) } + /** * ### Delete Saml authentication login information for the specified user. * @@ -11159,12 +10966,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_saml -> String */ fun delete_user_credentials_saml( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) } + /** * ### Get two-factor login information for the specified user. * @@ -11177,15 +10985,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_totp( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_totp", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields)) } + /** * ### Create two-factor login information for the specified user. * @@ -11200,16 +11007,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_totp( user_id: String, body: CredentialsTotp? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_totp", - mapOf("fields" to fields), - body, - ) + return this.post("/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), body) } + /** * ### Delete two-factor login information for the specified user. * @@ -11220,12 +11025,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_totp -> String */ fun delete_user_credentials_totp( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) } + /** * ### Get information about the current user; i.e. the user account currently calling the API. * @@ -11234,14 +11040,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /user -> User */ @JvmOverloads fun me( - fields: String? = null, - ): SDKResponse { - return this.get( - "/user", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/user", + mapOf("fields" to fields)) } + /** * ### Get information about all users. * @@ -11262,22 +11067,19 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - ids: DelimArray? = null, - ): SDKResponse { - return this.get>( - "/users", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "ids" to ids, - ), - ) + ids: DelimArray? = null + ) : SDKResponse { + return this.get>("/users", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "ids" to ids)) } + /** * ### Create a user with the specified information. * @@ -11288,15 +11090,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user( body: WriteUser? = null, - fields: String? = null, - ): SDKResponse { - return this.post( - "/users", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/users", + mapOf("fields" to fields), body) } + /** * ### Search users * @@ -11370,34 +11170,31 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { content_metadata_id: String? = null, group_id: String? = null, can_manage_api3_creds: Boolean? = null, - is_service_account: Boolean? = null, - ): SDKResponse { - return this.get>( - "/users/search", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "first_name" to first_name, - "last_name" to last_name, - "full_name" to full_name, - "verified_looker_employee" to verified_looker_employee, - "embed_user" to embed_user, - "email" to email, - "is_disabled" to is_disabled, - "filter_or" to filter_or, - "content_metadata_id" to content_metadata_id, - "group_id" to group_id, - "can_manage_api3_creds" to can_manage_api3_creds, - "is_service_account" to is_service_account, - ), - ) + is_service_account: Boolean? = null + ) : SDKResponse { + return this.get>("/users/search", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "first_name" to first_name, + "last_name" to last_name, + "full_name" to full_name, + "verified_looker_employee" to verified_looker_employee, + "embed_user" to embed_user, + "email" to email, + "is_disabled" to is_disabled, + "filter_or" to filter_or, + "content_metadata_id" to content_metadata_id, + "group_id" to group_id, + "can_manage_api3_creds" to can_manage_api3_creds, + "is_service_account" to is_service_account)) } + /** * ### Search for user accounts by name * @@ -11435,28 +11232,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { last_name: String? = null, verified_looker_employee: Boolean? = null, email: String? = null, - is_disabled: Boolean? = null, - ): SDKResponse { + is_disabled: Boolean? = null + ) : SDKResponse { val path_pattern = encodeParam(pattern) - return this.get>( - "/users/search/names/${path_pattern}", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "first_name" to first_name, - "last_name" to last_name, - "verified_looker_employee" to verified_looker_employee, - "email" to email, - "is_disabled" to is_disabled, - ), - ) + return this.get>("/users/search/names/${path_pattern}", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "first_name" to first_name, + "last_name" to last_name, + "verified_looker_employee" to verified_looker_employee, + "email" to email, + "is_disabled" to is_disabled)) } + /** * ### Get information about the user with a specific id. * @@ -11471,15 +11265,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}", + mapOf("fields" to fields)) } + /** * ### Update information about the user with a specific id. * @@ -11492,16 +11285,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user( user_id: String, body: WriteUser, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch( - "/users/${path_user_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/users/${path_user_id}", + mapOf("fields" to fields), body) } + /** * ### Delete the user with a specific id. * @@ -11524,12 +11315,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id} -> String */ fun delete_user( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}", mapOf()) } + /** * ### Get information about the user with a credential of given type with specific id. * @@ -11571,16 +11363,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_for_credential( credential_type: String, credential_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_credential_type = encodeParam(credential_type) val path_credential_id = encodeParam(credential_id) - return this.get( - "/users/credential/${path_credential_type}/${path_credential_id}", - mapOf("fields" to fields), - ) + return this.get("/users/credential/${path_credential_type}/${path_credential_id}", + mapOf("fields" to fields)) } + /** * ### Update information for a specific service account. This action is restricted to Looker admins. * @@ -11595,16 +11386,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_service_account( user_id: String, body: WriteServiceAccount, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch( - "/users/service_accounts/${path_user_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/users/service_accounts/${path_user_id}", + mapOf("fields" to fields), body) } + /** * ### Delete the service account with a specific id. * @@ -11623,12 +11412,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/service_accounts/{user_id} -> String */ fun delete_service_account( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/service_accounts/${path_user_id}", mapOf()) } + /** * ### LDAP login information for the specified user. * @@ -11641,15 +11431,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_ldap( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_ldap", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_ldap", + mapOf("fields" to fields)) } + /** * ### LDAP login information for the specified user. * @@ -11660,12 +11449,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_ldap -> String */ fun delete_user_credentials_ldap( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) } + /** * ### OpenID Connect (OIDC) authentication login information for the specified user. * @@ -11676,15 +11466,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_oidc( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_oidc", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_oidc", + mapOf("fields" to fields)) } + /** * ### OpenID Connect (OIDC) authentication login information for the specified user. * @@ -11693,12 +11482,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_oidc -> String */ fun delete_user_credentials_oidc( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) return this.delete("/users/${path_user_id}/credentials_oidc", mapOf()) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11711,16 +11501,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_credentials_api3( user_id: String, credentials_api3_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) - return this.get( - "/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", + mapOf("fields" to fields)) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11735,17 +11524,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { user_id: String, credentials_api3_id: String, body: WriteCredentialsApi3, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) - return this.patch( - "/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", + mapOf("fields" to fields), body) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11756,13 +11543,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_credentials_api3( user_id: String, - credentials_api3_id: String, - ): SDKResponse { + credentials_api3_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) return this.delete("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", mapOf()) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11773,15 +11561,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_credentials_api3s( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>( - "/users/${path_user_id}/credentials_api3", - mapOf("fields" to fields), - ) + return this.get>("/users/${path_user_id}/credentials_api3", + mapOf("fields" to fields)) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11792,15 +11579,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user_credentials_api3( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_api3", - mapOf("fields" to fields), - ) + return this.post("/users/${path_user_id}/credentials_api3", + mapOf("fields" to fields)) } + /** * ### Embed login information for the specified user. * @@ -11815,16 +11601,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_credentials_embed( user_id: String, credentials_embed_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_embed_id = encodeParam(credentials_embed_id) - return this.get( - "/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", + mapOf("fields" to fields)) } + /** * ### Embed login information for the specified user. * @@ -11837,13 +11622,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_credentials_embed( user_id: String, - credentials_embed_id: String, - ): SDKResponse { + credentials_embed_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_embed_id = encodeParam(credentials_embed_id) return this.delete("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", mapOf()) } + /** * ### Embed login information for the specified user. * @@ -11856,15 +11642,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_credentials_embeds( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>( - "/users/${path_user_id}/credentials_embed", - mapOf("fields" to fields), - ) + return this.get>("/users/${path_user_id}/credentials_embed", + mapOf("fields" to fields)) } + /** * ### Web login session for the specified user. * @@ -11877,16 +11662,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_session( user_id: String, session_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_session_id = encodeParam(session_id) - return this.get( - "/users/${path_user_id}/sessions/${path_session_id}", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/sessions/${path_session_id}", + mapOf("fields" to fields)) } + /** * ### Web login session for the specified user. * @@ -11897,13 +11681,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_session( user_id: String, - session_id: String, - ): SDKResponse { + session_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_session_id = encodeParam(session_id) return this.delete("/users/${path_user_id}/sessions/${path_session_id}", mapOf()) } + /** * ### Web login session for the specified user. * @@ -11914,15 +11699,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_sessions( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>( - "/users/${path_user_id}/sessions", - mapOf("fields" to fields), - ) + return this.get>("/users/${path_user_id}/sessions", + mapOf("fields" to fields)) } + /** * ### Get information about roles of a given user * @@ -11935,18 +11719,15 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_roles( user_id: String, fields: String? = null, - direct_association_only: Boolean? = null, - ): SDKResponse { + direct_association_only: Boolean? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>( - "/users/${path_user_id}/roles", - mapOf( - "fields" to fields, - "direct_association_only" to direct_association_only, - ), - ) + return this.get>("/users/${path_user_id}/roles", + mapOf("fields" to fields, + "direct_association_only" to direct_association_only)) } + /** * ### Set roles of the user with a specific id. * @@ -11959,16 +11740,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun set_user_roles( user_id: String, body: Array, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.put>( - "/users/${path_user_id}/roles", - mapOf("fields" to fields), - body, - ) + return this.put>("/users/${path_user_id}/roles", + mapOf("fields" to fields), body) } + /** * ### Get user attribute values for a given user. * @@ -12000,20 +11779,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, user_attribute_ids: DelimArray? = null, all_values: Boolean? = null, - include_unset: Boolean? = null, - ): SDKResponse { + include_unset: Boolean? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get>( - "/users/${path_user_id}/attribute_values", - mapOf( - "fields" to fields, - "user_attribute_ids" to user_attribute_ids, - "all_values" to all_values, - "include_unset" to include_unset, - ), - ) + return this.get>("/users/${path_user_id}/attribute_values", + mapOf("fields" to fields, + "user_attribute_ids" to user_attribute_ids, + "all_values" to all_values, + "include_unset" to include_unset)) } + /** * ### Store a custom value for a user attribute in a user's account settings. * @@ -12028,13 +11804,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { fun set_user_attribute_user_value( user_id: String, user_attribute_id: String, - body: WriteUserAttributeWithValue, - ): SDKResponse { + body: WriteUserAttributeWithValue + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_user_attribute_id = encodeParam(user_attribute_id) return this.patch("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) } + /** * ### Delete a user attribute value from a user's account settings. * @@ -12050,13 +11827,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_attribute_user_value( user_id: String, - user_attribute_id: String, - ): SDKResponse { + user_attribute_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_user_attribute_id = encodeParam(user_attribute_id) return this.delete("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf()) } + /** * ### Change a disabled user's email addresses * @@ -12077,16 +11855,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun wipeout_user_emails( user_id: String, body: UserEmailOnly, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/update_emails", - mapOf("fields" to fields), - body, - ) + return this.post("/users/${path_user_id}/update_emails", + mapOf("fields" to fields), body) } + /** * Create an embed user from an external user ID * @@ -12097,11 +11873,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * POST /users/embed_user -> UserPublic */ fun create_embed_user( - body: CreateEmbedUserRequest, - ): SDKResponse { + body: CreateEmbedUserRequest + ) : SDKResponse { return this.post("/users/embed_user", mapOf(), body) } + /** * ### Create a service account with the specified information. This action is restricted to Looker admins. * @@ -12112,19 +11889,17 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_service_account( body: WriteServiceAccount, - fields: String? = null, - ): SDKResponse { - return this.post( - "/users/service_accounts", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/users/service_accounts", + mapOf("fields" to fields), body) } //endregion User: Manage Users //region UserAttribute: Manage User Attributes + /** * ### Get information about all user attributes. * @@ -12135,17 +11910,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_attributes( fields: String? = null, - sorts: String? = null, - ): SDKResponse { - return this.get>( - "/user_attributes", - mapOf( - "fields" to fields, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get>("/user_attributes", + mapOf("fields" to fields, + "sorts" to sorts)) } + /** * ### Create a new user attribute * @@ -12165,15 +11937,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user_attribute( body: WriteUserAttribute, - fields: String? = null, - ): SDKResponse { - return this.post( - "/user_attributes", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/user_attributes", + mapOf("fields" to fields), body) } + /** * ### Get information about a user attribute. * @@ -12184,15 +11954,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_attribute( user_attribute_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.get( - "/user_attributes/${path_user_attribute_id}", - mapOf("fields" to fields), - ) + return this.get("/user_attributes/${path_user_attribute_id}", + mapOf("fields" to fields)) } + /** * ### Update a user attribute definition. * @@ -12205,16 +11974,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user_attribute( user_attribute_id: String, body: WriteUserAttribute, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.patch( - "/user_attributes/${path_user_attribute_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/user_attributes/${path_user_attribute_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a user attribute (admin only). * @@ -12223,12 +11990,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_attributes/{user_attribute_id} -> String */ fun delete_user_attribute( - user_attribute_id: String, - ): SDKResponse { + user_attribute_id: String + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) return this.delete("/user_attributes/${path_user_attribute_id}", mapOf()) } + /** * ### Returns all values of a user attribute defined by user groups, in precedence order. * @@ -12245,15 +12013,14 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_attribute_group_values( user_attribute_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.get>( - "/user_attributes/${path_user_attribute_id}/group_values", - mapOf("fields" to fields), - ) + return this.get>("/user_attributes/${path_user_attribute_id}/group_values", + mapOf("fields" to fields)) } + /** * ### Define values for a user attribute across a set of groups, in priority order. * @@ -12283,8 +12050,8 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { */ fun set_user_attribute_group_values( user_attribute_id: String, - body: Array, - ): SDKResponse { + body: Array + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) return this.post>("/user_attributes/${path_user_attribute_id}/group_values", mapOf(), body) } @@ -12293,6 +12060,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region Workspace: Manage Workspaces + /** * ### Get All Workspaces * @@ -12300,10 +12068,13 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * * GET /workspaces -> Array */ - fun all_workspaces(): SDKResponse { + fun all_workspaces( + + ) : SDKResponse { return this.get>("/workspaces", mapOf()) } + /** * ### Get A Workspace * @@ -12340,11 +12111,12 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * GET /workspaces/{workspace_id} -> Workspace */ fun workspace( - workspace_id: String, - ): SDKResponse { + workspace_id: String + ) : SDKResponse { val path_workspace_id = encodeParam(workspace_id) return this.get("/workspaces/${path_workspace_id}", mapOf()) } //endregion Workspace: Manage Workspaces -} + +} \ No newline at end of file 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 92b771ac1..2af616bec 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/models.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/models.kt @@ -28,6 +28,7 @@ * 442 API models: 343 Spec, 0 Request, 73 Write, 26 Enum */ + // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 package com.looker.sdk @@ -42,11 +43,11 @@ import java.util.* * @property expires_in Number of seconds before the token expires (read-only) * @property refresh_token Refresh token which can be used to obtain a new access token (read-only) */ -data class AccessToken( +data class AccessToken ( var access_token: String? = null, var token_type: String? = null, var expires_in: Long? = null, - var refresh_token: String? = null, + var refresh_token: String? = null ) : Serializable /** @@ -76,8 +77,8 @@ data class AccessToken( * @property lookml_agent_id LookML Agent ID (read-only) * @property lookml_edit_uri URI to edit the LookML definition of this agent (read-only) */ -data class Agent( - var can: Map? = null, +data class Agent ( + var can: Map? = null, var id: String? = null, var created_by_user_id: String? = null, var created_by_name: String? = null, @@ -101,16 +102,16 @@ data class Agent( var workflow_params: WorkflowParams? = null, var is_lookml: Boolean? = null, var lookml_agent_id: String? = null, - var lookml_edit_uri: String? = null, + var lookml_edit_uri: String? = null ) : Serializable /** * @property agent_id Id of Agent (read-only) * @property lookml lookml of UDD Agent (read-only) */ -data class AgentLookml( +data class AgentLookml ( var agent_id: String? = null, - var lookml: String? = null, + var lookml: String? = null ) : Serializable /** @@ -144,7 +145,7 @@ data class AgentLookml( * @property threshold Value of the alert threshold * @property time_series_condition_state */ -data class Alert( +data class Alert ( var applied_dashboard_filters: Array? = null, var comparison_type: ComparisonType, var cron: String, @@ -173,7 +174,7 @@ data class Alert( var owner_id: String, var owner_display_name: String? = null, var threshold: Double, - var time_series_condition_state: AlertConditionState? = null, + var time_series_condition_state: AlertConditionState? = null ) : Serializable /** @@ -182,20 +183,20 @@ data class Alert( * @property filter_value Field Value. [Filter Expressions](https://docs.cloud.google.com/looker/docs/reference/filter-expressions). Example `Los Angeles CA` * @property filter_description Human Readable Filter Description. This may be null or auto-generated. Example `is Los Angeles CA` (read-only) */ -data class AlertAppliedDashboardFilter( +data class AlertAppliedDashboardFilter ( var filter_title: String, var field_name: String, var filter_value: String, - var filter_description: String? = null, + var filter_description: String? = null ) : Serializable /** * @property previous_time_series_id (Write-Only) The second latest time string the alert has seen. * @property latest_time_series_id (Write-Only) Latest time string the alert has seen. */ -data class AlertConditionState( +data class AlertConditionState ( var previous_time_series_id: String? = null, - var latest_time_series_id: String? = null, + var latest_time_series_id: String? = null ) : Serializable /** @@ -204,11 +205,11 @@ data class AlertConditionState( * @property action_hub_integration_id Action hub integration id for the 'action_hub' type. [Integration](#!/types/Integration) * @property action_hub_form_params_json Action hub form params json for the 'action_hub' type [IntegrationParam](#!/types/IntegrationParam) */ -data class AlertDestination( +data class AlertDestination ( var destination_type: DestinationType, var email_address: String? = null, var action_hub_integration_id: String? = null, - var action_hub_form_params_json: String? = null, + var action_hub_form_params_json: String? = null ) : Serializable /** @@ -216,10 +217,10 @@ data class AlertDestination( * @property name Field's name. Has the format `.` Refer to [docs](https://docs.cloud.google.com/looker/docs/sharing-and-publishing/creating-alerts) for more details * @property filter (Optional / Advance Use) List of fields filter. This further restricts the alert to certain dashboard element's field values. This can be used on top of dashboard filters `applied_dashboard_filters`. To keep thing simple, it's suggested to just use dashboard filters. Example: `{ 'title': '12 Number on Hand', 'name': 'inventory_items.number_on_hand', 'filter': [{ 'field_name': 'inventory_items.id', 'field_value': 12, 'filter_value': null }] }` */ -data class AlertField( +data class AlertField ( var title: String, var name: String, - var filter: Array? = null, + var filter: Array? = null ) : Serializable /** @@ -227,10 +228,10 @@ data class AlertField( * @property field_value Field Value. Depends on the type of field - numeric or string. For [location](https://docs.cloud.google.com/looker/docs/reference/field-reference/dimension-type-reference#location) type, it's a list of floats. Example `[1.0, 56.0]` * @property filter_value Filter Value. Usually null except for [location](https://docs.cloud.google.com/looker/docs/reference/field-reference/dimension-type-reference#location) type. It'll be a string of lat,long ie `'1.0,56.0'` */ -data class AlertFieldFilter( +data class AlertFieldFilter ( var field_name: String, var field_value: Any, - var filter_value: String? = null, + var filter_value: String? = null ) : Serializable /** @@ -245,7 +246,7 @@ data class AlertFieldFilter( * @property notification_type The type of notification, 'email' or 'slack' (read-only) * @property triggering_field_title The title of the field on which the alert condition is set (read-only) */ -data class AlertNotifications( +data class AlertNotifications ( var notification_id: String? = null, var alert_condition_id: String? = null, var user_id: String? = null, @@ -255,7 +256,7 @@ data class AlertNotifications( var ran_at: String? = null, var alert: MobilePayload? = null, var notification_type: String? = null, - var triggering_field_title: String? = null, + var triggering_field_title: String? = null ) : Serializable /** @@ -266,13 +267,13 @@ data class AlertNotifications( * @property threshold New threshold value * @property enhancements Enum of additional alert properties. Valid values are: "NONE", "STRATEGIC_NARRATIVE". */ -data class AlertPatch( +data class AlertPatch ( var owner_id: String? = null, var is_disabled: Boolean? = null, var disabled_reason: String? = null, var is_public: Boolean? = null, var threshold: Double? = null, - var enhancements: Enhancements? = null, + var enhancements: Enhancements? = null ) : Serializable /** @@ -280,7 +281,7 @@ data class AlertPatch( */ enum class Align : Serializable { left, - right, + right } /** @@ -295,7 +296,7 @@ enum class Align : Serializable { * @property resultReferenceData Result as a reference to a data source. (read-only) * @property error A generic error message. (read-only) */ -data class AnalysisEvent( +data class AnalysisEvent ( var plannerReasoning: String? = null, var coderInstruction: String? = null, var code: String? = null, @@ -305,25 +306,25 @@ data class AnalysisEvent( var resultNaturalLanguage: String? = null, var resultCsvData: String? = null, var resultReferenceData: String? = null, - var error: String? = null, + var error: String? = null ) : Serializable /** * @property query * @property progressEvent */ -data class AnalysisMessage( +data class AnalysisMessage ( var query: AnalysisQuery? = null, - var progressEvent: AnalysisEvent? = null, + var progressEvent: AnalysisEvent? = null ) : Serializable /** * @property question An analysis question. (read-only) * @property dataResultNames The names of previously retrieved data results to analyze. (read-only) */ -data class AnalysisQuery( +data class AnalysisQuery ( var question: String? = null, - var dataResultNames: Array? = null, + var dataResultNames: Array? = null ) : Serializable /** @@ -331,10 +332,10 @@ data class AnalysisQuery( * @property workspace_id The id of active workspace for this session * @property sudo_user_id The id of the actual user in the case when this session represents one user sudo'ing as another (read-only) */ -data class ApiSession( - var can: Map? = null, +data class ApiSession ( + var can: Map? = null, var workspace_id: String? = null, - var sudo_user_id: String? = null, + var sudo_user_id: String? = null ) : Serializable /** @@ -344,12 +345,12 @@ data class ApiSession( * @property api_server_url API server base url (read-only) * @property web_server_url Web server base url (read-only) */ -data class ApiVersion( +data class ApiVersion ( var looker_release_version: String? = null, var current_version: ApiVersionElement? = null, var supported_versions: Array? = null, var api_server_url: String? = null, - var web_server_url: String? = null, + var web_server_url: String? = null ) : Serializable /** @@ -358,11 +359,11 @@ data class ApiVersion( * @property status Status of this version (read-only) * @property swagger_url Url for swagger.json for this version (read-only) */ -data class ApiVersionElement( +data class ApiVersionElement ( var version: String? = null, var full_version: String? = null, var status: String? = null, - var swagger_url: String? = null, + var swagger_url: String? = null ) : Serializable /** @@ -377,7 +378,7 @@ data class ApiVersionElement( * @property created_by_userid User id of the artifact creator. (read-only) * @property updated_by_userid User id of the artifact updater. (read-only) */ -data class Artifact( +data class Artifact ( var key: String, var value: String, var content_type: String? = null, @@ -387,32 +388,32 @@ data class Artifact( var updated_at: Date, var value_size: Long, var created_by_userid: String, - var updated_by_userid: String, + var updated_by_userid: String ) : Serializable /** * @property namespace Artifact storage namespace. (read-only) * @property count The number of artifacts stored in the namespace. (read-only) */ -data class ArtifactNamespace( +data class ArtifactNamespace ( var namespace: String, - var count: Long, + var count: Long ) : Serializable /** * @property max_size The configured maximum size in bytes of the entire artifact store. (read-only) * @property usage The currently used storage size in bytes of the entire artifact store. (read-only) */ -data class ArtifactUsage( +data class ArtifactUsage ( var max_size: Long, - var usage: Long, + var usage: Long ) : Serializable /** * @property status Status of the async deploy request (e.g., 'queued') (read-only) */ -data class AsyncDeployResponse( - var status: String? = null, +data class AsyncDeployResponse ( + var status: String? = null ) : Serializable /** @@ -424,14 +425,14 @@ data class AsyncDeployResponse( * @property custom_s3_secret (Write-Only) AWS S3 secret used for custom-s3 backups * @property url Link to get this item (read-only) */ -data class BackupConfiguration( - var can: Map? = null, +data class BackupConfiguration ( + var can: Map? = null, var type: String? = null, var custom_s3_bucket: String? = null, var custom_s3_bucket_region: String? = null, var custom_s3_key: String? = null, var custom_s3_secret: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -441,12 +442,12 @@ data class BackupConfiguration( * @property destinationTable * @property schema */ -data class BigQueryJob( +data class BigQueryJob ( var projectId: String? = null, var jobId: String? = null, var location: String? = null, var destinationTable: BigQueryTableReference? = null, - var schema: DataSourceSchema? = null, + var schema: DataSourceSchema? = null ) : Serializable /** @@ -455,20 +456,20 @@ data class BigQueryJob( * @property tableId The table id. (read-only) * @property schema */ -data class BigQueryTableReference( +data class BigQueryTableReference ( var projectId: String? = null, var datasetId: String? = null, var tableId: String? = null, - var schema: DataSourceSchema? = null, + var schema: DataSourceSchema? = null ) : Serializable /** * @property mimeType The IANA standard MIME type of the message data. (read-only) * @property data The data represented as bytes. (read-only) */ -data class Blob( +data class Blob ( var mimeType: String? = null, - var data: String? = null, + var data: String? = null ) : Serializable /** @@ -485,8 +486,8 @@ data class Blob( * @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( - var can: Map? = null, +data class Board ( + var can: Map? = null, var content_metadata_id: String? = null, var created_at: Date? = null, var deleted_at: Date? = null, @@ -497,7 +498,7 @@ data class Board( var title: String? = null, var updated_at: Date? = null, var user_id: String? = null, - var primary_homepage: Boolean? = null, + var primary_homepage: Boolean? = null ) : Serializable /** @@ -529,8 +530,8 @@ data class Board( * @property custom_image_url Custom image_url entered by the user, if present (read-only) * @property use_custom_image Whether the custom image should be used instead of the content image, if the item is associated with content */ -data class BoardItem( - var can: Map? = null, +data class BoardItem ( + var can: Map? = null, var content_created_by: String? = null, var content_favorite_id: String? = null, var content_metadata_id: String? = null, @@ -556,7 +557,7 @@ data class BoardItem( var view_count: Long? = null, var custom_image_data_base64: String? = null, var custom_image_url: String? = null, - var use_custom_image: Boolean? = null, + var use_custom_image: Boolean? = null ) : Serializable /** @@ -572,8 +573,8 @@ data class BoardItem( * @property title Name of row * @property updated_at Time at which this section was last updated. (read-only) */ -data class BoardSection( - var can: Map? = null, +data class BoardSection ( + var can: Map? = null, var created_at: Date? = null, var deleted_at: Date? = null, var description: String? = null, @@ -583,7 +584,7 @@ data class BoardSection( var item_order: Array? = null, var visible_item_order: Array? = null, var title: String? = null, - var updated_at: Date? = null, + var updated_at: Date? = null ) : Serializable /** @@ -593,7 +594,7 @@ enum class Category : Serializable { parameter, filter, measure, - dimension, + dimension } /** @@ -603,12 +604,12 @@ enum class Category : Serializable { * @property notes Certification notes * @property updated_at Timestamp of certification (read-only) */ -data class Certification( +data class Certification ( var certification_status: CertificationStatus? = null, var ui_status: String? = null, var user_name: String? = null, var notes: String? = null, - var updated_at: Date? = null, + var updated_at: Date? = null ) : Serializable /** @@ -616,34 +617,34 @@ data class Certification( */ enum class CertificationStatus : Serializable { certified, - revoked, + revoked } /** * @property query * @property result */ -data class ChartMessage( +data class ChartMessage ( var query: ChartQuery? = null, - var result: ChartResult? = null, + var result: ChartResult? = null ) : Serializable /** * @property instructions Natural language instructions for generating the chart. (read-only) * @property dataResultName The name of a previously retrieved data result to use in the chart. (read-only) */ -data class ChartQuery( +data class ChartQuery ( var instructions: String? = null, - var dataResultName: String? = null, + var dataResultName: String? = null ) : Serializable /** * @property vegaConfig A generated Vega chart config. (read-only) * @property image */ -data class ChartResult( +data class ChartResult ( var vegaConfig: String? = null, - var image: Blob? = null, + var image: Blob? = null ) : Serializable /** @@ -652,20 +653,20 @@ data class ChartResult( * @property systemMessage * @property messageId Unique id of the message in the conversation. (read-only) */ -data class ChatMessage( +data class ChatMessage ( var timestamp: Date? = null, var userMessage: UserMessage? = null, var systemMessage: SystemMessage? = null, - var messageId: String? = null, + var messageId: String? = null ) : Serializable /** * @property assert_error * @property generic_error */ -data class CIAssertValidatorErrorItem( +data class CIAssertValidatorErrorItem ( var assert_error: CIAssertValidatorTestError? = null, - var generic_error: CIGenericError? = null, + var generic_error: CIGenericError? = null ) : Serializable /** @@ -673,10 +674,10 @@ data class CIAssertValidatorErrorItem( * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) * @property tested Results of the validation */ -data class CIAssertValidatorResult( +data class CIAssertValidatorResult ( var name: String? = null, var status: String? = null, - var tested: Array? = null, + var tested: Array? = null ) : Serializable /** @@ -689,7 +690,7 @@ data class CIAssertValidatorResult( * @property success_count Total number of successful data tests * @property successes Details of data tests that passed validation */ -data class CIAssertValidatorTestedExplore( +data class CIAssertValidatorTestedExplore ( var model: String? = null, var explore: String? = null, var status: String? = null, @@ -697,7 +698,7 @@ data class CIAssertValidatorTestedExplore( var error_count: Long? = null, var errors: Array? = null, var success_count: String? = null, - var successes: Array? = null, + var successes: Array? = null ) : Serializable /** @@ -708,13 +709,13 @@ data class CIAssertValidatorTestedExplore( * @property lookml_url URL to the LookML file where the data test is defined * @property message Message returned by the data test */ -data class CIAssertValidatorTestError( +data class CIAssertValidatorTestError ( var model: String? = null, var explore: String? = null, var test_name: String? = null, var explore_url: String? = null, var lookml_url: String? = null, - var message: String? = null, + var message: String? = null ) : Serializable /** @@ -724,12 +725,12 @@ data class CIAssertValidatorTestError( * @property explore_url URL to the Explore * @property lookml_url URL to the LookML file where the data test is defined */ -data class CIAssertValidatorTestSuccess( +data class CIAssertValidatorTestSuccess ( var model: String? = null, var explore: String? = null, var test_name: String? = null, var explore_url: String? = null, - var lookml_url: String? = null, + var lookml_url: String? = null ) : Serializable /** @@ -748,7 +749,7 @@ data class CIAssertValidatorTestSuccess( * @property tile_title Title of the tile * @property message Message returned by the content validator */ -data class CIContentValidatorContentError( +data class CIContentValidatorContentError ( var type: String? = null, var title: String? = null, var detail: String? = null, @@ -762,16 +763,16 @@ data class CIContentValidatorContentError( var url: String? = null, var tile_type: String? = null, var tile_title: String? = null, - var message: String? = null, + var message: String? = null ) : Serializable /** * @property content_error * @property generic_error */ -data class CIContentValidatorErrorItem( +data class CIContentValidatorErrorItem ( var content_error: CIContentValidatorContentError? = null, - var generic_error: CIGenericError? = null, + var generic_error: CIGenericError? = null ) : Serializable /** @@ -780,11 +781,11 @@ data class CIContentValidatorErrorItem( * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) * @property tested Results of the content validation */ -data class CIContentValidatorResult( +data class CIContentValidatorResult ( var name: String? = null, var incremental: Boolean? = null, var status: String? = null, - var tested: Array? = null, + var tested: Array? = null ) : Serializable /** @@ -795,13 +796,13 @@ data class CIContentValidatorResult( * @property error_count Total number of failed content validations * @property errors Details of the content that failed validation */ -data class CIContentValidatorTestedExplore( +data class CIContentValidatorTestedExplore ( var model: String? = null, var explore: String? = null, var status: String? = null, var skip_reason: String? = null, var error_count: Long? = null, - var errors: Array? = null, + var errors: Array? = null ) : Serializable /** @@ -811,12 +812,12 @@ data class CIContentValidatorTestedExplore( * @property status The HTTP status code for the problem * @property instance URI reference that identifies the specific occurrence of the problem */ -data class CIGenericError( +data class CIGenericError ( var type: String? = null, var title: String? = null, var detail: String? = null, var status: String? = null, - var instance: String? = null, + var instance: String? = null ) : Serializable /** @@ -834,7 +835,7 @@ data class CIGenericError( * @property lookml_url URL to the LookML that caused the error * @property file_path IDE folder path to the LookML file that caused the error */ -data class CILookMLValidatorError( +data class CILookMLValidatorError ( var type: String? = null, var title: String? = null, var detail: String? = null, @@ -847,16 +848,16 @@ data class CILookMLValidatorError( var severity: String? = null, var line_number: String? = null, var lookml_url: String? = null, - var file_path: String? = null, + var file_path: String? = null ) : Serializable /** * @property lookml_error * @property generic_error */ -data class CILookMLValidatorErrorItem( +data class CILookMLValidatorErrorItem ( var lookml_error: CILookMLValidatorError? = null, - var generic_error: CIGenericError? = null, + var generic_error: CIGenericError? = null ) : Serializable /** @@ -865,11 +866,11 @@ data class CILookMLValidatorErrorItem( * @property error_count Total number of failed LookML validations * @property errors Details of the LookML that failed validation */ -data class CILookMLValidatorResult( +data class CILookMLValidatorResult ( var name: String? = null, var status: String? = null, var error_count: Long? = null, - var errors: Array? = null, + var errors: Array? = null ) : Serializable /** @@ -909,8 +910,8 @@ data class CILookMLValidatorResult( * @property user_attributes User attributes for the CI run (read-only) * @property project_imports Map of upstream project names to commit SHAs or git/PR configuration objects pinned for the CI run (read-only) */ -data class CIRun( - var can: Map? = null, +data class CIRun ( + var can: Map? = null, var id: String? = null, var ci_suite_id: String? = null, var project_id: String? = null, @@ -944,7 +945,7 @@ data class CIRun( var crashed_check_count: Long? = null, var run_url: String? = null, var user_attributes: Array? = null, - var project_imports: Map? = null, + var project_imports: Map? = null ) : Serializable /** @@ -960,7 +961,7 @@ data class CIRun( * @property style_error * @property generic_error */ -data class CIRunResult( +data class CIRunResult ( var sql_result: CISqlValidatorResult? = null, var sql_error: CIGenericError? = null, var assert_result: CIAssertValidatorResult? = null, @@ -971,7 +972,7 @@ data class CIRunResult( var lookml_error: CIGenericError? = null, var style_result: CIStyleValidatorResult? = null, var style_error: CIGenericError? = null, - var generic_error: CIGenericError? = null, + var generic_error: CIGenericError? = null ) : Serializable /** @@ -979,10 +980,10 @@ data class CIRunResult( * @property name Name of the user attribute * @property value Value of the user attribute */ -data class CIRunUserAttribute( +data class CIRunUserAttribute ( var id: Long? = null, var name: String? = null, - var value: String? = null, + var value: String? = null ) : Serializable /** @@ -999,7 +1000,7 @@ data class CIRunUserAttribute( * @property dimension LookML dimension that caused the error * @property line_number Line of the error in the LookML file */ -data class CISqlValidatorError( +data class CISqlValidatorError ( var type: String? = null, var title: String? = null, var detail: String? = null, @@ -1011,16 +1012,16 @@ data class CISqlValidatorError( var explore_url: String? = null, var lookml_url: String? = null, var dimension: String? = null, - var line_number: String? = null, + var line_number: String? = null ) : Serializable /** * @property sql_error * @property generic_error */ -data class CISqlValidatorErrorItem( +data class CISqlValidatorErrorItem ( var sql_error: CISqlValidatorError? = null, - var generic_error: CIGenericError? = null, + var generic_error: CIGenericError? = null ) : Serializable /** @@ -1029,11 +1030,11 @@ data class CISqlValidatorErrorItem( * @property status Status of the validation (unknown, failed, passed, skipped, errored, cancelled, queued, running) * @property tested The results of tested Explores */ -data class CISqlValidatorResult( +data class CISqlValidatorResult ( var name: String? = null, var incremental: Boolean? = null, var status: String? = null, - var tested: Array? = null, + var tested: Array? = null ) : Serializable /** @@ -1044,13 +1045,13 @@ data class CISqlValidatorResult( * @property error_count Total number of failed validations * @property errors Details of the LookML that failed SQL validation */ -data class CISqlValidatorTestedExplore( +data class CISqlValidatorTestedExplore ( var model: String? = null, var explore: String? = null, var status: String? = null, var skip_reason: String? = null, var error_count: Long? = null, - var errors: Array? = null, + var errors: Array? = null ) : Serializable /** @@ -1077,7 +1078,7 @@ data class CISqlValidatorTestedExplore( * @property context LookML source code snippet lines surrounding the error * @property context_line_number Line number where the context code snippet begins */ -data class CIStyleValidatorError( +data class CIStyleValidatorError ( var type: String? = null, var title: String? = null, var detail: String? = null, @@ -1099,16 +1100,16 @@ data class CIStyleValidatorError( var error_id: String? = null, var documentation_url: String? = null, var context: Array? = null, - var context_line_number: Long? = null, + var context_line_number: Long? = null ) : Serializable /** * @property style_error * @property generic_error */ -data class CIStyleValidatorErrorItem( +data class CIStyleValidatorErrorItem ( var style_error: CIStyleValidatorError? = null, - var generic_error: CIGenericError? = null, + var generic_error: CIGenericError? = null ) : Serializable /** @@ -1118,12 +1119,12 @@ data class CIStyleValidatorErrorItem( * @property error_count Total number of failed style validations * @property errors Details of the LookML that failed style validation */ -data class CIStyleValidatorResult( +data class CIStyleValidatorResult ( var name: String? = null, var incremental: Boolean? = null, var status: String? = null, var error_count: Long? = null, - var errors: Array? = null, + var errors: Array? = null ) : Serializable /** @@ -1133,21 +1134,21 @@ data class CIStyleValidatorResult( * @property sequentialPalettes Array of discrete palette definitions * @property divergingPalettes Array of diverging palette definitions */ -data class ColorCollection( +data class ColorCollection ( var id: String? = null, var label: String? = null, var categoricalPalettes: Array? = null, var sequentialPalettes: Array? = null, - var divergingPalettes: Array? = null, + var divergingPalettes: Array? = null ) : Serializable /** * @property color CSS color string * @property offset Offset in continuous palette (0 to 100) */ -data class ColorStop( +data class ColorStop ( var color: String? = null, - var offset: Long? = null, + var offset: Long? = null ) : Serializable /** @@ -1156,11 +1157,11 @@ data class ColorStop( * @property column_name Name of column (read-only) * @property data_type Column data type (read-only) */ -data class ColumnSearch( +data class ColumnSearch ( var schema_name: String? = null, var table_name: String? = null, var column_name: String? = null, - var data_type: String? = null, + var data_type: String? = null ) : Serializable /** @@ -1174,7 +1175,7 @@ enum class ComparisonType : Serializable { LESS_THAN_OR_EQUAL_TO, INCREASES_BY, DECREASES_BY, - CHANGES_BY, + CHANGES_BY } /** @@ -1195,7 +1196,7 @@ enum class ComparisonType : Serializable { * @property timezone True for timezone conversion in query support (read-only) * @property connection_pooling True for connection pooling support (read-only) */ -data class ConnectionFeatures( +data class ConnectionFeatures ( var dialect_name: String? = null, var cost_estimate: Boolean? = null, var multiple_databases: Boolean? = null, @@ -1211,7 +1212,7 @@ data class ConnectionFeatures( var subtotals: Boolean? = null, var location: Boolean? = null, var timezone: Boolean? = null, - var connection_pooling: Boolean? = null, + var connection_pooling: Boolean? = null ) : Serializable /** @@ -1226,7 +1227,7 @@ data class ConnectionFeatures( * @property lookml_dashboard_id Id of a lookml dashboard (read-only) * @property lookml_dashboard */ -data class ContentFavorite( +data class ContentFavorite ( var id: String? = null, var user_id: String? = null, var content_metadata_id: String? = null, @@ -1236,7 +1237,7 @@ data class ContentFavorite( var dashboard: DashboardBase? = null, var board_id: String? = null, var lookml_dashboard_id: String? = null, - var lookml_dashboard: DashboardBase? = null, + var lookml_dashboard: DashboardBase? = null ) : Serializable /** @@ -1254,8 +1255,8 @@ data class ContentFavorite( * @property inheriting_id Id of Inherited Content (read-only) * @property slug Content Slug (read-only) */ -data class ContentMeta( - var can: Map? = null, +data class ContentMeta ( + var can: Map? = null, var id: String? = null, var name: String? = null, var parent_id: String? = null, @@ -1267,7 +1268,7 @@ data class ContentMeta( var content_type: String? = null, var inherits: Boolean? = null, var inheriting_id: String? = null, - var slug: String? = null, + var slug: String? = null ) : Serializable /** @@ -1280,13 +1281,13 @@ data class ContentMeta( * @property group_id ID of associated group (read-only) * @property user_id ID of associated user (read-only) */ -data class ContentMetaGroupUser( - var can: Map? = null, +data class ContentMetaGroupUser ( + var can: Map? = null, var id: String? = null, var content_metadata_id: String? = null, var permission_type: PermissionType? = null, var group_id: String? = null, - var user_id: String? = null, + var user_id: String? = null ) : Serializable /** @@ -1305,8 +1306,8 @@ data class ContentMetaGroupUser( * @property parent_folder_name Name of the parent folder of the content (read-only) * @property parent_project_name Name of the parent project of the content (read-only) */ -data class ContentSearch( - var can: Map? = null, +data class ContentSearch ( + var can: Map? = null, var content_id: String? = null, var type: String? = null, var title: String? = null, @@ -1319,7 +1320,7 @@ data class ContentSearch( var created_by_id: Long? = null, var certification_status: String? = null, var parent_folder_name: String? = null, - var parent_project_name: String? = null, + var parent_project_name: String? = null ) : Serializable /** @@ -1344,8 +1345,8 @@ data class ContentSearch( * @property preferred_viewer The preferred route for viewing this content (ie: dashboards or dashboards-next) (read-only) * @property certification_metadata */ -data class ContentSummary( - var can: Map? = null, +data class ContentSummary ( + var can: Map? = null, var id: String? = null, var content_type: String? = null, var content_id: String? = null, @@ -1364,7 +1365,7 @@ data class ContentSummary( var group_weighted_score: Float? = null, var suggestion_score: Float? = null, var preferred_viewer: String? = null, - var certification_metadata: Certification? = null, + var certification_metadata: Certification? = null ) : Serializable /** @@ -1377,7 +1378,7 @@ data class ContentSummary( * @property total_alerts_validated The number of alerts validated (read-only) * @property total_explores_validated The number of explores used across all content validated (read-only) */ -data class ContentValidation( +data class ContentValidation ( var content_with_errors: Array? = null, var computation_time: Float? = null, var total_looks_validated: Long? = null, @@ -1385,7 +1386,7 @@ data class ContentValidation( var total_dashboard_filters_validated: Long? = null, var total_scheduled_plans_validated: Long? = null, var total_alerts_validated: Long? = null, - var total_explores_validated: Long? = null, + var total_explores_validated: Long? = null ) : Serializable /** @@ -1398,7 +1399,7 @@ data class ContentValidation( * @property show_custom_url Boolean to determine if the custom url should be used * @property custom_title An optional, user-defined title for the alert */ -data class ContentValidationAlert( +data class ContentValidationAlert ( var id: String? = null, var lookml_dashboard_id: String? = null, var lookml_link_id: String? = null, @@ -1406,7 +1407,7 @@ data class ContentValidationAlert( var custom_url_params: String? = null, var custom_url_label: String? = null, var show_custom_url: Boolean? = null, - var custom_title: String? = null, + var custom_title: String? = null ) : Serializable /** @@ -1416,12 +1417,12 @@ data class ContentValidationAlert( * @property title Dashboard Title * @property url Relative URL of the dashboard (read-only) */ -data class ContentValidationDashboard( +data class ContentValidationDashboard ( var description: String? = null, var id: String? = null, var folder: ContentValidationFolder? = null, var title: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -1444,7 +1445,7 @@ data class ContentValidationDashboard( * @property extension_id Extension ID * @property aria_description Custom ARIA description text */ -data class ContentValidationDashboardElement( +data class ContentValidationDashboardElement ( var body_text: String? = null, var dashboard_id: String? = null, var id: String? = null, @@ -1462,7 +1463,7 @@ data class ContentValidationDashboardElement( var type: String? = null, var rich_content_json: String? = null, var extension_id: String? = null, - var aria_description: String? = null, + var aria_description: String? = null ) : Serializable /** @@ -1476,7 +1477,7 @@ data class ContentValidationDashboardElement( * @property explore Explore of filter (required if type = field) * @property dimension Dimension of filter (required if type = field) */ -data class ContentValidationDashboardFilter( +data class ContentValidationDashboardFilter ( var id: String? = null, var dashboard_id: String? = null, var name: String? = null, @@ -1485,7 +1486,7 @@ data class ContentValidationDashboardFilter( var default_value: String? = null, var model: String? = null, var explore: String? = null, - var dimension: String? = null, + var dimension: String? = null ) : Serializable /** @@ -1495,21 +1496,21 @@ data class ContentValidationDashboardFilter( * @property explore_name Name of the explore involved in the error (read-only) * @property removable Whether this validation error is removable (read-only) */ -data class ContentValidationError( +data class ContentValidationError ( var message: String? = null, var field_name: String? = null, var model_name: String? = null, var explore_name: String? = null, - var removable: Boolean? = null, + var removable: Boolean? = null ) : Serializable /** * @property name Unique Name * @property id Unique Id (read-only) */ -data class ContentValidationFolder( +data class ContentValidationFolder ( var name: String, - var id: String? = null, + var id: String? = null ) : Serializable /** @@ -1518,11 +1519,11 @@ data class ContentValidationFolder( * @property short_url Short Url (read-only) * @property folder */ -data class ContentValidationLook( +data class ContentValidationLook ( var id: String? = null, var title: String? = null, var short_url: String? = null, - var folder: ContentValidationFolder? = null, + var folder: ContentValidationFolder? = null ) : Serializable /** @@ -1530,19 +1531,19 @@ data class ContentValidationLook( * @property title Title of the LookML Dashboard (read-only) * @property space_id ID of Space (read-only) */ -data class ContentValidationLookMLDashboard( +data class ContentValidationLookMLDashboard ( var id: String? = null, var title: String? = null, - var space_id: String? = null, + var space_id: String? = null ) : Serializable /** * @property lookml_link_id Link ID of the LookML Dashboard Element (read-only) * @property title Title of the LookML Dashboard Element (read-only) */ -data class ContentValidationLookMLDashboardElement( +data class ContentValidationLookMLDashboardElement ( var lookml_link_id: String? = null, - var title: String? = null, + var title: String? = null ) : Serializable /** @@ -1550,10 +1551,10 @@ data class ContentValidationLookMLDashboardElement( * @property look_id Id of a look * @property id Unique Id (read-only) */ -data class ContentValidationScheduledPlan( +data class ContentValidationScheduledPlan ( var name: String? = null, var look_id: String? = null, - var id: String? = null, + var id: String? = null ) : Serializable /** @@ -1568,7 +1569,7 @@ data class ContentValidationScheduledPlan( * @property errors A list of errors found for this piece of content (read-only) * @property id An id unique to this piece of content for this validation run (read-only) */ -data class ContentValidatorError( +data class ContentValidatorError ( var look: ContentValidationLook? = null, var dashboard: ContentValidationDashboard? = null, var dashboard_element: ContentValidationDashboardElement? = null, @@ -1578,7 +1579,7 @@ data class ContentValidatorError( var lookml_dashboard: ContentValidationLookMLDashboard? = null, var lookml_dashboard_element: ContentValidationLookMLDashboardElement? = null, var errors: Array? = null, - var id: String? = null, + var id: String? = null ) : Serializable /** @@ -1595,8 +1596,8 @@ data class ContentValidatorError( * @property last_viewed_at Date the piece of content was last viewed (read-only) * @property start_of_week_date Week start date for the view and favorite count during that given week (read-only) */ -data class ContentView( - var can: Map? = null, +data class ContentView ( + var can: Map? = null, var id: String? = null, var look_id: String? = null, var dashboard_id: String? = null, @@ -1607,7 +1608,7 @@ data class ContentView( var view_count: Long? = null, var favorite_count: Long? = null, var last_viewed_at: String? = null, - var start_of_week_date: String? = null, + var start_of_week_date: String? = null ) : Serializable /** @@ -1615,10 +1616,10 @@ data class ContentView( * @property show_analytical_details Show analytical details in preview * @property show_debug Show debug info in preview */ -data class Context( +data class Context ( var instructions: String? = null, var show_analytical_details: Boolean? = null, - var show_debug: Boolean? = null, + var show_debug: Boolean? = null ) : Serializable /** @@ -1627,11 +1628,11 @@ data class Context( * @property type Type of palette * @property stops Array of ColorStops in the palette */ -data class ContinuousPalette( +data class ContinuousPalette ( var id: String? = null, var label: String? = null, var type: String? = null, - var stops: Array? = null, + var stops: Array? = null ) : Serializable /** @@ -1650,8 +1651,8 @@ data class ContinuousPalette( * @property missing_agent Agent associated with this conversation was deleted (read-only) * @property studio_conversation_id Studio Conversation ID (if this conversation was migrated) (read-only) */ -data class Conversation( - var can: Map? = null, +data class Conversation ( + var can: Map? = null, var id: String? = null, var name: String? = null, var category: String? = null, @@ -1664,16 +1665,16 @@ data class Conversation( var messages: Array? = null, var conversation_agent: Agent? = null, var missing_agent: Boolean? = null, - var studio_conversation_id: String? = null, + var studio_conversation_id: String? = null ) : Serializable /** * @property conversation_id A unique identifier for the conversation. * @property user_message The text content of the most recent message in the conversation. */ -data class ConversationalAnalyticsChatRequest( +data class ConversationalAnalyticsChatRequest ( var conversation_id: String, - var user_message: String, + var user_message: String ) : Serializable /** @@ -1683,12 +1684,12 @@ data class ConversationalAnalyticsChatRequest( * @property type Message type * @property order Message order (read-only) */ -data class ConversationMessage( - var can: Map? = null, +data class ConversationMessage ( + var can: Map? = null, var id: String? = null, - var message: Map? = null, + var message: Map? = null, var type: String? = null, - var order: Long? = null, + var order: Long? = null ) : Serializable /** @@ -1697,11 +1698,11 @@ data class ConversationMessage( * @property cost_unit Cost measurement size (read-only) * @property message Human-friendly message (read-only) */ -data class CostEstimate( +data class CostEstimate ( var cost: Long? = null, var cache_hit: Boolean? = null, var cost_unit: String? = null, - var message: String? = null, + var message: String? = null ) : Serializable /** @@ -1711,12 +1712,12 @@ data class CostEstimate( * @property user_attributes User attributes to override for the CI run. * @property project_imports Map of upstream project names to commit SHAs or git configurations to pin for the CI run. */ -data class CreateContinuousIntegrationRunRequest( +data class CreateContinuousIntegrationRunRequest ( var suite_id: String? = null, var branch: String? = null, var commit: String? = null, var user_attributes: Array? = null, - var project_imports: Map? = null, + var project_imports: Map? = null ) : Serializable /** @@ -1724,8 +1725,8 @@ data class CreateContinuousIntegrationRunRequest( * * @property sql SQL statement to estimate (read-only) */ -data class CreateCostEstimate( - var sql: String? = null, +data class CreateCostEstimate ( + var sql: String? = null ) : Serializable /** @@ -1739,8 +1740,8 @@ data class CreateCostEstimate( * @property client_secret API key client_secret (read-only) * @property url Link to get this item (read-only) */ -data class CreateCredentialsApi3( - var can: Map? = null, +data class CreateCredentialsApi3 ( + var can: Map? = null, var id: String? = null, var client_id: String? = null, var created_at: String? = null, @@ -1748,7 +1749,7 @@ data class CreateCredentialsApi3( var type: String? = null, var purpose: String? = null, var client_secret: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -1768,7 +1769,7 @@ data class CreateCredentialsApi3( * @property required Whether the filter requires a value to run the dashboard * @property ui_config The visual configuration for this filter. Used to set up how the UI for this filter should appear. */ -data class CreateDashboardFilter( +data class CreateDashboardFilter ( var id: String? = null, var dashboard_id: String, var name: String, @@ -1778,12 +1779,12 @@ data class CreateDashboardFilter( var model: String? = null, var explore: String? = null, var dimension: String? = null, - var field: Map? = null, + var field: Map? = null, var row: Long? = null, var listens_to_filters: Array? = null, var allow_multiple_values: Boolean? = null, var required: Boolean? = null, - var ui_config: Map? = null, + var ui_config: Map? = null ) : Serializable /** @@ -1791,26 +1792,26 @@ data class CreateDashboardFilter( * @property dashboard_style Dashboard layout style: single_column or tiled * @property tab_ids IDs of tabs to render (ID on a UDD and a tab label on lookml dashboards) */ -data class CreateDashboardRenderTask( +data class CreateDashboardRenderTask ( var dashboard_filters: String? = null, var dashboard_style: String? = null, - var tab_ids: Array? = null, + var tab_ids: Array? = null ) : Serializable /** * @property external_user_id */ -data class CreateEmbedUserRequest( - var external_user_id: String, +data class CreateEmbedUserRequest ( + var external_user_id: String ) : Serializable /** * @property name Unique Name * @property parent_id Id of Parent. If the parent id is null, this is a root-level entry */ -data class CreateFolder( +data class CreateFolder ( var name: String, - var parent_id: String, + var parent_id: String ) : Serializable /** @@ -1821,22 +1822,22 @@ data class CreateFolder( * @property refresh_token * @property refresh_token_expires_at */ -data class CreateOAuthApplicationUserStateRequest( +data class CreateOAuthApplicationUserStateRequest ( var user_id: String, var oauth_application_id: String, var access_token: String, var access_token_expires_at: Date, var refresh_token: String? = null, - var refresh_token_expires_at: Date? = null, + var refresh_token_expires_at: Date? = null ) : Serializable /** * @property user_id User Id (read-only) * @property oauth_application_id OAuth Application ID (read-only) */ -data class CreateOAuthApplicationUserStateResponse( +data class CreateOAuthApplicationUserStateResponse ( var user_id: String, - var oauth_application_id: String, + var oauth_application_id: String ) : Serializable /** @@ -1848,14 +1849,14 @@ data class CreateOAuthApplicationUserStateResponse( * @property look_id Id of look associated with query. * @property dashboard_id Id of dashboard associated with query. */ -data class CreateQueryTask( - var can: Map? = null, +data class CreateQueryTask ( + var can: Map? = null, var query_id: String, var result_format: ResultFormat, var source: String? = null, var deferred: Boolean? = null, var look_id: String? = null, - var dashboard_id: String? = null, + var dashboard_id: String? = null ) : Serializable /** @@ -1868,15 +1869,15 @@ data class CreateQueryTask( * @property purpose User defined purpose for this credential. * @property url Link to get this item (read-only) */ -data class CredentialsApi3( - var can: Map? = null, +data class CredentialsApi3 ( + var can: Map? = null, var id: String? = null, var client_id: String? = null, var created_at: String? = null, var is_disabled: Boolean? = null, var type: String? = null, var purpose: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -1895,8 +1896,8 @@ data class CredentialsApi3( * @property url Link to get this item (read-only) * @property user_url Link to get this user (read-only) */ -data class CredentialsEmail( - var can: Map? = null, +data class CredentialsEmail ( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var forced_password_reset_at_next_login: Boolean? = null, @@ -1909,7 +1910,7 @@ data class CredentialsEmail( var account_setup_url_expired: Boolean? = null, var type: String? = null, var url: String? = null, - var user_url: String? = null, + var user_url: String? = null ) : Serializable /** @@ -1928,8 +1929,8 @@ data class CredentialsEmail( * @property url Link to get this item (read-only) * @property user_url Link to get this user (read-only) */ -data class CredentialsEmailSearch( - var can: Map? = null, +data class CredentialsEmailSearch ( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var forced_password_reset_at_next_login: Boolean? = null, @@ -1942,7 +1943,7 @@ data class CredentialsEmailSearch( var account_setup_url_expired: Boolean? = null, var type: String? = null, var url: String? = null, - var user_url: String? = null, + var user_url: String? = null ) : Serializable /** @@ -1956,8 +1957,8 @@ data class CredentialsEmailSearch( * @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 CredentialsEmbed( - var can: Map? = null, +data class CredentialsEmbed ( + var can: Map? = null, var created_at: String? = null, var external_group_id: String? = null, var external_user_id: String? = null, @@ -1965,7 +1966,7 @@ data class CredentialsEmbed( var is_disabled: Boolean? = null, var logged_in_at: String? = null, var type: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -1979,8 +1980,8 @@ data class CredentialsEmbed( * @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 CredentialsGoogle( - var can: Map? = null, +data class CredentialsGoogle ( + var can: Map? = null, var created_at: String? = null, var domain: String? = null, var email: String? = null, @@ -1988,7 +1989,7 @@ data class CredentialsGoogle( var is_disabled: Boolean? = null, var logged_in_at: String? = null, var type: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -2002,8 +2003,8 @@ data class CredentialsGoogle( * @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 CredentialsLDAP( - var can: Map? = null, +data class CredentialsLDAP ( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var is_disabled: Boolean? = null, @@ -2011,7 +2012,7 @@ data class CredentialsLDAP( var ldap_id: String? = null, var logged_in_at: String? = null, var type: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -2025,8 +2026,8 @@ data class CredentialsLDAP( * @property url Link to get this item (read-only) * @property user_url Link to get this user (read-only) */ -data class CredentialsLookerOpenid( - var can: Map? = null, +data class CredentialsLookerOpenid ( + var can: Map? = null, var created_at: String? = null, var email: String? = null, var is_disabled: Boolean? = null, @@ -2034,7 +2035,7 @@ data class CredentialsLookerOpenid( var logged_in_ip: String? = null, var type: String? = null, var url: String? = null, - var user_url: String? = null, + var user_url: String? = null ) : Serializable /** @@ -2047,15 +2048,15 @@ data class CredentialsLookerOpenid( * @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 CredentialsOIDC( - var can: Map? = null, +data class CredentialsOIDC ( + 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 oidc_user_id: String? = null, var type: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -2068,15 +2069,15 @@ data class CredentialsOIDC( * @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 CredentialsSaml( - var can: Map? = null, +data class CredentialsSaml ( + 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 saml_user_id: String? = null, var type: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -2089,13 +2090,13 @@ data class CredentialsSaml( * @property verified User has verified (read-only) * @property url Link to get this item (read-only) */ -data class CredentialsTotp( - var can: Map? = null, +data class CredentialsTotp ( + var can: Map? = null, var created_at: String? = null, var is_disabled: Boolean? = null, var type: String? = null, var verified: Boolean? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -2108,15 +2109,15 @@ data class CredentialsTotp( * @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, +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, + var url: String? = null ) : Serializable /** @@ -2125,11 +2126,11 @@ data class CredentialsWorkforce( * @property subject The text to appear in the email subject line. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. * @property header The text to appear in the header line of the email body. Only available with a whitelabel license and whitelabel_configuration.advanced_custom_welcome_email enabled. */ -data class CustomWelcomeEmail( +data class CustomWelcomeEmail ( var enabled: Boolean? = null, var content: String? = null, var subject: String? = null, - var header: String? = null, + var header: String? = null ) : Serializable /** @@ -2190,8 +2191,8 @@ data class CustomWelcomeEmail( * @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( - var can: Map? = null, +data class Dashboard ( + var can: Map? = null, var content_favorite_id: String? = null, var content_metadata_id: String? = null, var description: String? = null, @@ -2246,16 +2247,16 @@ data class Dashboard( var url: String? = null, var layout_granularity: String? = null, var preserve_desktop_layout: Boolean? = null, - var download_settings: DashboardDownloadSettings? = null, + var download_settings: DashboardDownloadSettings? = null ) : Serializable /** * @property dashboard_id Dashboard Id (read-only) * @property aggregate_table_lookml Aggregate Table LookML (read-only) */ -data class DashboardAggregateTableLookml( +data class DashboardAggregateTableLookml ( var dashboard_id: String? = null, - var aggregate_table_lookml: String? = null, + var aggregate_table_lookml: String? = null ) : Serializable /** @@ -2276,7 +2277,7 @@ data class DashboardAggregateTableLookml( * @property show_last_updated_indicator Toggle to show last updated indicator. Defaults to true. * @property background_opacity Background image opacity (0.0 to 1.0) */ -data class DashboardAppearance( +data class DashboardAppearance ( var page_side_margins: Long? = null, var page_background_color: String? = null, var tile_title_alignment: String? = null, @@ -2292,7 +2293,7 @@ data class DashboardAppearance( var show_reload_data_icon: Boolean? = null, var show_dashboard_menu: Boolean? = null, var show_last_updated_indicator: Boolean? = null, - var background_opacity: Float? = null, + var background_opacity: Float? = null ) : Serializable /** @@ -2314,8 +2315,8 @@ data class DashboardAppearance( * @property preferred_viewer The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) (read-only) * @property certification_metadata */ -data class DashboardBase( - var can: Map? = null, +data class DashboardBase ( + var can: Map? = null, var content_favorite_id: String? = null, var content_metadata_id: String? = null, var description: String? = null, @@ -2331,7 +2332,7 @@ data class DashboardBase( var user_id: String? = null, var slug: String? = null, var preferred_viewer: String? = null, - var certification_metadata: Certification? = null, + var certification_metadata: Certification? = null ) : Serializable /** @@ -2343,14 +2344,14 @@ data class DashboardBase( * @property columns_limit Columns limit * @property append_excel_metadata Append Excel metadata */ -data class DashboardDownloadSettings( +data class DashboardDownloadSettings ( var format_option: String? = null, var value_options: String? = null, var result_options: String? = null, var limit_options: String? = null, var rows_limit: Long? = null, var columns_limit: Long? = null, - var append_excel_metadata: Boolean? = null, + var append_excel_metadata: Boolean? = null ) : Serializable /** @@ -2392,8 +2393,8 @@ data class DashboardDownloadSettings( * @property image_id ID of Dashboard Image * @property images Images (read-only) */ -data class DashboardElement( - var can: Map? = null, +data class DashboardElement ( + var can: Map? = null, var body_text: String? = null, var body_text_as_html: String? = null, var dashboard_id: String? = null, @@ -2429,7 +2430,7 @@ data class DashboardElement( var aria_description: String? = null, var certification_metadata: Certification? = null, var image_id: String? = null, - var images: Array? = null, + var images: Array? = null ) : Serializable /** @@ -2450,8 +2451,8 @@ data class DashboardElement( * @property required Whether the filter requires a value to run the dashboard * @property ui_config The visual configuration for this filter. Used to set up how the UI for this filter should appear. */ -data class DashboardFilter( - var can: Map? = null, +data class DashboardFilter ( + var can: Map? = null, var id: String? = null, var dashboard_id: String? = null, var name: String? = null, @@ -2461,12 +2462,12 @@ data class DashboardFilter( var model: String? = null, var explore: String? = null, var dimension: String? = null, - var field: Map? = null, + var field: Map? = null, var row: Long? = null, var listens_to_filters: Array? = null, var allow_multiple_values: Boolean? = null, var required: Boolean? = null, - var ui_config: Map? = null, + var ui_config: Map? = null ) : Serializable /** @@ -2485,8 +2486,8 @@ data class DashboardFilter( * @property order Order * @property lookml_link_id LookML link ID (stable name) */ -data class DashboardLayout( - var can: Map? = null, +data class DashboardLayout ( + var can: Map? = null, var id: String? = null, var dashboard_id: String? = null, var type: String? = null, @@ -2499,7 +2500,7 @@ data class DashboardLayout( var label: String? = null, var description: String? = null, var order: Long? = null, - var lookml_link_id: String? = null, + var lookml_link_id: String? = null ) : Serializable /** @@ -2521,8 +2522,8 @@ data class DashboardLayout( * @property granular_height Height (granular layout) * @property group_id Id of parent Dashboard Layout Component group */ -data class DashboardLayoutComponent( - var can: Map? = null, +data class DashboardLayoutComponent ( + var can: Map? = null, var id: String? = null, var dashboard_layout_id: String? = null, var dashboard_element_id: String? = null, @@ -2538,7 +2539,7 @@ data class DashboardLayoutComponent( var granular_column: Long? = null, var granular_width: Long? = null, var granular_height: Long? = null, - var group_id: String? = null, + var group_id: String? = null ) : Serializable /** @@ -2546,19 +2547,19 @@ data class DashboardLayoutComponent( * @property folder_id (Write-Only) Id of the folder * @property lookml lookml of UDD */ -data class DashboardLookml( +data class DashboardLookml ( var dashboard_id: String? = null, var folder_id: String? = null, - var lookml: String? = null, + var lookml: String? = null ) : Serializable /** * @property state * @property fields Array of form fields. (read-only) */ -data class DataActionForm( +data class DataActionForm ( var state: DataActionUserState? = null, - var fields: Array? = null, + var fields: Array? = null ) : Serializable /** @@ -2572,7 +2573,7 @@ data class DataActionForm( * @property required Whether or not the field is required. This is a user-interface hint. A user interface displaying this form should not submit it without a value for this field. The action server must also perform this validation. (read-only) * @property options If the form type is 'select', a list of options to be selected from. (read-only) */ -data class DataActionFormField( +data class DataActionFormField ( var name: String? = null, var label: String? = null, var description: String? = null, @@ -2581,25 +2582,25 @@ data class DataActionFormField( var oauth_url: String? = null, var interactive: Boolean? = null, var required: Boolean? = null, - var options: Array? = null, + var options: Array? = null ) : Serializable /** * @property name Name (read-only) * @property label Human-readable label (read-only) */ -data class DataActionFormSelectOption( +data class DataActionFormSelectOption ( var name: String? = null, - var label: String? = null, + var label: String? = null ) : Serializable /** * @property action The JSON describing the data action. This JSON should be considered opaque and should be passed through unmodified from the query result it came from. * @property form_values User input for any form values the data action might use. */ -data class DataActionRequest( - var action: Map? = null, - var form_values: Map? = null, +data class DataActionRequest ( + var action: Map? = null, + var form_values: Map? = null ) : Serializable /** @@ -2609,21 +2610,21 @@ data class DataActionRequest( * @property validation_errors * @property message Optional message returned by the data action server describing the state of the action that took place. This can be used to implement custom failure messages. If a failure is related to a particular form field, the server should send back a validation error instead. The Looker web UI does not currently display any message if the action indicates 'success', but may do so in the future. (read-only) */ -data class DataActionResponse( +data class DataActionResponse ( var webhook_id: String? = null, var success: Boolean? = null, var refresh_query: Boolean? = null, var validation_errors: ValidationError? = null, - var message: String? = null, + var message: String? = null ) : Serializable /** * @property data User state data (read-only) * @property refresh_time Time in seconds until the state needs to be refreshed (read-only) */ -data class DataActionUserState( +data class DataActionUserState ( var data: String? = null, - var refresh_time: Long? = null, + var refresh_time: Long? = null ) : Serializable /** @@ -2631,10 +2632,10 @@ data class DataActionUserState( * @property value The default value used for this filter. (read-only) * @property type The type of filter present on a datasource. (read-only) */ -data class DataFilter( +data class DataFilter ( var field: String? = null, var value: String? = null, - var type: String? = null, + var type: String? = null ) : Serializable /** @@ -2649,8 +2650,8 @@ data class DataFilter( * @property trigger_value The value of the trigger when last checked. (read-only) * @property triggered_at UNIX timestamp at which this entry became triggered. Cannot be in the future. */ -data class Datagroup( - var can: Map? = null, +data class Datagroup ( + var can: Map? = null, var created_at: Long? = null, var id: String? = null, var model_name: String? = null, @@ -2659,7 +2660,7 @@ data class Datagroup( var trigger_check_at: Long? = null, var trigger_error: String? = null, var trigger_value: String? = null, - var triggered_at: Long? = null, + var triggered_at: Long? = null ) : Serializable /** @@ -2669,12 +2670,12 @@ data class Datagroup( * @property generatedLookerQuery * @property bigQueryJob */ -data class DataMessage( +data class DataMessage ( var query: DataQuery? = null, var generatedSql: String? = null, var result: DataResult? = null, var generatedLookerQuery: Query? = null, - var bigQueryJob: BigQueryJob? = null, + var bigQueryJob: BigQueryJob? = null ) : Serializable /** @@ -2683,11 +2684,11 @@ data class DataMessage( * @property datasources The datasources available to answer the question. (read-only) * @property looker */ -data class DataQuery( +data class DataQuery ( var question: String? = null, var name: String? = null, var datasources: Array? = null, - var looker: Query? = null, + var looker: Query? = null ) : Serializable /** @@ -2695,10 +2696,10 @@ data class DataQuery( * @property schema * @property data The content of the data. (read-only) */ -data class DataResult( +data class DataResult ( var name: String? = null, var schema: DataSourceSchema? = null, - var data: Array? = null, + var data: Array? = null ) : Serializable /** @@ -2706,10 +2707,10 @@ data class DataResult( * @property schema * @property structSchema A struct representation of the schema. (read-only) */ -data class Datasource( +data class Datasource ( var lookerExploreReference: LookerExploreReference? = null, var schema: DataSourceSchema? = null, - var structSchema: Map? = null, + var structSchema: Map? = null ) : Serializable /** @@ -2720,13 +2721,13 @@ data class Datasource( * @property displayName Table displayName. (read-only) * @property filters The filters on the datasource's underlying data. (read-only) */ -data class DataSourceSchema( +data class DataSourceSchema ( var fields: Array? = null, var description: String? = null, var synonyms: Array? = null, var tags: Array? = null, var displayName: String? = null, - var filters: Array? = null, + var filters: Array? = null ) : Serializable /** @@ -2799,8 +2800,8 @@ data class DataSourceSchema( * @property query_holding_disabled Disable query holding for this connection. * @property service_name Service name used for connections with TNS enabled */ -data class DBConnection( - var can: Map? = null, +data class DBConnection ( + var can: Map? = null, var name: String? = null, var dialect: Dialect? = null, var snippets: Array? = null, @@ -2867,7 +2868,7 @@ data class DBConnection( var bq_roles_verified: Boolean? = null, var p4sa_name: String? = null, var query_holding_disabled: Boolean? = null, - var service_name: String? = null, + var service_name: String? = null ) : Serializable /** @@ -2878,13 +2879,13 @@ data class DBConnection( * @property pdts_enabled True if PDTs are enabled on this connection (read-only) * @property project_id ID of the LookML project to which this connection is scoped. Excluding or passing 'NULL' in this field makes the connection global. Beware that once configured this field cannot be modified. */ -data class DBConnectionBase( - var can: Map? = null, +data class DBConnectionBase ( + var can: Map? = null, var name: String? = null, var dialect: Dialect? = null, var snippets: Array? = null, var pdts_enabled: Boolean? = null, - var project_id: String? = null, + var project_id: String? = null ) : Serializable /** @@ -2912,7 +2913,7 @@ data class DBConnectionBase( * @property pdt_after_connect_statements SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature (same as after_connect_statements) * @property pdt_service_name Service name used for connections with TNS enabled */ -data class DBConnectionOverride( +data class DBConnectionOverride ( var context: String? = null, var host: String? = null, var pdt_host: String? = null, @@ -2935,7 +2936,7 @@ data class DBConnectionOverride( var pdt_jdbc_additional_params: String? = null, var after_connect_statements: String? = null, var pdt_after_connect_statements: String? = null, - var pdt_service_name: String? = null, + var pdt_service_name: String? = null ) : Serializable /** @@ -2945,12 +2946,12 @@ data class DBConnectionOverride( * @property name Name of test (read-only) * @property status Result code of test (read-only) */ -data class DBConnectionTestResult( - var can: Map? = null, +data class DBConnectionTestResult ( + var can: Map? = null, var connection_string: String? = null, var message: String? = null, var name: String? = null, - var status: String? = null, + var status: String? = null ) : Serializable /** @@ -2959,18 +2960,18 @@ data class DBConnectionTestResult( * @property installation_id Installation ID (read-only) * @property success Whether or not the test was successful (read-only) */ -data class DelegateOauthTest( +data class DelegateOauthTest ( var name: String? = null, var installation_target_id: String? = null, var installation_id: String? = null, - var success: Boolean? = null, + var success: Boolean? = null ) : Serializable /** * @property graph_text The graph structure in the dot language that can be rendered into an image. (read-only) */ -data class DependencyGraph( - var graph_text: String? = null, +data class DependencyGraph ( + var graph_text: String? = null ) : Serializable /** @@ -2980,7 +2981,7 @@ enum class DependencyStatus : Serializable { lock_optional, lock_required, lock_error, - install_none, + install_none } /** @@ -2988,10 +2989,10 @@ enum class DependencyStatus : Serializable { * @property error Error message if the deploy failed (read-only) * @property commit_sha Commit SHA of the deployment (read-only) */ -data class DeployStatusResponse( +data class DeployStatusResponse ( var status: String? = null, var error: String? = null, - var commit_sha: String? = null, + var commit_sha: String? = null ) : Serializable /** @@ -2999,7 +3000,7 @@ data class DeployStatusResponse( */ enum class DestinationType : Serializable { EMAIL, - ACTION_HUB, + ACTION_HUB } /** @@ -3007,7 +3008,7 @@ enum class DestinationType : Serializable { */ enum class DeviceType : Serializable { android, - ios, + ios } /** @@ -3026,7 +3027,7 @@ enum class DeviceType : Serializable { * @property supports_persistent_derived_tables Whether the dialect supports allowing Looker to build persistent derived tables (read-only) * @property has_ssl_support Does the database have client SSL support settable through the JDBC string explicitly? (read-only) */ -data class Dialect( +data class Dialect ( var name: String? = null, var label: String? = null, var supports_cost_estimate: Boolean? = null, @@ -3040,16 +3041,16 @@ data class Dialect( var supports_inducer: Boolean? = null, var supports_multiple_databases: Boolean? = null, var supports_persistent_derived_tables: Boolean? = null, - var has_ssl_support: Boolean? = null, + var has_ssl_support: Boolean? = null ) : Serializable /** * @property name Name to be passed to the backend (read-only) * @property display_name Name to be displayed in the frontend. (read-only) */ -data class DialectDriverNamesVersion( +data class DialectDriverNamesVersion ( var name: String? = null, - var display_name: String? = null, + var display_name: String? = null ) : Serializable /** @@ -3067,8 +3068,8 @@ data class DialectDriverNamesVersion( * @property supported_driver_versions Array of supported drivers for a given dialect (read-only) * @property supported_options */ -data class DialectInfo( - var can: Map? = null, +data class DialectInfo ( + var can: Map? = null, var default_max_connections: String? = null, var default_port: String? = null, var default_max_queries: String? = null, @@ -3080,7 +3081,7 @@ data class DialectInfo( var name: String? = null, var supported_driver_name: String? = null, var supported_driver_versions: Array? = null, - var supported_options: DialectInfoOptions? = null, + var supported_options: DialectInfoOptions? = null ) : Serializable /** @@ -3111,7 +3112,7 @@ data class DialectInfo( * @property supports_connection_pooling Has support for connection pooling (read-only) * @property user_attribute_certificate Has user attribute certificate support (read-only) */ -data class DialectInfoOptions( +data class DialectInfoOptions ( var additional_params: Boolean? = null, var after_connect_statements: Boolean? = null, var analytical_view_dataset: Boolean? = null, @@ -3137,21 +3138,21 @@ data class DialectInfoOptions( var username: Boolean? = null, var username_required: Boolean? = null, var supports_connection_pooling: Boolean? = null, - var user_attribute_certificate: Boolean? = null, + var user_attribute_certificate: Boolean? = null ) : Serializable /** * @property is_enabled Whether or not digest emails are enabled */ -data class DigestEmails( - var is_enabled: Boolean? = null, +data class DigestEmails ( + var is_enabled: Boolean? = null ) : Serializable /** * @property configuration_delivered True if content was successfully generated and delivered */ -data class DigestEmailSend( - var configuration_delivered: Boolean? = null, +data class DigestEmailSend ( + var configuration_delivered: Boolean? = null ) : Serializable /** @@ -3160,18 +3161,18 @@ data class DigestEmailSend( * @property type Type of palette * @property colors Array of colors in the palette */ -data class DiscretePalette( +data class DiscretePalette ( var id: String? = null, var label: String? = null, var type: String? = null, - var colors: Array? = null, + var colors: Array? = null ) : Serializable /** * @property egress_ip_addresses Egress IP addresses (read-only) */ -data class EgressIpAddresses( - var egress_ip_addresses: Array? = null, +data class EgressIpAddresses ( + var egress_ip_addresses: Array? = null ) : Serializable /** @@ -3190,7 +3191,7 @@ data class EgressIpAddresses( * @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( +data class EmbedConfig ( var domain_allowlist: Array? = null, var alert_url_allowlist: Array? = null, var alert_url_param_owner: String? = null, @@ -3203,8 +3204,8 @@ 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, + var permissions: Map? = null, + var embed_enabled: Boolean? = null ) : Serializable /** @@ -3222,7 +3223,7 @@ data class EmbedConfig( * @property embed_domain The domain of the server embedding the Looker IFRAME. This is an alternative to specifying the domain in the embedded domain allow list in the Looker embed admin page. * @property session_reference_token Token referencing the embed session and is used to generate new authentication, navigation and api tokens. */ -data class EmbedCookielessSessionAcquire( +data class EmbedCookielessSessionAcquire ( var session_length: Long? = null, var force_logout_login: Boolean? = null, var external_user_id: String? = null, @@ -3233,9 +3234,9 @@ data class EmbedCookielessSessionAcquire( var models: Array? = null, var group_ids: Array? = null, var external_group_id: String? = null, - var user_attributes: Map? = null, + var user_attributes: Map? = null, var embed_domain: String? = null, - var session_reference_token: String? = null, + var session_reference_token: String? = null ) : Serializable /** @@ -3248,7 +3249,7 @@ data class EmbedCookielessSessionAcquire( * @property session_reference_token Token referencing the actual embed session. It is used to generate new api, navigation and authentication tokens. api and navigation tokens are short lived and must be refreshed regularly. A new authentication token must be acquired for each IFRAME that is created. The session_reference_token should be kept secure, ideally in the embed hosts application server. * @property session_reference_token_ttl Session reference token time to live in seconds. Note that this is the same as actual embed session. The session is expired when the value is set to zero. It is important to note that the generate token endpoint does NOT return an error when the embed session has expired. If an embedding application needs to monitor expiration of embed sessions, check this property for a value of zero. */ -data class EmbedCookielessSessionAcquireResponse( +data class EmbedCookielessSessionAcquireResponse ( var authentication_token: String? = null, var authentication_token_ttl: Long? = null, var navigation_token: String? = null, @@ -3256,7 +3257,7 @@ data class EmbedCookielessSessionAcquireResponse( var api_token: String? = null, var api_token_ttl: Long? = null, var session_reference_token: String? = null, - var session_reference_token_ttl: Long? = null, + var session_reference_token_ttl: Long? = null ) : Serializable /** @@ -3264,10 +3265,10 @@ data class EmbedCookielessSessionAcquireResponse( * @property navigation_token Token used to load and navigate between Looker pages. * @property api_token Token to used to call Looker APIs. */ -data class EmbedCookielessSessionGenerateTokens( +data class EmbedCookielessSessionGenerateTokens ( var session_reference_token: String, var navigation_token: String? = null, - var api_token: String? = null, + var api_token: String? = null ) : Serializable /** @@ -3278,13 +3279,13 @@ data class EmbedCookielessSessionGenerateTokens( * @property session_reference_token Token referencing the embed session and is used to generate new authentication, navigation and api tokens. * @property session_reference_token_ttl Session reference token time to live in seconds. Note that this is the same as actual session. */ -data class EmbedCookielessSessionGenerateTokensResponse( +data class EmbedCookielessSessionGenerateTokensResponse ( var navigation_token: String? = null, var navigation_token_ttl: Long? = null, var api_token: String? = null, var api_token_ttl: Long? = null, var session_reference_token: String, - var session_reference_token_ttl: Long? = null, + var session_reference_token_ttl: Long? = null ) : Serializable /** @@ -3292,10 +3293,10 @@ data class EmbedCookielessSessionGenerateTokensResponse( * @property session_length Number of seconds the signed embed session will be valid after the embed session is started. Defaults to 300 seconds. Maximum session length accepted is 2592000 seconds (30 days). * @property force_logout_login When true, the embed session will purge any residual Looker login state (such as in browser cookies) before creating a new login state with the given embed user info. Defaults to true. */ -data class EmbedParams( +data class EmbedParams ( var target_url: String, var session_length: Long? = null, - var force_logout_login: Boolean? = null, + var force_logout_login: Boolean? = null ) : Serializable /** @@ -3307,14 +3308,14 @@ data class EmbedParams( * @property user_id Id of user who created this secret (read-only) * @property secret_type Field to distinguish between SSO secrets and JWT secrets Valid values are: "SSO", "JWT". */ -data class EmbedSecret( +data class EmbedSecret ( var algorithm: String? = null, var created_at: String? = null, var enabled: Boolean? = null, var id: String? = null, var secret: String? = null, var user_id: String? = null, - var secret_type: SecretType? = null, + var secret_type: SecretType? = null ) : Serializable /** @@ -3333,7 +3334,7 @@ data class EmbedSecret( * @property secret_id Id of the embed secret to use to sign this SSO url. If specified, the value must be an id of a valid (active) secret defined in the Looker instance. If not specified, the URL will be signed with the newest active embed secret defined in the Looker instance. * @property embed_domain Optional. URL of the domain hosting the signed embed URL. If provided and valid, the embed_domain will be added to the embed domain allowlist if it is not currently in the list */ -data class EmbedSsoParams( +data class EmbedSsoParams ( var target_url: String, var session_length: Long? = null, var force_logout_login: Boolean? = null, @@ -3345,16 +3346,16 @@ data class EmbedSsoParams( var models: Array? = null, var group_ids: Array? = null, var external_group_id: String? = null, - var user_attributes: Map? = null, + var user_attributes: Map? = null, var secret_id: String? = null, - var embed_domain: String? = null, + var embed_domain: String? = null ) : Serializable /** * @property url The embed URL. Any modification to this string will make the URL unusable. (read-only) */ -data class EmbedUrlResponse( - var url: String? = null, +data class EmbedUrlResponse ( + var url: String? = null ) : Serializable /** @@ -3362,39 +3363,39 @@ data class EmbedUrlResponse( */ enum class Enhancements : Serializable { NONE, - STRATEGIC_NARRATIVE, + STRATEGIC_NARRATIVE } /** * @property message Error details (read-only) * @property documentation_url Documentation link (read-only) */ -data class Error( +data class Error ( var message: String, - var documentation_url: String, + var documentation_url: String ) : Serializable /** * @property text The text of the error. (read-only) */ -data class ErrorMessage( - var text: String? = null, +data class ErrorMessage ( + var text: String? = null ) : Serializable /** * @property exampleQueries A list of derived and authored example queries. (read-only) */ -data class ExampleQueries( - var exampleQueries: Array? = null, +data class ExampleQueries ( + var exampleQueries: Array? = null ) : Serializable /** * @property naturalLanguageQuestion A natural language question that a user might ask. (read-only) * @property sqlQuery The SQL query that should be generated to answer the natural language question. (read-only) */ -data class ExampleQuery( +data class ExampleQuery ( var naturalLanguageQuestion: String? = null, - var sqlQuery: String? = null, + var sqlQuery: String? = null ) : Serializable /** @@ -3408,8 +3409,8 @@ data class ExampleQuery( * @property bi_directional_data_access Whether this application supports bi-directional data access. * @property created_at Creation time for this application (read-only) */ -data class ExternalOauthApplication( - var can: Map? = null, +data class ExternalOauthApplication ( + var can: Map? = null, var id: String? = null, var name: String? = null, var client_id: String? = null, @@ -3417,7 +3418,7 @@ data class ExternalOauthApplication( var tenant_id: String? = null, var dialect_name: String? = null, var bi_directional_data_access: Boolean? = null, - var created_at: Date? = null, + var created_at: Date? = null ) : Serializable /** @@ -3432,7 +3433,7 @@ data class ExternalOauthApplication( * @property category Field category. (read-only) * @property valueFormat Looker only. Value format of the field. (read-only) */ -data class Field( +data class Field ( var name: String? = null, var type: String? = null, var description: String? = null, @@ -3442,7 +3443,7 @@ data class Field( var displayName: String? = null, var subfields: Array? = null, var category: String? = null, - var valueFormat: String? = null, + var valueFormat: String? = null ) : Serializable /** @@ -3450,7 +3451,7 @@ data class Field( */ enum class FillStyle : Serializable { enumeration, - range, + range } /** @@ -3473,7 +3474,7 @@ enum class FillStyle : Serializable { * @property dashboards Dashboards (read-only) * @property looks Looks (read-only) */ -data class Folder( +data class Folder ( var name: String, var parent_id: String? = null, var id: String? = null, @@ -3489,9 +3490,9 @@ data class Folder( var is_personal_descendant: Boolean? = null, var is_shared_root: Boolean? = null, var is_users_root: Boolean? = null, - var can: Map? = null, + var can: Map? = null, var dashboards: Array? = null, - var looks: Array? = null, + var looks: Array? = null ) : Serializable /** @@ -3512,7 +3513,7 @@ data class Folder( * @property is_users_root Folder is the root user folder (read-only) * @property can Operations the current user is able to perform on this object (read-only) */ -data class FolderBase( +data class FolderBase ( var name: String, var parent_id: String? = null, var id: String? = null, @@ -3528,7 +3529,7 @@ data class FolderBase( var is_personal_descendant: Boolean? = null, var is_shared_root: Boolean? = null, var is_users_root: Boolean? = null, - var can: Map? = null, + var can: Map? = null ) : Serializable /** @@ -3536,7 +3537,7 @@ data class FolderBase( */ enum class Format : Serializable { topojson, - vector_tile_region, + vector_tile_region } /** @@ -3558,8 +3559,8 @@ enum class Format : Serializable { * @property ref The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. * @property remote_ref The resolved ref of this branch remote. (read-only) */ -data class GitBranch( - var can: Map? = null, +data class GitBranch ( + var can: Map? = null, var name: String? = null, var remote: String? = null, var remote_name: String? = null, @@ -3575,7 +3576,7 @@ data class GitBranch( var behind_count: Long? = null, var commit_at: Long? = null, var ref: String? = null, - var remote_ref: String? = null, + var remote_ref: String? = null ) : Serializable /** @@ -3583,10 +3584,10 @@ data class GitBranch( * @property description Human readable string describing the test (read-only) * @property id A short string, uniquely naming this test (read-only) */ -data class GitConnectionTest( - var can: Map? = null, +data class GitConnectionTest ( + var can: Map? = null, var description: String? = null, - var id: String? = null, + var id: String? = null ) : Serializable /** @@ -3595,11 +3596,11 @@ data class GitConnectionTest( * @property message Additional data from the test (read-only) * @property status Either 'pass' or 'fail' (read-only) */ -data class GitConnectionTestResult( - var can: Map? = null, +data class GitConnectionTestResult ( + var can: Map? = null, var id: String? = null, var message: String? = null, - var status: String? = null, + var status: String? = null ) : Serializable /** @@ -3608,11 +3609,11 @@ data class GitConnectionTestResult( * @property revertable When true, the file can be reverted to an earlier state (read-only) * @property text Git description of the action (read-only) */ -data class GitStatus( +data class GitStatus ( var action: String? = null, var conflict: Boolean? = null, var revertable: Boolean? = null, - var text: String? = null, + var text: String? = null ) : Serializable /** @@ -3636,8 +3637,8 @@ data class GitStatus( * @property pivots Pivots of the associated Looker Query (read-only) * @property dynamic_fields Dynamic fields of the associated Looker Query (read-only) */ -data class GoldenQuery( - var can: Map? = null, +data class GoldenQuery ( + var can: Map? = null, var id: Long? = null, var query_id: Long? = null, var questions: Array? = null, @@ -3650,12 +3651,12 @@ data class GoldenQuery( var explore: String? = null, var model: String? = null, var fields: Array? = null, - var filters: Map? = null, + var filters: Map? = null, var sorts: Array? = null, var limit: String? = null, var client_id: String? = null, var pivots: Array? = null, - var dynamic_fields: String? = null, + var dynamic_fields: String? = null ) : Serializable /** @@ -3669,8 +3670,8 @@ data class GoldenQuery( * @property name Name of group * @property user_count Number of users included in this group (read-only) */ -data class Group( - var can: Map? = null, +data class Group ( + var can: Map? = null, var can_add_to_content_metadata: Boolean? = null, var contains_current_user: Boolean? = null, var external_group_id: String? = null, @@ -3678,7 +3679,7 @@ data class Group( var id: String? = null, var include_by_default: Boolean? = null, var name: String? = null, - var user_count: Long? = null, + var user_count: Long? = null ) : Serializable /** @@ -3694,8 +3695,8 @@ data class Group( * @property parent_group_ids IDs of parents of this group (read-only) * @property role_ids Role IDs assigned to group (read-only) */ -data class GroupHierarchy( - var can: Map? = null, +data class GroupHierarchy ( + var can: Map? = null, var can_add_to_content_metadata: Boolean? = null, var contains_current_user: Boolean? = null, var external_group_id: String? = null, @@ -3705,7 +3706,7 @@ data class GroupHierarchy( var name: String? = null, var user_count: Long? = null, var parent_group_ids: Array? = null, - var role_ids: Array? = null, + var role_ids: Array? = null ) : Serializable /** @@ -3713,8 +3714,8 @@ data class GroupHierarchy( * * @property group_id Id of group (read-only) */ -data class GroupIdForGroupInclusion( - var group_id: String? = null, +data class GroupIdForGroupInclusion ( + var group_id: String? = null ) : Serializable /** @@ -3722,8 +3723,8 @@ data class GroupIdForGroupInclusion( * * @property user_id Id of user (read-only) */ -data class GroupIdForGroupUserInclusion( - var user_id: String? = null, +data class GroupIdForGroupUserInclusion ( + var user_id: String? = null ) : Serializable /** @@ -3738,8 +3739,8 @@ data class GroupIdForGroupUserInclusion( * @property user_count Number of users included in this group (read-only) * @property roles Roles assigned to group (read-only) */ -data class GroupSearch( - var can: Map? = null, +data class GroupSearch ( + var can: Map? = null, var can_add_to_content_metadata: Boolean? = null, var contains_current_user: Boolean? = null, var external_group_id: String? = null, @@ -3748,7 +3749,7 @@ data class GroupSearch( var include_by_default: Boolean? = null, var name: String? = null, var user_count: Long? = null, - var roles: Array? = null, + var roles: Array? = null ) : Serializable /** @@ -3781,8 +3782,8 @@ data class GroupSearch( * @property use_custom_url Whether the custom url should be used instead of the content url, if the item is associated with content * @property view_count Number of times content has been viewed, if present (read-only) */ -data class HomepageItem( - var can: Map? = null, +data class HomepageItem ( + var can: Map? = null, var content_created_by: String? = null, var content_favorite_id: String? = null, var content_metadata_id: String? = null, @@ -3809,7 +3810,7 @@ data class HomepageItem( var use_custom_image: Boolean? = null, var use_custom_title: Boolean? = null, var use_custom_url: Boolean? = null, - var view_count: Long? = null, + var view_count: Long? = null ) : Serializable /** @@ -3827,8 +3828,8 @@ data class HomepageItem( * @property description Description of the content found in this section. * @property visible_item_order ids of the homepage items the user can see in the order they should be displayed (read-only) */ -data class HomepageSection( - var can: Map? = null, +data class HomepageSection ( + var can: Map? = null, var created_at: Date? = null, var deleted_at: Date? = null, var detail_url: String? = null, @@ -3840,7 +3841,7 @@ data class HomepageSection( var title: String? = null, var updated_at: Date? = null, var description: String? = null, - var visible_item_order: Array? = null, + var visible_item_order: Array? = null ) : Serializable /** @@ -3853,15 +3854,15 @@ data class HomepageSection( * @property created_at Creation timestamp (read-only) * @property updated_at Update timestamp (read-only) */ -data class Image( - var can: Map? = null, +data class Image ( + var can: Map? = null, var id: String? = null, var file_name: String? = null, var format: String? = null, var label: String? = null, var url: String? = null, var created_at: Date? = null, - var updated_at: Date? = null, + var updated_at: Date? = null ) : Serializable /** @@ -3870,20 +3871,20 @@ data class Image( * @property ref Ref for a remote dependency (read-only) * @property is_remote Flag signifying if a dependency is remote or local (read-only) */ -data class ImportedProject( +data class ImportedProject ( var name: String? = null, var url: String? = null, var ref: String? = null, - var is_remote: Boolean? = null, + var is_remote: Boolean? = null ) : Serializable /** * @property feature_flags Feature flags enabled on the instance (read-only) * @property license_features License features enabled on the instance (read-only) */ -data class InstanceConfig( - var feature_flags: Map? = null, - var license_features: Map? = null, +data class InstanceConfig ( + var feature_flags: Map? = null, + var license_features: Map? = null ) : Serializable /** @@ -3906,8 +3907,8 @@ data class InstanceConfig( * @property delegate_oauth Whether the integration uses delegate oauth, which allows federation between an integration installation scope specific entity (like org, group, and team, etc.) and Looker. (read-only) * @property installed_delegate_oauth_targets Whether the integration is available to users. */ -data class Integration( - var can: Map? = null, +data class Integration ( + var can: Map? = null, var id: String? = null, var integration_hub_id: String? = null, var label: String? = null, @@ -3924,7 +3925,7 @@ data class Integration( var required_fields: Array? = null, var privacy_link: String? = null, var delegate_oauth: Boolean? = null, - var installed_delegate_oauth_targets: Array? = null, + var installed_delegate_oauth_targets: Array? = null ) : Serializable /** @@ -3940,8 +3941,8 @@ data class Integration( * @property legal_agreement_required Whether the legal terms for the integration hub are required before use. (read-only) * @property legal_agreement_text The legal agreement text for this integration hub. (read-only) */ -data class IntegrationHub( - var can: Map? = null, +data class IntegrationHub ( + var can: Map? = null, var id: String? = null, var url: String? = null, var label: String? = null, @@ -3951,16 +3952,16 @@ data class IntegrationHub( var has_authorization_token: Boolean? = null, var legal_agreement_signed: Boolean? = null, var legal_agreement_required: Boolean? = null, - var legal_agreement_text: String? = null, + var legal_agreement_text: String? = null ) : Serializable /** * @property success Whether or not the health check was successful (read-only) * @property message A message representing the results of the health check. (read-only) */ -data class IntegrationHubHealthResult( +data class IntegrationHubHealthResult ( var success: Boolean? = null, - var message: String? = null, + var message: String? = null ) : Serializable /** @@ -3975,7 +3976,7 @@ data class IntegrationHubHealthResult( * @property per_user When true, this parameter must be assigned to a user attribute in the admin panel (instead of a constant value), and that value may be updated by the user as part of the integration flow. (read-only) * @property delegate_oauth_url When present, the param represents the oauth url the user will be taken to. (read-only) */ -data class IntegrationParam( +data class IntegrationParam ( var name: String? = null, var label: String? = null, var description: String? = null, @@ -3985,7 +3986,7 @@ data class IntegrationParam( var user_attribute_name: String? = null, var sensitive: Boolean? = null, var per_user: Boolean? = null, - var delegate_oauth_url: String? = null, + var delegate_oauth_url: String? = null ) : Serializable /** @@ -3993,10 +3994,10 @@ data class IntegrationParam( * @property any_tag If present, supersedes 'tag' and matches a field that has any of the provided tags. (read-only) * @property all_tags If present, supersedes 'tag' and matches a field that has all of the provided tags. (read-only) */ -data class IntegrationRequiredField( +data class IntegrationRequiredField ( var tag: String? = null, var any_tag: Array? = null, - var all_tags: Array? = null, + var all_tags: Array? = null ) : Serializable /** @@ -4004,19 +4005,19 @@ data class IntegrationRequiredField( * @property message A message representing the results of the test. (read-only) * @property delegate_oauth_result An array of connection test result for delegate oauth actions. (read-only) */ -data class IntegrationTestResult( +data class IntegrationTestResult ( var success: Boolean? = null, var message: String? = null, - var delegate_oauth_result: Array? = null, + var delegate_oauth_result: Array? = null ) : Serializable /** * @property can Operations the current user is able to perform on this object (read-only) * @property enabled If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker */ -data class InternalHelpResources( - var can: Map? = null, - var enabled: Boolean? = null, +data class InternalHelpResources ( + var can: Map? = null, + var enabled: Boolean? = null ) : Serializable /** @@ -4024,35 +4025,35 @@ data class InternalHelpResources( * @property organization_name Text to display in the help menu item which will display the internal help resources * @property markdown_content Content to be displayed in the internal help resources page/modal */ -data class InternalHelpResourcesContent( - var can: Map? = null, +data class InternalHelpResourcesContent ( + var can: Map? = null, var organization_name: String? = null, - var markdown_content: String? = null, + var markdown_content: String? = null ) : Serializable /** * The type of the investigative content Valid values are: "dashboard". (Enum defined in Alert) */ enum class InvestigativeContentType : Serializable { - dashboard, + dashboard } /** * @property metadata * @property rows Json query results (read-only) */ -data class JsonBi( +data class JsonBi ( var metadata: JsonBiMetadata, - var rows: Array, + var rows: Array ) : Serializable /** * @property total_bytes_processed Total bytes processed by the BigQuery job (read-only) * @property backend_cache_hit Return whether or not query results were served from the BigQuery cache. (read-only) */ -data class JsonBiBigQueryMetadata( +data class JsonBiBigQueryMetadata ( var total_bytes_processed: Long, - var backend_cache_hit: Boolean, + var backend_cache_hit: Boolean ) : Serializable /** @@ -4069,7 +4070,7 @@ data class JsonBiBigQueryMetadata( * @property hidden If the field is marked as hidden in the Lookml (read-only) * @property description Field Description (read-only) */ -data class JsonBiField( +data class JsonBiField ( var sql: String, var view: String, var dimension_group: String, @@ -4081,7 +4082,7 @@ data class JsonBiField( var label: String, var field_group_variant: String, var hidden: Boolean, - var description: String, + var description: String ) : Serializable /** @@ -4090,11 +4091,11 @@ data class JsonBiField( * @property pivots Pivots (read-only) * @property table_calculations Table Calculations (read-only) */ -data class JsonBiFields( +data class JsonBiFields ( var dimensions: Array, var measures: Array, var pivots: Array, - var table_calculations: Array, + var table_calculations: Array ) : Serializable /** @@ -4108,7 +4109,7 @@ data class JsonBiFields( * @property filters Filters applied to the query results (read-only) * @property sql Raw sql query. Null if user does not have permission to view sql (read-only) */ -data class JsonBiMetadata( +data class JsonBiMetadata ( var big_query_metadata: JsonBiBigQueryMetadata, var fields: JsonBiFields, var pivots: Array, @@ -4116,8 +4117,8 @@ data class JsonBiMetadata( var has_totals: Boolean, var columns_truncated: String, var filter_expression: String, - var filters: Map, - var sql: String, + var filters: Map, + var sql: String ) : Serializable /** @@ -4126,11 +4127,11 @@ data class JsonBiMetadata( * @property sort_values Pivot Sort Values (read-only) * @property is_total If the value is a total (read-only) */ -data class JsonBiPivots( +data class JsonBiPivots ( var key: String, - var data: Map, - var sort_values: Map, - var is_total: Boolean, + var data: Map, + var sort_values: Map, + var is_total: Boolean ) : Serializable /** @@ -4141,13 +4142,13 @@ data class JsonBiPivots( * @property value_format Value format (read-only) * @property measure If table calculation is a measure (read-only) */ -data class JsonBiTableCalc( +data class JsonBiTableCalc ( var name: String, var label: String, var align: String, var expression: String, var value_format: String, - var measure: Boolean, + var measure: Boolean ) : Serializable /** @@ -4155,10 +4156,10 @@ data class JsonBiTableCalc( * @property model_name * @property explore_name */ -data class KdaDataSource( +data class KdaDataSource ( var query_id: String? = null, var model_name: String? = null, - var explore_name: String? = null, + var explore_name: String? = null ) : Serializable /** @@ -4169,13 +4170,13 @@ data class KdaDataSource( * @property baseline_filters Defines the EXPECTED, PAST, or NORMAL group (State A). For time KDA, put the past date filter here (e.g., {'orders.created_date': 'last week'}). For cohort KDA, put the baseline segment here (e.g., {'users.status': 'Active'}). * @property breach_filters Defines the ANOMALOUS, CURRENT, or COMPARISON group (State B). For time KDA, put the current date here. For 'Rest of Population' cohort comparisons, use a minus sign to negate the baseline (e.g., {'users.status': '-Active'}). */ -data class KdaRequestPayload( +data class KdaRequestPayload ( var data_source: KdaDataSource, var contribution_metric: String, var dimensions: Array, - var base_filters: Map? = null, - var baseline_filters: Map? = null, - var breach_filters: Map? = null, + var base_filters: Map? = null, + var baseline_filters: Map? = null, + var breach_filters: Map? = null ) : Serializable /** @@ -4183,10 +4184,10 @@ data class KdaRequestPayload( * @property dimensions Dimensions that were analyzed (read-only) * @property drivers List of identified key drivers (read-only) */ -data class KdaResponsePayload( +data class KdaResponsePayload ( var status: String, var dimensions: Array, - var drivers: Array, + var drivers: Array ) : Serializable /** @@ -4195,7 +4196,7 @@ data class KdaResponsePayload( enum class Kind : Serializable { previous, difference, - relative_change, + relative_change } /** @@ -4243,8 +4244,8 @@ enum class Kind : Serializable { * @property allow_direct_roles Allows roles to be directly assigned to LDAP auth'd users. * @property url Link to get this item (read-only) */ -data class LDAPConfig( - var can: Map? = null, +data class LDAPConfig ( + var can: Map? = null, var alternate_email_login_allowed: Boolean? = null, var auth_password: String? = null, var auth_requires_role: Boolean? = null, @@ -4286,16 +4287,16 @@ data class LDAPConfig( var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, var allow_direct_roles: Boolean? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** * @property severity Severity of the issue. Error or Warning (read-only) * @property message Message describing the issue (read-only) */ -data class LDAPConfigTestIssue( +data class LDAPConfigTestIssue ( var severity: String? = null, - var message: String? = null, + var message: String? = null ) : Serializable /** @@ -4307,14 +4308,14 @@ data class LDAPConfigTestIssue( * @property user * @property url Link to ldap config (read-only) */ -data class LDAPConfigTestResult( +data class LDAPConfigTestResult ( var details: String? = null, var issues: Array? = null, var message: String? = null, var status: String? = null, var trace: String? = null, var user: LDAPUser? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -4325,13 +4326,13 @@ data class LDAPConfigTestResult( * @property roles Looker Roles (read-only) * @property url Link to ldap config (read-only) */ -data class LDAPGroupRead( +data class LDAPGroupRead ( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, var roles: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -4342,13 +4343,13 @@ data class LDAPGroupRead( * @property role_ids Looker Role Ids * @property url Link to ldap config (read-only) */ -data class LDAPGroupWrite( +data class LDAPGroupWrite ( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, var role_ids: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -4363,9 +4364,9 @@ data class LDAPGroupWrite( * @property roles Array of user's roles (role names only) (read-only) * @property url Link to ldap config (read-only) */ -data class LDAPUser( +data class LDAPUser ( var all_emails: Array? = null, - var attributes: Map? = null, + var attributes: Map? = null, var email: String? = null, var first_name: String? = null, var groups: Array? = null, @@ -4373,7 +4374,7 @@ data class LDAPUser( var ldap_dn: String? = null, var ldap_id: String? = null, var roles: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -4382,11 +4383,11 @@ data class LDAPUser( * @property user_attributes Looker User Attributes (read-only) * @property url Link to ldap config (read-only) */ -data class LDAPUserAttributeRead( +data class LDAPUserAttributeRead ( var name: String? = null, var required: Boolean? = null, var user_attributes: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -4395,11 +4396,11 @@ data class LDAPUserAttributeRead( * @property user_attribute_ids Looker User Attribute Ids * @property url Link to ldap config (read-only) */ -data class LDAPUserAttributeWrite( +data class LDAPUserAttributeWrite ( var name: String? = null, var required: Boolean? = null, var user_attribute_ids: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -4417,8 +4418,8 @@ data class LDAPUserAttributeWrite( * @property approximate_end_of_life_date Approximate date that this feature will be removed. (read-only) * @property has_disabled_on_upgrade Whether this legacy feature may have been automatically disabled when upgrading to the current version. (read-only) */ -data class LegacyFeature( - var can: Map? = null, +data class LegacyFeature ( + var can: Map? = null, var id: String? = null, var name: String? = null, var description: String? = null, @@ -4430,7 +4431,7 @@ data class LegacyFeature( var documentation_url: String? = null, var approximate_disable_date: Date? = null, var approximate_end_of_life_date: Date? = null, - var has_disabled_on_upgrade: Boolean? = null, + var has_disabled_on_upgrade: Boolean? = null ) : Serializable /** @@ -4438,19 +4439,19 @@ data class LegacyFeature( * @property native_name Name of Locale in its own language (read-only) * @property english_name Name of Locale in English (read-only) */ -data class Locale( +data class Locale ( var code: String? = null, var native_name: String? = null, - var english_name: String? = null, + var english_name: String? = null ) : Serializable /** * @property default_locale Default locale for localization (read-only) * @property localization_level Localization level - strict or permissive (read-only) */ -data class LocalizationSettings( +data class LocalizationSettings ( var default_locale: String? = null, - var localization_level: String? = null, + var localization_level: String? = null ) : Serializable /** @@ -4489,8 +4490,8 @@ data class LocalizationSettings( * @property usage_count Number of queries executed on this look in the last N days (read-only) * @property is_owner_disabled Is the owner disabled (read-only) */ -data class Look( - var can: Map? = null, +data class Look ( + var can: Map? = null, var content_metadata_id: String? = null, var id: String? = null, var title: String? = null, @@ -4523,7 +4524,7 @@ data class Look( var user_name: String? = null, var view_count: Long? = null, var usage_count: Long? = null, - var is_owner_disabled: Boolean? = null, + var is_owner_disabled: Boolean? = null ) : Serializable /** @@ -4534,13 +4535,13 @@ data class Look( * @property user_id User Id * @property certification_metadata */ -data class LookBasic( - var can: Map? = null, +data class LookBasic ( + var can: Map? = null, var content_metadata_id: String? = null, var id: String? = null, var title: String? = null, var user_id: String? = null, - var certification_metadata: Certification? = null, + var certification_metadata: Certification? = null ) : Serializable /** @@ -4550,12 +4551,12 @@ data class LookBasic( * @property explore Name of the LookML Explore. (read-only) * @property schema */ -data class LookerExploreReference( +data class LookerExploreReference ( var lookerInstanceUri: String? = null, var privateLookerInstanceInfo: PrivateLookerInstanceInfo? = null, var lookmlModel: String? = null, var explore: String? = null, - var schema: DataSourceSchema? = null, + var schema: DataSourceSchema? = null ) : Serializable /** @@ -4563,10 +4564,10 @@ data class LookerExploreReference( * @property url URL the link will go to. (read-only) * @property icon_url A URL containing an image file to display with a link. (read-only) */ -data class LookmlFieldLink( +data class LookmlFieldLink ( var label: String? = null, var url: String? = null, - var icon_url: String? = null, + var icon_url: String? = null ) : Serializable /** @@ -4579,15 +4580,15 @@ data class LookmlFieldLink( * @property project_name Name of project containing the model * @property unlimited_db_connections Is this model allowed to use all current and future connections */ -data class LookmlModel( - var can: Map? = null, +data class LookmlModel ( + var can: Map? = null, var allowed_db_connection_names: Array? = null, var explores: Array? = null, var has_content: Boolean? = null, var label: String? = null, var name: String? = null, var project_name: String? = null, - var unlimited_db_connections: Boolean? = null, + var unlimited_db_connections: Boolean? = null ) : Serializable /** @@ -4633,7 +4634,7 @@ data class LookmlModel( * @property supported_measure_types An array of items describing which custom measure types are supported for creating a custom measure 'based_on' each possible dimension type. (read-only) * @property always_join An array of joins that will always be included in the SQL for this explore, even if the user has not selected a field from the joined view. (read-only) */ -data class LookmlModelExplore( +data class LookmlModelExplore ( var id: String? = null, var name: String? = null, var description: String? = null, @@ -4674,43 +4675,43 @@ data class LookmlModelExplore( var joins: Array? = null, var group_label: String? = null, var supported_measure_types: Array? = null, - var always_join: Array? = null, + var always_join: Array? = null ) : Serializable /** * @property field Field to be filtered (read-only) * @property user_attribute User attribute name (read-only) */ -data class LookmlModelExploreAccessFilter( +data class LookmlModelExploreAccessFilter ( var field: String? = null, - var user_attribute: String? = null, + var user_attribute: String? = null ) : Serializable /** * @property name Name (read-only) * @property value Value (read-only) */ -data class LookmlModelExploreAlias( +data class LookmlModelExploreAlias ( var name: String? = null, - var value: String? = null, + var value: String? = null ) : Serializable /** * @property name Name (read-only) * @property value Value (read-only) */ -data class LookmlModelExploreAlwaysFilter( +data class LookmlModelExploreAlwaysFilter ( var name: String? = null, - var value: String? = null, + var value: String? = null ) : Serializable /** * @property name Name (read-only) * @property value Value (read-only) */ -data class LookmlModelExploreConditionallyFilter( +data class LookmlModelExploreConditionallyFilter ( var name: String? = null, - var value: String? = null, + var value: String? = null ) : Serializable /** @@ -4719,11 +4720,11 @@ data class LookmlModelExploreConditionallyFilter( * @property error_pos Error source location (read-only) * @property field_error Is this a field error (read-only) */ -data class LookmlModelExploreError( +data class LookmlModelExploreError ( var message: String? = null, var details: Any? = null, var error_pos: String? = null, - var field_error: Boolean? = null, + var field_error: Boolean? = null ) : Serializable /** @@ -4792,10 +4793,10 @@ data class LookmlModelExploreError( * @property datatype The data_type for a date in lookml (read-only) * @property convert_tz Whether time zones should be converted for datetime fields (read-only) */ -data class LookmlModelExploreField( +data class LookmlModelExploreField ( var align: Align? = null, var available_custom_timeframes: Array? = null, - var timeframe_labels: Map? = null, + var timeframe_labels: Map? = null, var can_filter: Boolean? = null, var category: Category? = null, var default_filter_value: String? = null, @@ -4856,16 +4857,16 @@ data class LookmlModelExploreField( var times_used: Long? = null, var original_view: String? = null, var datatype: String? = null, - var convert_tz: Boolean? = null, + var convert_tz: Boolean? = null ) : Serializable /** * @property label Label (read-only) * @property value Value (read-only) */ -data class LookmlModelExploreFieldEnumeration( +data class LookmlModelExploreFieldEnumeration ( var label: String? = null, - var value: Any? = null, + var value: Any? = null ) : Serializable /** @@ -4880,7 +4881,7 @@ data class LookmlModelExploreFieldEnumeration( * @property max_zoom_level The minimum zoom level that the map layer may be displayed at, for visualizations that support zooming. (read-only) * @property min_zoom_level The maximum zoom level that the map layer may be displayed at, for visualizations that support zooming. (read-only) */ -data class LookmlModelExploreFieldMapLayer( +data class LookmlModelExploreFieldMapLayer ( var url: String? = null, var name: String? = null, var feature_key: String? = null, @@ -4890,16 +4891,16 @@ data class LookmlModelExploreFieldMapLayer( var format: Format? = null, var extents_json_url: String? = null, var max_zoom_level: Long? = null, - var min_zoom_level: Long? = null, + var min_zoom_level: Long? = null ) : Serializable /** * @property field Filter field name (read-only) * @property condition Filter condition value (read-only) */ -data class LookmlModelExploreFieldMeasureFilters( +data class LookmlModelExploreFieldMeasureFilters ( var field: String? = null, - var condition: String? = null, + var condition: String? = null ) : Serializable /** @@ -4909,12 +4910,12 @@ data class LookmlModelExploreFieldMeasureFilters( * @property kind The type of calculation for the period_over_period measure. Valid values are: "previous", "difference", "relative_change". (read-only) * @property value_to_date specifies whether to compare the current partially completed period to an equivalent part of the previous period, or to use the entire previous period. (read-only) */ -data class LookmlModelExploreFieldPeriodOverPeriodParams( +data class LookmlModelExploreFieldPeriodOverPeriodParams ( var based_on: String? = null, var based_on_time: String? = null, var period: Period? = null, var kind: Kind? = null, - var value_to_date: Boolean? = null, + var value_to_date: Boolean? = null ) : Serializable /** @@ -4923,29 +4924,29 @@ data class LookmlModelExploreFieldPeriodOverPeriodParams( * @property filters Array of filters (read-only) * @property parameters Array of parameters (read-only) */ -data class LookmlModelExploreFieldset( +data class LookmlModelExploreFieldset ( var dimensions: Array? = null, var measures: Array? = null, var filters: Array? = null, - var parameters: Array? = null, + var parameters: Array? = null ) : Serializable /** * @property value SQL Case label value (read-only) * @property condition SQL Case condition expression (read-only) */ -data class LookmlModelExploreFieldSqlCase( +data class LookmlModelExploreFieldSqlCase ( var value: String? = null, - var condition: String? = null, + var condition: String? = null ) : Serializable /** * @property name The type of time interval this field represents a grouping of. Valid values are: "day", "hour", "minute", "second", "millisecond", "microsecond", "week", "month", "quarter", "year". (read-only) * @property count The number of intervals this field represents a grouping of. (read-only) */ -data class LookmlModelExploreFieldTimeInterval( +data class LookmlModelExploreFieldTimeInterval ( var name: Name? = null, - var count: Long? = null, + var count: Long? = null ) : Serializable /** @@ -4963,7 +4964,7 @@ data class LookmlModelExploreFieldTimeInterval( * @property type The join type: left_outer, full_outer, inner, or cross (read-only) * @property view_label Label to display in UI selectors (read-only) */ -data class LookmlModelExploreJoins( +data class LookmlModelExploreJoins ( var name: String? = null, var dependent_fields: Array? = null, var fields: Array? = null, @@ -4976,25 +4977,25 @@ data class LookmlModelExploreJoins( var sql_on: String? = null, var sql_table_name: String? = null, var type: String? = null, - var view_label: String? = null, + var view_label: String? = null ) : Serializable /** * @property name Name (read-only) * @property value Value set (read-only) */ -data class LookmlModelExploreSet( +data class LookmlModelExploreSet ( var name: String? = null, - var value: Array? = null, + var value: Array? = null ) : Serializable /** * @property dimension_type (read-only) * @property measure_types (read-only) */ -data class LookmlModelExploreSupportedMeasureType( +data class LookmlModelExploreSupportedMeasureType ( var dimension_type: String? = null, - var measure_types: Array? = null, + var measure_types: Array? = null ) : Serializable /** @@ -5004,12 +5005,12 @@ data class LookmlModelExploreSupportedMeasureType( * @property hidden Is this explore marked as hidden (read-only) * @property group_label Label used to group explores in the navigation menus (read-only) */ -data class LookmlModelNavExplore( +data class LookmlModelNavExplore ( var name: String? = null, var description: String? = null, var label: String? = null, var hidden: Boolean? = null, - var group_label: String? = null, + var group_label: String? = null ) : Serializable /** @@ -5021,14 +5022,14 @@ data class LookmlModelNavExplore( * @property file Name of the LookML file containing this test. (read-only) * @property line Line number of this test in LookML. (read-only) */ -data class LookmlTest( - var can: Map? = null, +data class LookmlTest ( + var can: Map? = null, var model_name: String? = null, var name: String? = null, var explore_name: String? = null, var query_url_params: String? = null, var file: String? = null, - var line: Long? = null, + var line: Long? = null ) : Serializable /** @@ -5041,24 +5042,24 @@ data class LookmlTest( * @property warnings A list of any warnings encountered by the test. (read-only) * @property success True if this test passsed without errors. (read-only) */ -data class LookmlTestResult( - var can: Map? = null, +data class LookmlTestResult ( + var can: Map? = null, var model_name: String? = null, var test_name: String? = null, var assertions_count: Long? = null, var assertions_failed: Long? = null, var errors: Array? = null, var warnings: Array? = null, - var success: Boolean? = null, + var success: Boolean? = null ) : Serializable /** * @property id Model Id (read-only) * @property label Model Label (read-only) */ -data class LookModel( +data class LookModel ( var id: String? = null, - var label: String? = null, + var label: String? = null ) : Serializable /** @@ -5098,8 +5099,8 @@ data class LookModel( * @property is_owner_disabled Is the owner disabled (read-only) * @property dashboards Dashboards (read-only) */ -data class LookWithDashboards( - var can: Map? = null, +data class LookWithDashboards ( + var can: Map? = null, var content_metadata_id: String? = null, var id: String? = null, var title: String? = null, @@ -5133,7 +5134,7 @@ data class LookWithDashboards( var view_count: Long? = null, var usage_count: Long? = null, var is_owner_disabled: Boolean? = null, - var dashboards: Array? = null, + var dashboards: Array? = null ) : Serializable /** @@ -5174,8 +5175,8 @@ data class LookWithDashboards( * @property query * @property url Url (read-only) */ -data class LookWithQuery( - var can: Map? = null, +data class LookWithQuery ( + var can: Map? = null, var content_metadata_id: String? = null, var id: String? = null, var title: String? = null, @@ -5210,7 +5211,7 @@ data class LookWithQuery( var usage_count: Long? = null, var is_owner_disabled: Boolean? = null, var query: Query? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -5219,11 +5220,11 @@ data class LookWithQuery( * @property imports Imports for a project (read-only) * @property localization_settings */ -data class Manifest( - var can: Map? = null, +data class Manifest ( + var can: Map? = null, var name: String? = null, var imports: Array? = null, - var localization_settings: LocalizationSettings? = null, + var localization_settings: LocalizationSettings? = null ) : Serializable /** @@ -5231,19 +5232,19 @@ data class Manifest( * @property update_looker_enabled Whether marketplace auto update is enabled for looker extensions * @property update_third_party_enabled Whether marketplace auto update is enabled for third party extensions */ -data class MarketplaceAutomation( +data class MarketplaceAutomation ( var install_enabled: Boolean? = null, var update_looker_enabled: Boolean? = null, - var update_third_party_enabled: Boolean? = null, + var update_third_party_enabled: Boolean? = null ) : Serializable /** * @property materialization_id The ID of the enqueued materialization task (read-only) * @property resp_text Detailed response in text format (read-only) */ -data class MaterializePDT( +data class MaterializePDT ( var materialization_id: String? = null, - var resp_text: String? = null, + var resp_text: String? = null ) : Serializable /** @@ -5292,7 +5293,7 @@ data class MaterializePDT( * @property render_visualization * @property render_dashboard */ -data class McpTools( +data class McpTools ( var enable_all: Boolean? = null, var add_dashboard_element: McpToolSetting? = null, var add_dashboard_filter: McpToolSetting? = null, @@ -5336,7 +5337,7 @@ data class McpTools( var run_lookml_tests: McpToolSetting? = null, var create_view_from_table: McpToolSetting? = null, var render_visualization: McpToolSetting? = null, - var render_dashboard: McpToolSetting? = null, + var render_dashboard: McpToolSetting? = null ) : Serializable /** @@ -5345,20 +5346,20 @@ data class McpTools( * @property category Tool category (read-only) * @property access_level Tool access level (read-only) */ -data class McpToolSetting( +data class McpToolSetting ( var enabled: Boolean? = null, var description: String? = null, var category: String? = null, - var access_level: String? = null, + var access_level: String? = null ) : Serializable /** * @property field_name Field name to map onto in the merged results * @property source_field_name Field name from the source query */ -data class MergeFields( +data class MergeFields ( var field_name: String? = null, - var source_field_name: String? = null, + var source_field_name: String? = null ) : Serializable /** @@ -5374,8 +5375,8 @@ data class MergeFields( * @property limit Limit * @property vis_config Visualization Config */ -data class MergeQuery( - var can: Map? = null, +data class MergeQuery ( + var can: Map? = null, var column_limit: String? = null, var dynamic_fields: String? = null, var id: String? = null, @@ -5385,7 +5386,7 @@ data class MergeQuery( var source_queries: Array? = null, var total: Boolean? = null, var limit: String? = null, - var vis_config: Map? = null, + var vis_config: Map? = null ) : Serializable /** @@ -5394,20 +5395,20 @@ data class MergeQuery( * @property query_id Id of the query to merge * @property query_slug Slug of the query to merge */ -data class MergeQuerySourceQuery( +data class MergeQuerySourceQuery ( var merge_fields: Array? = null, var name: String? = null, var query_id: String? = null, - var query_slug: String? = null, + var query_slug: String? = null ) : Serializable /** * @property feature_flag_name Specifies the name of feature flag. (read-only) * @property feature_flag_state Specifies the state of feature flag (read-only) */ -data class MobileFeatureFlags( +data class MobileFeatureFlags ( var feature_flag_name: String? = null, - var feature_flag_state: Boolean? = null, + var feature_flag_state: Boolean? = null ) : Serializable /** @@ -5419,14 +5420,14 @@ data class MobileFeatureFlags( * @property query_slug Slug of the query which runs the alert queries. (read-only) * @property query_id ID of the query (read-only) */ -data class MobilePayload( +data class MobilePayload ( var title: String? = null, var alert_id: String, var investigative_content_id: String? = null, var dashboard_name: String? = null, var dashboard_id: String? = null, var query_slug: String? = null, - var query_id: String? = null, + var query_id: String? = null ) : Serializable /** @@ -5434,10 +5435,10 @@ data class MobilePayload( * @property mobile_app_integration Specifies whether mobile access for this instance is enabled. (read-only) * @property mobile_feature_flags Specifies feature flag and state relevant to mobile. (read-only) */ -data class MobileSettings( +data class MobileSettings ( var mobile_force_authentication: Boolean? = null, var mobile_app_integration: Boolean? = null, - var mobile_feature_flags: Array? = null, + var mobile_feature_flags: Array? = null ) : Serializable /** @@ -5445,10 +5446,10 @@ data class MobileSettings( * @property device_token Specifies the device token * @property device_type Specifies type of device. Valid values are: "android", "ios". */ -data class MobileToken( +data class MobileToken ( var id: String? = null, var device_token: String, - var device_type: DeviceType, + var device_type: DeviceType ) : Serializable /** @@ -5456,10 +5457,10 @@ data class MobileToken( * @property name (read-only) * @property value_formats Array of named value formats (read-only) */ -data class Model( +data class Model ( var connection: String? = null, var name: String? = null, - var value_formats: Array? = null, + var value_formats: Array? = null ) : Serializable /** @@ -5469,12 +5470,12 @@ data class Model( * @property hit_limit True if this was a hit limit (read-only) * @property used_calcite_materialization True if calcite was used (read-only) */ -data class ModelFieldSuggestions( +data class ModelFieldSuggestions ( var suggestions: Array? = null, var error: String? = null, var from_cache: Boolean? = null, var hit_limit: Boolean? = null, - var used_calcite_materialization: Boolean? = null, + var used_calcite_materialization: Boolean? = null ) : Serializable /** @@ -5483,11 +5484,11 @@ data class ModelFieldSuggestions( * @property name (read-only) * @property strict_value_format (read-only) */ -data class ModelNamedValueFormats( +data class ModelNamedValueFormats ( var format_string: String? = null, var label: String? = null, var name: String? = null, - var strict_value_format: Boolean? = null, + var strict_value_format: Boolean? = null ) : Serializable /** @@ -5499,23 +5500,23 @@ data class ModelNamedValueFormats( * @property name Name of ModelSet * @property url Link to get this item (read-only) */ -data class ModelSet( - var can: Map? = null, +data class ModelSet ( + var can: Map? = null, var all_access: Boolean? = null, var built_in: Boolean? = null, var id: String? = null, var models: Array? = null, var name: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** * @property name Model name (read-only) * @property project_file_id Project file (read-only) */ -data class ModelsNotValidated( +data class ModelsNotValidated ( var name: String? = null, - var project_file_id: String? = null, + var project_file_id: String? = null ) : Serializable /** @@ -5531,7 +5532,7 @@ enum class Name : Serializable { week, month, quarter, - year, + year } /** @@ -5546,8 +5547,8 @@ enum class Name : Serializable { * @property tokens_invalid_before All auth codes, access tokens, and refresh tokens issued for this application prior to this date-time for ALL USERS will be invalid. (read-only) * @property activated_users All users who have been activated to use this app (read-only) */ -data class OauthClientApp( - var can: Map? = null, +data class OauthClientApp ( + var can: Map? = null, var client_guid: String? = null, var redirect_uri: String? = null, var redirect_uris: Array? = null, @@ -5556,7 +5557,7 @@ data class OauthClientApp( var enabled: Boolean? = null, var group_id: String? = null, var tokens_invalid_before: Date? = null, - var activated_users: Array? = null, + var activated_users: Array? = null ) : Serializable /** @@ -5594,8 +5595,8 @@ data class OauthClientApp( * @property allow_direct_roles Allows roles to be directly assigned to OIDC auth'd users. * @property url Link to get this item (read-only) */ -data class OIDCConfig( - var can: Map? = null, +data class OIDCConfig ( + var can: Map? = null, var alternate_email_login_allowed: Boolean? = null, var audience: String? = null, var auth_requires_role: Boolean? = null, @@ -5627,7 +5628,7 @@ data class OIDCConfig( var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, var allow_direct_roles: Boolean? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -5637,12 +5638,12 @@ data class OIDCConfig( * @property name Name of group in OIDC (read-only) * @property roles Looker Roles (read-only) */ -data class OIDCGroupRead( +data class OIDCGroupRead ( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, - var roles: Array? = null, + var roles: Array? = null ) : Serializable /** @@ -5652,12 +5653,12 @@ data class OIDCGroupRead( * @property name Name of group in OIDC * @property role_ids Looker Role Ids */ -data class OIDCGroupWrite( +data class OIDCGroupWrite ( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, - var role_ids: Array? = null, + var role_ids: Array? = null ) : Serializable /** @@ -5665,10 +5666,10 @@ data class OIDCGroupWrite( * @property required Required to be in OIDC assertion for login to be allowed to succeed (read-only) * @property user_attributes Looker User Attributes (read-only) */ -data class OIDCUserAttributeRead( +data class OIDCUserAttributeRead ( var name: String? = null, var required: Boolean? = null, - var user_attributes: Array? = null, + var user_attributes: Array? = null ) : Serializable /** @@ -5676,10 +5677,10 @@ data class OIDCUserAttributeRead( * @property required Required to be in OIDC assertion for login to be allowed to succeed * @property user_attribute_ids Looker User Attribute Ids */ -data class OIDCUserAttributeWrite( +data class OIDCUserAttributeWrite ( var name: String? = null, var required: Boolean? = null, - var user_attribute_ids: Array? = null, + var user_attribute_ids: Array? = null ) : Serializable /** @@ -5692,15 +5693,15 @@ data class OIDCUserAttributeWrite( * @property expiration_duration_days Number of days before passwords expire. Must be between 30 and 365. * @property policy_enabled_at The timestamp of when the password expiration policy was last enabled. (read-only) */ -data class PasswordConfig( - var can: Map? = null, +data class PasswordConfig ( + var can: Map? = null, var min_length: Long? = null, var require_numeric: Boolean? = null, var require_upperlower: Boolean? = null, var require_special: Boolean? = null, var expiration_enabled: Boolean? = null, var expiration_duration_days: Long? = null, - var policy_enabled_at: Date? = null, + var policy_enabled_at: Date? = null ) : Serializable /** @@ -5713,7 +5714,7 @@ enum class Period : Serializable { fiscal_quarter, month, week, - date, + date } /** @@ -5722,11 +5723,11 @@ enum class Period : Serializable { * @property parent Dependency parent symbol (read-only) * @property description Description (read-only) */ -data class Permission( - var can: Map? = null, +data class Permission ( + var can: Map? = null, var permission: String? = null, var parent: String? = null, - var description: String? = null, + var description: String? = null ) : Serializable /** @@ -5738,14 +5739,14 @@ data class Permission( * @property permissions * @property url Link to get this item (read-only) */ -data class PermissionSet( - var can: Map? = null, +data class PermissionSet ( + var can: Map? = null, var all_access: Boolean? = null, var built_in: Boolean? = null, var id: String? = null, var name: String? = null, var permissions: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -5753,7 +5754,7 @@ data class PermissionSet( */ enum class PermissionType : Serializable { view, - edit, + edit } /** @@ -5773,7 +5774,7 @@ enum class PermissionType : Serializable { * @property alerts_links Remove Looker links from Alerts * @property folders_mentions Remove Looker mentions in home folder page when you don’t have any items saved */ -data class PrivatelabelConfiguration( +data class PrivatelabelConfiguration ( var logo_file: String? = null, var logo_url: String? = null, var favicon_file: String? = null, @@ -5788,16 +5789,16 @@ data class PrivatelabelConfiguration( var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, - var folders_mentions: Boolean? = null, + var folders_mentions: Boolean? = null ) : Serializable /** * @property lookerInstanceId The Looker instance id. (read-only) * @property serviceDirectoryName The service directory name of the Looker instance. (read-only) */ -data class PrivateLookerInstanceInfo( +data class PrivateLookerInstanceInfo ( var lookerInstanceId: String? = null, - var serviceDirectoryName: String? = null, + var serviceDirectoryName: String? = null ) : Serializable /** @@ -5826,8 +5827,8 @@ data class PrivateLookerInstanceInfo( * @property has_production_counterpart If true the project has been pushed to production. (read-only) * @property dependency_status Status of dependencies in your manifest & lockfile */ -data class Project( - var can: Map? = null, +data class Project ( + var can: Map? = null, var id: String? = null, var name: String? = null, var uses_git: Boolean? = null, @@ -5850,7 +5851,7 @@ data class Project( var allow_warnings: Boolean? = null, var is_example: Boolean? = null, var has_production_counterpart: Boolean? = null, - var dependency_status: String? = null, + var dependency_status: String? = null ) : Serializable /** @@ -5906,8 +5907,8 @@ data class Project( * @property upstream_trigger_is_enabled Whether the CI suite upstream project imports trigger is active * @property upstream_projects Names of upstream projects subscribed for pull request triggers */ -data class ProjectCISuite( - var can: Map? = null, +data class ProjectCISuite ( + var can: Map? = null, var id: String? = null, var name: String? = null, var project_id: String? = null, @@ -5957,7 +5958,7 @@ data class ProjectCISuite( var sql_validator_config_selectors: Array? = null, var sql_validator_config_exclusions: Array? = null, var upstream_trigger_is_enabled: Boolean? = null, - var upstream_projects: Array? = null, + var upstream_projects: Array? = null ) : Serializable /** @@ -5974,7 +5975,7 @@ data class ProjectCISuite( * @property params Error parameters (read-only) * @property sanitized_message A version of the error message that does not contain potentially sensitive information. Suitable for situations in which messages are stored or sent to consumers outside of Looker, such as external logs. Sanitized messages will display "(?)" where sensitive information would appear in the corresponding non-sanitized message (read-only) */ -data class ProjectError( +data class ProjectError ( var code: String? = null, var severity: String? = null, var kind: String? = null, @@ -5985,8 +5986,8 @@ data class ProjectError( var model_id: String? = null, var explore: String? = null, var help_url: String? = null, - var params: Map? = null, - var sanitized_message: String? = null, + var params: Map? = null, + var sanitized_message: String? = null ) : Serializable /** @@ -6000,8 +6001,8 @@ data class ProjectError( * @property editable State of editability for the file. (read-only) * @property git_status */ -data class ProjectFile( - var can: Map? = null, +data class ProjectFile ( + var can: Map? = null, var id: String? = null, var path: String? = null, var title: String? = null, @@ -6009,7 +6010,7 @@ data class ProjectFile( var extension: String? = null, var mime_type: String? = null, var editable: Boolean? = null, - var git_status: GitStatus? = null, + var git_status: GitStatus? = null ) : Serializable /** @@ -6018,11 +6019,11 @@ data class ProjectFile( * @property models_not_validated A list of models which were not fully validated (read-only) * @property computation_time Duration of project validation in seconds (read-only) */ -data class ProjectValidation( +data class ProjectValidation ( var errors: Array? = null, var project_digest: String? = null, var models_not_validated: Array? = null, - var computation_time: Float? = null, + var computation_time: Float? = null ) : Serializable /** @@ -6032,12 +6033,12 @@ data class ProjectValidation( * @property computation_time Duration of project validation in seconds (read-only) * @property stale If true, the cached project validation results are no longer accurate because the project has changed since the cached results were calculated (read-only) */ -data class ProjectValidationCache( +data class ProjectValidationCache ( var errors: Array? = null, var project_digest: String? = null, var models_not_validated: Array? = null, var computation_time: Float? = null, - var stale: Boolean? = null, + var stale: Boolean? = null ) : Serializable /** @@ -6050,15 +6051,15 @@ data class ProjectValidationCache( * @property git_branch * @property lookml_type The lookml syntax used by all files in this project (read-only) */ -data class ProjectWorkspace( - var can: Map? = null, +data class ProjectWorkspace ( + var can: Map? = null, var project_id: String? = null, var workspace_id: String? = null, var git_status: String? = null, var git_head: String? = null, var dependency_status: DependencyStatus? = null, var git_branch: GitBranch? = null, - var lookml_type: String? = null, + var lookml_type: String? = null ) : Serializable /** @@ -6068,7 +6069,7 @@ enum class PullRequestMode : Serializable { off, links, recommended, - required, + required } /** @@ -6099,15 +6100,15 @@ enum class PullRequestMode : Serializable { * @property query_timezone Query Timezone * @property has_table_calculations Has Table Calculations (read-only) */ -data class Query( - var can: Map? = null, +data class Query ( + var can: Map? = null, var id: String? = null, var model: String, var view: String, var fields: Array? = null, var pivots: Array? = null, var fill_fields: Array? = null, - var filters: Map? = null, + var filters: Map? = null, var filter_expression: String? = null, var sorts: Array? = null, var limit: String? = null, @@ -6115,8 +6116,8 @@ data class Query( var total: Boolean? = null, var row_total: String? = null, var subtotals: Array? = null, - var vis_config: Map? = null, - var filter_config: Map? = null, + var vis_config: Map? = null, + var filter_config: Map? = null, var visible_ui_sections: String? = null, var slug: String? = null, var dynamic_fields: String? = null, @@ -6125,7 +6126,7 @@ data class Query( var expanded_share_url: String? = null, var url: String? = null, var query_timezone: String? = null, - var has_table_calculations: Boolean? = null, + var has_table_calculations: Boolean? = null ) : Serializable /** @@ -6149,8 +6150,8 @@ data class Query( * @property dashboard_id Id of dashboard associated with query. * @property result_format The data format of the query results. (read-only) */ -data class QueryTask( - var can: Map? = null, +data class QueryTask ( + var can: Map? = null, var id: String? = null, var query_id: String? = null, var query: Query? = null, @@ -6168,7 +6169,7 @@ data class QueryTask( var result_source: String? = null, var look_id: String? = null, var dashboard_id: String? = null, - var result_format: String? = null, + var result_format: String? = null ) : Serializable /** @@ -6193,8 +6194,8 @@ data class QueryTask( * @property user_id The user account permissions in which the render task will execute (read-only) * @property width Output width in pixels (read-only) */ -data class RenderTask( - var can: Map? = null, +data class RenderTask ( + var can: Map? = null, var created_at: String? = null, var dashboard_filters: String? = null, var dashboard_id: String? = null, @@ -6213,7 +6214,7 @@ data class RenderTask( var status: String? = null, var status_detail: String? = null, var user_id: String? = null, - var width: Long? = null, + var width: Long? = null ) : Serializable /** @@ -6237,8 +6238,8 @@ data class RenderTask( * @property deleter_user_name Name of User that deleted the Report. (read-only) * @property schedule_count Count of schedules on the report. (read-only) */ -data class Report( - var can: Map? = null, +data class Report ( + var can: Map? = null, var id: String? = null, var title: String? = null, var user_id: String? = null, @@ -6256,7 +6257,7 @@ data class Report( var last_accessed_at: Date? = null, var deleter_user_id: String? = null, var deleter_user_name: String? = null, - var schedule_count: Long? = null, + var schedule_count: Long? = null ) : Serializable /** @@ -6269,15 +6270,15 @@ data class Report( * @property ssh_public_key Public deploy key for SSH authentication. * @property is_configured Whether the credentials have been configured for the Git Repository. (read-only) */ -data class RepositoryCredential( - var can: Map? = null, +data class RepositoryCredential ( + var can: Map? = null, var id: String? = null, var root_project_id: String? = null, var remote_url: String? = null, var git_username: String? = null, var git_password: String? = null, var ssh_public_key: String? = null, - var is_configured: Boolean? = null, + var is_configured: Boolean? = null ) : Serializable /** @@ -6296,7 +6297,7 @@ enum class ResultFormat : Serializable { xlsx, gsxml, sql, - odc, + odc } /** @@ -6305,20 +6306,20 @@ enum class ResultFormat : Serializable { * @property name The name of the filterable thing (Query or Merged Results). * @property listen array of dashboard_filter_name: and field: objects. (read-only) */ -data class ResultMakerFilterables( +data class ResultMakerFilterables ( var model: String? = null, var view: String? = null, var name: String? = null, - var listen: Array? = null, + var listen: Array? = null ) : Serializable /** * @property dashboard_filter_name The name of a dashboard filter to listen to. * @property field The name of the field in the filterable to filter with the value of the dashboard filter. */ -data class ResultMakerFilterablesListen( +data class ResultMakerFilterablesListen ( var dashboard_filter_name: String? = null, - var field: String? = null, + var field: String? = null ) : Serializable /** @@ -6333,7 +6334,7 @@ data class ResultMakerFilterablesListen( * @property query * @property vis_config Vis config of the constituent Query, or Merge Query. */ -data class ResultMakerWithIdVisConfigAndDynamicFields( +data class ResultMakerWithIdVisConfigAndDynamicFields ( var id: String? = null, var dynamic_fields: String? = null, var filterables: Array? = null, @@ -6343,7 +6344,7 @@ data class ResultMakerWithIdVisConfigAndDynamicFields( var query_id: String? = null, var sql_query_id: String? = null, var query: Query? = null, - var vis_config: Map? = null, + var vis_config: Map? = null ) : Serializable /** @@ -6358,8 +6359,8 @@ data class ResultMakerWithIdVisConfigAndDynamicFields( * @property url Link to get this item (read-only) * @property users_url Link to get list of users with this role (read-only) */ -data class Role( - var can: Map? = null, +data class Role ( + var can: Map? = null, var id: String? = null, var name: String? = null, var permission_set: PermissionSet? = null, @@ -6368,7 +6369,7 @@ data class Role( var model_set_id: String? = null, var internal: Boolean? = null, var url: String? = null, - var users_url: String? = null, + var users_url: String? = null ) : Serializable /** @@ -6384,8 +6385,8 @@ data class Role( * @property url Link to get this item (read-only) * @property users_url Link to get list of users with this role (read-only) */ -data class RoleSearch( - var can: Map? = null, +data class RoleSearch ( + var can: Map? = null, var id: String? = null, var name: String? = null, var permission_set: PermissionSet? = null, @@ -6395,7 +6396,7 @@ data class RoleSearch( var internal: Boolean? = null, var user_count: Long? = null, var url: String? = null, - var users_url: String? = null, + var users_url: String? = null ) : Serializable /** @@ -6422,8 +6423,8 @@ data class RoleSearch( * @property sql SQL text of the query as run (read-only) * @property sql_interface_sql SQL text of the SQL Interface query as run (read-only) */ -data class RunningQueries( - var can: Map? = null, +data class RunningQueries ( + var can: Map? = null, var id: String? = null, var user: UserPublic? = null, var query: Query? = null, @@ -6444,7 +6445,7 @@ data class RunningQueries( var status: String? = null, var runtime: Double? = null, var sql: String? = null, - var sql_interface_sql: String? = null, + var sql_interface_sql: String? = null ) : Serializable /** @@ -6484,8 +6485,8 @@ data class RunningQueries( * @property allow_direct_roles Allows roles to be directly assigned to SAML auth'd users. * @property url Link to get this item (read-only) */ -data class SamlConfig( - var can: Map? = null, +data class SamlConfig ( + var can: Map? = null, var enabled: Boolean? = null, var idp_cert: String? = null, var idp_cert_multi: SamlIdpCertMulti? = null, @@ -6519,7 +6520,7 @@ data class SamlConfig( var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, var allow_direct_roles: Boolean? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -6530,13 +6531,13 @@ data class SamlConfig( * @property roles Looker Roles (read-only) * @property url Link to saml config (read-only) */ -data class SamlGroupRead( +data class SamlGroupRead ( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, var roles: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -6547,20 +6548,20 @@ data class SamlGroupRead( * @property role_ids Looker Role Ids * @property url Link to saml config (read-only) */ -data class SamlGroupWrite( +data class SamlGroupWrite ( var id: String? = null, var looker_group_id: String? = null, var looker_group_name: String? = null, var name: String? = null, var role_ids: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** * @property signing List of signing certificates. Values should be without pre-encapsulation and post-encapsulation boundaries */ -data class SamlIdpCertMulti( - var signing: Array? = null, +data class SamlIdpCertMulti ( + var signing: Array? = null ) : Serializable /** @@ -6570,12 +6571,12 @@ data class SamlIdpCertMulti( * @property idp_cert Identify Provider Certificate (read-only) * @property idp_cert_multi */ -data class SamlMetadataParseResult( - var can: Map? = null, +data class SamlMetadataParseResult ( + var can: Map? = null, var idp_issuer: String? = null, var idp_url: String? = null, var idp_cert: String? = null, - var idp_cert_multi: SamlIdpCertMulti? = null, + var idp_cert_multi: SamlIdpCertMulti? = null ) : Serializable /** @@ -6584,11 +6585,11 @@ data class SamlMetadataParseResult( * @property user_attributes Looker User Attributes (read-only) * @property url Link to saml config (read-only) */ -data class SamlUserAttributeRead( +data class SamlUserAttributeRead ( var name: String? = null, var required: Boolean? = null, var user_attributes: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -6597,11 +6598,11 @@ data class SamlUserAttributeRead( * @property user_attribute_ids Looker User Attribute Ids * @property url Link to saml config (read-only) */ -data class SamlUserAttributeWrite( +data class SamlUserAttributeWrite ( var name: String? = null, var required: Boolean? = null, var user_attribute_ids: Array? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -6650,7 +6651,7 @@ data class SamlUserAttributeWrite( * @property last_run_status Status of the last run for this ScheduledPlan (read-only) * @property can Operations the current user is able to perform on this object (read-only) */ -data class ScheduledPlan( +data class ScheduledPlan ( var name: String? = null, var user_id: String? = null, var run_as_recipient: Boolean? = null, @@ -6694,7 +6695,7 @@ data class ScheduledPlan( var next_run_at: Date? = null, var last_run_at: Date? = null, var last_run_status: String? = null, - var can: Map? = null, + var can: Map? = null ) : Serializable /** @@ -6711,7 +6712,7 @@ data class ScheduledPlan( * @property include_filters Whether or not to include filters context * @property message Optional message to be included in scheduled emails */ -data class ScheduledPlanDestination( +data class ScheduledPlanDestination ( var id: String? = null, var scheduled_plan_id: String? = null, var format: String? = null, @@ -6723,16 +6724,16 @@ data class ScheduledPlanDestination( var parameters: String? = null, var secret_parameters: String? = null, var include_filters: Boolean? = null, - var message: String? = null, + var message: String? = null ) : Serializable /** * @property name Schema name (read-only) * @property is_default True if this is the default schema (read-only) */ -data class Schema( +data class Schema ( var name: String? = null, - var is_default: Boolean? = null, + var is_default: Boolean? = null ) : Serializable /** @@ -6746,7 +6747,7 @@ data class Schema( * @property column_size Column data size (read-only) * @property snippets SQL Runner snippets for this connection (read-only) */ -data class SchemaColumn( +data class SchemaColumn ( var name: String? = null, var sql_escaped_name: String? = null, var schema_name: String? = null, @@ -6755,7 +6756,7 @@ data class SchemaColumn( var data_type_looker: String? = null, var description: String? = null, var column_size: Long? = null, - var snippets: Array? = null, + var snippets: Array? = null ) : Serializable /** @@ -6764,34 +6765,34 @@ data class SchemaColumn( * @property schema_name Name of schema (read-only) * @property columns Columns for this schema (read-only) */ -data class SchemaColumns( +data class SchemaColumns ( var name: String? = null, var sql_escaped_name: String? = null, var schema_name: String? = null, - var columns: Array? = null, + var columns: Array? = null ) : Serializable /** * @property query * @property result */ -data class SchemaMessage( +data class SchemaMessage ( var query: SchemaQuery? = null, - var result: SchemaResult? = null, + var result: SchemaResult? = null ) : Serializable /** * @property question The question for schema resolution. (read-only) */ -data class SchemaQuery( - var question: String? = null, +data class SchemaQuery ( + var question: String? = null ) : Serializable /** * @property datasources The datasources used to resolve the schema query. (read-only) */ -data class SchemaResult( - var datasources: Array? = null, +data class SchemaResult ( + var datasources: Array? = null ) : Serializable /** @@ -6802,13 +6803,13 @@ data class SchemaResult( * @property external External reference??? (read-only) * @property snippets SQL Runner snippets for connection (read-only) */ -data class SchemaTable( +data class SchemaTable ( var name: String? = null, var sql_escaped_name: String? = null, var schema_name: String? = null, var rows: Long? = null, var external: String? = null, - var snippets: Array? = null, + var snippets: Array? = null ) : Serializable /** @@ -6817,11 +6818,11 @@ data class SchemaTable( * @property tables Tables for this schema (read-only) * @property table_limit_hit True if the table limit was hit while retrieving tables in this schema (read-only) */ -data class SchemaTables( +data class SchemaTables ( var name: String? = null, var is_default: Boolean? = null, var tables: Array? = null, - var table_limit_hit: Boolean? = null, + var table_limit_hit: Boolean? = null ) : Serializable /** @@ -6829,7 +6830,7 @@ data class SchemaTables( */ enum class SecretType : Serializable { SSO, - JWT, + JWT } /** @@ -6838,11 +6839,11 @@ enum class SecretType : Serializable { * @property owner_id User ID of the uploaded data owner (read-only) * @property canvas_guid GUID of the visual canvas (read-only) */ -data class SelfServiceModelUploadData( +data class SelfServiceModelUploadData ( var upload_type: String? = null, var drive_url: String? = null, var owner_id: String? = null, - var canvas_guid: String? = null, + var canvas_guid: String? = null ) : Serializable /** @@ -6857,8 +6858,8 @@ data class SelfServiceModelUploadData( * @property created_at Service account creation timestamp (read-only) * @property url Link to get this item (read-only) */ -data class ServiceAccount( - var can: Map? = null, +data class ServiceAccount ( + var can: Map? = null, var id: String? = null, var service_account_name: String? = null, var is_service_account: Boolean? = null, @@ -6867,7 +6868,7 @@ data class ServiceAccount( var role_ids: Array? = null, var credentials_api3: Array? = null, var created_at: Date? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -6887,8 +6888,8 @@ data class ServiceAccount( * @property expires_at Time when this session will expire (read-only) * @property url Link to get this item (read-only) */ -data class Session( - var can: Map? = null, +data class Session ( + var can: Map? = null, var id: String? = null, var ip_address: String? = null, var browser: String? = null, @@ -6902,7 +6903,7 @@ data class Session( var sudo_user_id: String? = null, var created_at: String? = null, var expires_at: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -6913,13 +6914,13 @@ data class Session( * @property use_inactivity_based_logout Enforce session logout for sessions that are inactive for 15 minutes. * @property track_session_location Track location of session when user logs in. */ -data class SessionConfig( - var can: Map? = null, +data class SessionConfig ( + var can: Map? = null, var allow_persistent_sessions: Boolean? = null, var session_minutes: Long? = null, var unlimited_sessions_per_user: Boolean? = null, var use_inactivity_based_logout: Boolean? = null, - var track_session_location: Boolean? = null, + var track_session_location: Boolean? = null ) : Serializable /** @@ -6957,7 +6958,7 @@ data class SessionConfig( * @property ca_agent_observability Toggle Conversational Analytics Agent Token usage * @property mcp_tools */ -data class Setting( +data class Setting ( var instance_config: InstanceConfig? = null, var extension_framework_enabled: Boolean? = null, var extension_load_url_enabled: Boolean? = null, @@ -6990,7 +6991,7 @@ data class Setting( var is_content_certification_enabled: Boolean? = null, var auto_certify_lookml_content: Boolean? = null, var ca_agent_observability: Boolean? = null, - var mcp_tools: McpTools? = null, + var mcp_tools: McpTools? = null ) : Serializable /** @@ -6998,10 +6999,10 @@ data class Setting( * @property message Error message for node (read-only) * @property hostname Host name of node (read-only) */ -data class SmtpNodeStatus( +data class SmtpNodeStatus ( var is_valid: Boolean? = null, var message: String? = null, - var hostname: String? = null, + var hostname: String? = null ) : Serializable /** @@ -7019,7 +7020,7 @@ data class SmtpNodeStatus( * @property scopes The OAuth Scopes * @property default_smtp Whether to enable built-in Looker SMTP */ -data class SmtpSettings( +data class SmtpSettings ( var address: String? = null, var from: String? = null, var user_name: String? = null, @@ -7032,7 +7033,7 @@ data class SmtpSettings( var client_secret: String? = null, var token_endpoint: String? = null, var scopes: String? = null, - var default_smtp: Boolean? = null, + var default_smtp: Boolean? = null ) : Serializable /** @@ -7040,10 +7041,10 @@ data class SmtpSettings( * @property node_count Total number of nodes in cluster (read-only) * @property node_status array of each node's status containing is_valid, message, hostname (read-only) */ -data class SmtpStatus( +data class SmtpStatus ( var is_valid: Boolean? = null, var node_count: Long? = null, - var node_status: Array? = null, + var node_status: Array? = null ) : Serializable /** @@ -7051,19 +7052,19 @@ data class SmtpStatus( * @property label Label of the snippet (read-only) * @property sql SQL text of the snippet (read-only) */ -data class Snippet( +data class Snippet ( var name: String? = null, var label: String? = null, - var sql: String? = null, + var sql: String? = null ) : Serializable /** * @property model Source model * @property explore Source explore */ -data class Source( +data class Source ( var model: String? = null, - var explore: String? = null, + var explore: String? = null ) : Serializable /** @@ -7071,10 +7072,10 @@ data class Source( * @property id Unique Id (read-only) * @property signature Calcite signature (read-only) */ -data class SqlInterfaceQuery( - var can: Map? = null, +data class SqlInterfaceQuery ( + var can: Map? = null, var id: Long? = null, - var signature: String, + var signature: String ) : Serializable /** @@ -7082,17 +7083,17 @@ data class SqlInterfaceQuery( * @property sql Original SQL request * @property jdbc_client Whether the query should be run for use in a JDBC Client. This changes the formatting of some datetime based values. */ -data class SqlInterfaceQueryCreate( - var can: Map? = null, +data class SqlInterfaceQueryCreate ( + var can: Map? = null, var sql: String, - var jdbc_client: Boolean? = null, + var jdbc_client: Boolean? = null ) : Serializable /** * @property results JDBC Metadata to inflate Avatica response classes. (read-only) */ -data class SqlInterfaceQueryMetadata( - var results: String? = null, +data class SqlInterfaceQueryMetadata ( + var results: String? = null ) : Serializable /** @@ -7111,8 +7112,8 @@ data class SqlInterfaceQueryMetadata( * @property vis_config Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. * @property result_maker_id ID of the ResultMakerLookup entry. */ -data class SqlQuery( - var can: Map? = null, +data class SqlQuery ( + var can: Map? = null, var slug: String? = null, var last_runtime: Float? = null, var run_count: Long? = null, @@ -7124,8 +7125,8 @@ data class SqlQuery( var creator: UserPublic? = null, var explore_url: String? = null, var plaintext: Boolean? = null, - var vis_config: Map? = null, - var result_maker_id: String? = null, + var vis_config: Map? = null, + var result_maker_id: String? = null ) : Serializable /** @@ -7135,19 +7136,19 @@ data class SqlQuery( * @property sql SQL query * @property vis_config Visualization configuration properties. These properties are typically opaque and differ based on the type of visualization used. There is no specified set of allowed keys. The values can be any type supported by JSON. A "type" key with a string value is often present, and is used by Looker to determine which visualization to present. Visualizations ignore unknown vis_config properties. */ -data class SqlQueryCreate( +data class SqlQueryCreate ( var connection_name: String? = null, var connection_id: String? = null, var model_name: String? = null, var sql: String? = null, - var vis_config: Map? = null, + var vis_config: Map? = null ) : Serializable /** * @property public_key The SSH public key created for this instance (read-only) */ -data class SshPublicKey( - var public_key: String? = null, +data class SshPublicKey ( + var public_key: String? = null ) : Serializable /** @@ -7161,7 +7162,7 @@ data class SshPublicKey( * @property public_key The SSH public key created for this instance (read-only) * @property status The current connection status to this SSH Server (read-only) */ -data class SshServer( +data class SshServer ( var ssh_server_id: String? = null, var ssh_server_name: String? = null, var ssh_server_host: String? = null, @@ -7170,7 +7171,7 @@ data class SshServer( var finger_print: String? = null, var sha_finger_print: String? = null, var public_key: String? = null, - var status: String? = null, + var status: String? = null ) : Serializable /** @@ -7186,7 +7187,7 @@ data class SshServer( * @property database_port Port that the Database Server is listening on * @property status Current connection status for this Tunnel (read-only) */ -data class SshTunnel( +data class SshTunnel ( var tunnel_id: String? = null, var ssh_server_id: String? = null, var ssh_server_name: String? = null, @@ -7197,7 +7198,7 @@ data class SshTunnel( var local_host_port: Long? = null, var database_host: String? = null, var database_port: Long? = null, - var status: String? = null, + var status: String? = null ) : Serializable /** @@ -7206,16 +7207,16 @@ data class SshTunnel( enum class SslVersion : Serializable { TLSv1_1, SSLv23, - TLSv1_2, + TLSv1_2 } /** * @property emails An array of emails to add to the Allowlist * @property reason Reason for adding emails to the Allowlist */ -data class SupportAccessAddEntries( +data class SupportAccessAddEntries ( var emails: Array? = null, - var reason: String? = null, + var reason: String? = null ) : Serializable /** @@ -7225,28 +7226,28 @@ data class SupportAccessAddEntries( * @property reason Reason the Email is included in the Allowlist * @property created_date Date the Email was added to the Allowlist (read-only) */ -data class SupportAccessAllowlistEntry( +data class SupportAccessAllowlistEntry ( var id: String? = null, var email: String? = null, var full_name: String? = null, var reason: String? = null, - var created_date: Date? = null, + var created_date: Date? = null ) : Serializable /** * @property duration_in_seconds Duration Support Access will remain enabled */ -data class SupportAccessEnable( - var duration_in_seconds: Long, +data class SupportAccessEnable ( + var duration_in_seconds: Long ) : Serializable /** * @property open Whether or not Support Access is open (read-only) * @property open_until Time that Support Access will expire (read-only) */ -data class SupportAccessStatus( +data class SupportAccessStatus ( var open: Boolean? = null, - var open_until: Date? = null, + var open_until: Date? = null ) : Serializable /** @@ -7256,7 +7257,7 @@ enum class SupportedActionTypes : Serializable { cell, query, dashboard, - none, + none } /** @@ -7264,7 +7265,7 @@ enum class SupportedActionTypes : Serializable { */ enum class SupportedDownloadSettings : Serializable { push, - url, + url } /** @@ -7284,7 +7285,7 @@ enum class SupportedFormats : Serializable { wysiwyg_pdf, assembled_pdf, wysiwyg_png, - csv_zip, + csv_zip } /** @@ -7292,7 +7293,7 @@ enum class SupportedFormats : Serializable { */ enum class SupportedFormattings : Serializable { formatted, - unformatted, + unformatted } /** @@ -7300,7 +7301,7 @@ enum class SupportedFormattings : Serializable { */ enum class SupportedVisualizationFormattings : Serializable { apply, - noapply, + noapply } /** @@ -7313,7 +7314,7 @@ enum class SupportedVisualizationFormattings : Serializable { * @property exampleQueries * @property groupId Identifies the group that the event belongs to. (read-only) */ -data class SystemMessage( +data class SystemMessage ( var text: TextMessage? = null, var schema: SchemaMessage? = null, var data: DataMessage? = null, @@ -7321,16 +7322,16 @@ data class SystemMessage( var chart: ChartMessage? = null, var error: ErrorMessage? = null, var exampleQueries: ExampleQueries? = null, - var groupId: Long? = null, + var groupId: Long? = null ) : Serializable /** * @property parts The parts of the message. (read-only) * @property textType The type of the text message. (read-only) */ -data class TextMessage( +data class TextMessage ( var parts: Array? = null, - var textType: String? = null, + var textType: String? = null ) : Serializable /** @@ -7341,13 +7342,13 @@ data class TextMessage( * @property name Name of theme. Can only be alphanumeric and underscores. * @property settings */ -data class Theme( - var can: Map? = null, +data class Theme ( + var can: Map? = null, var begin_at: Date? = null, var end_at: Date? = null, var id: String? = null, var name: String? = null, - var settings: ThemeSettings? = null, + var settings: ThemeSettings? = null ) : Serializable /** @@ -7400,7 +7401,7 @@ data class Theme( * @property row_gap_size The horizontal gap/gutter size between tiles. * @property border_radius The border radius for tiles. */ -data class ThemeSettings( +data class ThemeSettings ( var background_color: String? = null, var background_image_url: String? = null, var background_image_id: String? = null, @@ -7448,7 +7449,7 @@ data class ThemeSettings( var tile_title_font_size: String? = null, var column_gap_size: String? = null, var row_gap_size: String? = null, - var border_radius: String? = null, + var border_radius: String? = null ) : Serializable /** @@ -7456,10 +7457,10 @@ data class ThemeSettings( * @property label Description of timezone (read-only) * @property group Timezone group (e.g Common, Other, etc.) (read-only) */ -data class Timezone( +data class Timezone ( var value: String? = null, var label: String? = null, - var group: String? = null, + var group: String? = null ) : Serializable /** @@ -7468,20 +7469,20 @@ data class Timezone( * @property content_type MIME type of content. This can only be used to override content that is detected as text/plain. Needed to set application/json content types, which are analyzed as plain text. * @property version Version number of the stored value. The version must be provided for any updates to an existing artifact. (read-only) */ -data class UpdateArtifact( +data class UpdateArtifact ( var key: String, var value: String, var content_type: String? = null, - var version: Long? = null, + var version: Long? = null ) : Serializable /** * @property name Unique Name * @property parent_id Id of Parent. If the parent id is null, this is a root-level entry */ -data class UpdateFolder( +data class UpdateFolder ( var name: String? = null, - var parent_id: String? = null, + var parent_id: String? = null ) : Serializable /** @@ -7527,8 +7528,8 @@ data class UpdateFolder( * @property service_account_name The display name of the service account. This field is omitted for non service account users. (read-only) * @property url Link to get this item (read-only) */ -data class User( - var can: Map? = null, +data class User ( + var can: Map? = null, var avatar_url: String? = null, var avatar_url_without_sizing: String? = null, var credentials_api3: Array? = null, @@ -7557,7 +7558,7 @@ data class User( var presumed_looker_employee: Boolean? = null, var role_ids: Array? = null, var sessions: Array? = null, - var ui_state: Map? = null, + var ui_state: Map? = null, var verified_looker_employee: Boolean? = null, var roles_externally_managed: Boolean? = null, var allow_direct_roles: Boolean? = null, @@ -7568,7 +7569,7 @@ data class User( var can_manage_api3_creds: Boolean? = null, var is_service_account: Boolean? = null, var service_account_name: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -7587,8 +7588,8 @@ data class User( * @property needed_for_ci_run Whether this user attribute is needed for a CI run * @property value_for_ci_run The value to use for this user attribute during a CI run */ -data class UserAttribute( - var can: Map? = null, +data class UserAttribute ( + var can: Map? = null, var id: String? = null, var name: String, var label: String, @@ -7601,7 +7602,7 @@ data class UserAttribute( var user_can_edit: Boolean? = null, var hidden_value_domain_whitelist: String? = null, var needed_for_ci_run: Boolean? = null, - var value_for_ci_run: String? = null, + var value_for_ci_run: String? = null ) : Serializable /** @@ -7616,7 +7617,7 @@ enum class UserAttributeFilterTypes : Serializable { datetime, relative_url, yesno, - zipcode, + zipcode } /** @@ -7630,23 +7631,23 @@ enum class UserAttributeFilterTypes : Serializable { * @property rank Precedence for resolving value for user (read-only) * @property value Value of user attribute for group (read-only) */ -data class UserAttributeGroupValue( - var can: Map? = null, +data class UserAttributeGroupValue ( + var can: Map? = null, var id: String? = null, var group_id: String? = null, var user_attribute_id: String? = null, var value_is_hidden: Boolean? = null, var rank: Long? = null, - var value: String? = null, + var value: String? = null ) : Serializable /** * @property name Name of user attribute that should be overridden for CI Run * @property value Value of user attribute that should be set for CI Run */ -data class UserAttributeOverride( +data class UserAttributeOverride ( var name: String? = null, - var value: String? = null, + var value: String? = null ) : Serializable /** @@ -7662,8 +7663,8 @@ data class UserAttributeOverride( * @property source How user got this value for this attribute (read-only) * @property hidden_value_domain_whitelist If this user attribute is hidden, allowed list of destinations to which it may be sent. (read-only) */ -data class UserAttributeWithValue( - var can: Map? = null, +data class UserAttributeWithValue ( + var can: Map? = null, var name: String? = null, var label: String? = null, var rank: Long? = null, @@ -7673,7 +7674,7 @@ data class UserAttributeWithValue( var value_is_hidden: Boolean? = null, var user_attribute_id: String? = null, var source: String? = null, - var hidden_value_domain_whitelist: String? = null, + var hidden_value_domain_whitelist: String? = null ) : Serializable /** @@ -7693,8 +7694,8 @@ data class UserAttributeWithValue( * @property created_at When the connection was created (read-only) * @property updated_at When the connection was last updated (read-only) */ -data class UserDbConnection( - var can: Map? = null, +data class UserDbConnection ( + var can: Map? = null, var id: String? = null, var name: String? = null, var user_id: Long? = null, @@ -7708,14 +7709,14 @@ data class UserDbConnection( var oauth_application_id: Long? = null, var enabled: Boolean? = null, var created_at: Date? = null, - var updated_at: Date? = null, + var updated_at: Date? = null ) : Serializable /** * @property email Email Address */ -data class UserEmailOnly( - var email: String, +data class UserEmailOnly ( + var email: String ) : Serializable /** @@ -7730,8 +7731,8 @@ data class UserEmailOnly( * @property fail_count Number of failures that triggered the lockout (read-only) * @property lockout_at Time when lockout was triggered (read-only) */ -data class UserLoginLockout( - var can: Map? = null, +data class UserLoginLockout ( + var can: Map? = null, var key: String? = null, var auth_type: String? = null, var ip: String? = null, @@ -7740,14 +7741,14 @@ data class UserLoginLockout( var full_name: String? = null, var email: String? = null, var fail_count: Long? = null, - var lockout_at: Date? = null, + var lockout_at: Date? = null ) : Serializable /** * @property text Text content of the user message. (read-only) */ -data class UserMessage( - var text: String? = null, +data class UserMessage ( + var text: String? = null ) : Serializable /** @@ -7759,14 +7760,14 @@ data class UserMessage( * @property avatar_url URL for the avatar image (may be generic) (read-only) * @property url Link to get this item (read-only) */ -data class UserPublic( - var can: Map? = null, +data class UserPublic ( + var can: Map? = null, var id: String? = null, var first_name: String? = null, var last_name: String? = null, var display_name: String? = null, var avatar_url: String? = null, - var url: String? = null, + var url: String? = null ) : Serializable /** @@ -7774,10 +7775,10 @@ data class UserPublic( * @property errors Error detail array (read-only) * @property documentation_url Documentation link (read-only) */ -data class ValidationError( +data class ValidationError ( var message: String, var errors: Array? = null, - var documentation_url: String, + var documentation_url: String ) : Serializable /** @@ -7786,11 +7787,11 @@ data class ValidationError( * @property message Error info message (read-only) * @property documentation_url Documentation link (read-only) */ -data class ValidationErrorDetail( +data class ValidationErrorDetail ( var field: String? = null, var code: String? = null, var message: String? = null, - var documentation_url: String, + var documentation_url: String ) : Serializable /** @@ -7803,7 +7804,7 @@ enum class WeekStartDay : Serializable { thursday, friday, saturday, - sunday, + sunday } /** @@ -7811,10 +7812,10 @@ enum class WeekStartDay : Serializable { * @property subject The subject that would be sent for the custom welcome email * @property header The header that would be sent in the body of a custom welcome email */ -data class WelcomeEmailTest( +data class WelcomeEmailTest ( var content: String? = null, var subject: String? = null, - var header: String? = null, + var header: String? = null ) : Serializable /** @@ -7835,7 +7836,7 @@ data class WelcomeEmailTest( * @property alerts_links Remove Looker links from Alerts * @property folders_mentions Remove Looker mentions in home folder page when you don’t have any items saved */ -data class WhitelabelConfiguration( +data class WhitelabelConfiguration ( var id: String? = null, var logo_file: String? = null, var logo_url: String? = null, @@ -7851,16 +7852,16 @@ data class WhitelabelConfiguration( var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, - var folders_mentions: Boolean? = null, + var folders_mentions: Boolean? = null ) : Serializable /** * @property type Defines the delivery mechanism ('email' or 'action_hub'). * @property parameters The routing configuration. */ -data class WorkflowDestination( +data class WorkflowDestination ( var type: String? = null, - var parameters: String? = null, + var parameters: String? = null ) : Serializable /** @@ -7868,10 +7869,10 @@ data class WorkflowDestination( * @property polling_frequency_cron Crontab specifying the execution frequency * @property destination */ -data class WorkflowParams( +data class WorkflowParams ( var primary_agent: String? = null, var polling_frequency_cron: String? = null, - var destination: WorkflowDestination? = null, + var destination: WorkflowDestination? = null ) : Serializable /** @@ -7879,10 +7880,10 @@ data class WorkflowParams( * @property id The unique id of this user workspace. Predefined workspace ids include "production" and "dev" (read-only) * @property projects The local state of each project in the workspace (read-only) */ -data class Workspace( - var can: Map? = null, +data class Workspace ( + var can: Map? = null, var id: String? = null, - var projects: Array? = null, + var projects: Array? = null ) : Serializable /** @@ -7900,7 +7901,7 @@ data class Workspace( * @property code_interpreter Enables Code Interpreter for this Agent * @property workflow_params */ -data class WriteAgent( +data class WriteAgent ( var created_by_user_id: String? = null, var name: String? = null, var description: String? = null, @@ -7910,7 +7911,7 @@ data class WriteAgent( var context: Context? = null, var deleted: Boolean? = null, var code_interpreter: Boolean? = null, - var workflow_params: WorkflowParams? = null, + var workflow_params: WorkflowParams? = null ) : Serializable /** @@ -7942,7 +7943,7 @@ data class WriteAgent( * @property threshold Value of the alert threshold * @property time_series_condition_state */ -data class WriteAlert( +data class WriteAlert ( var applied_dashboard_filters: Array? = null, var comparison_type: ComparisonType, var cron: String, @@ -7966,7 +7967,7 @@ data class WriteAlert( var lookml_link_id: String? = null, var owner_id: String, var threshold: Double, - var time_series_condition_state: AlertConditionState? = null, + var time_series_condition_state: AlertConditionState? = null ) : Serializable /** @@ -7975,8 +7976,8 @@ data class WriteAlert( * * @property workspace_id The id of active workspace for this session */ -data class WriteApiSession( - var workspace_id: String? = null, +data class WriteApiSession ( + var workspace_id: String? = null ) : Serializable /** @@ -7989,12 +7990,12 @@ data class WriteApiSession( * @property custom_s3_key (Write-Only) AWS S3 key used for custom-s3 backups * @property custom_s3_secret (Write-Only) AWS S3 secret used for custom-s3 backups */ -data class WriteBackupConfiguration( +data class WriteBackupConfiguration ( var type: String? = null, var custom_s3_bucket: String? = null, var custom_s3_bucket_region: String? = null, var custom_s3_key: String? = null, - var custom_s3_secret: String? = null, + var custom_s3_secret: String? = null ) : Serializable /** @@ -8007,12 +8008,12 @@ data class WriteBackupConfiguration( * @property title Title of the board * @property user_id User id of board creator */ -data class WriteBoard( +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, + var user_id: String? = null ) : Serializable /** @@ -8033,7 +8034,7 @@ data class WriteBoard( * @property custom_image_data_base64 (Write-Only) base64 encoded image data * @property use_custom_image Whether the custom image should be used instead of the content image, if the item is associated with content */ -data class WriteBoardItem( +data class WriteBoardItem ( var custom_description: String? = null, var custom_title: String? = null, var custom_url: String? = null, @@ -8046,7 +8047,7 @@ data class WriteBoardItem( var use_custom_title: Boolean? = null, var use_custom_url: Boolean? = null, var custom_image_data_base64: String? = null, - var use_custom_image: Boolean? = null, + var use_custom_image: Boolean? = null ) : Serializable /** @@ -8059,12 +8060,12 @@ data class WriteBoardItem( * @property item_order ids of the board items in the order they should be displayed * @property title Name of row */ -data class WriteBoardSection( +data class WriteBoardSection ( var deleted_at: Date? = null, var description: String? = null, var board_id: String? = null, var item_order: Array? = null, - var title: String? = null, + var title: String? = null ) : Serializable /** @@ -8074,9 +8075,9 @@ data class WriteBoardSection( * @property certification_status Certification status: "certified" or "revoked" Valid values are: "certified", "revoked". * @property notes Certification notes */ -data class WriteCertification( +data class WriteCertification ( var certification_status: CertificationStatus? = null, - var notes: String? = null, + var notes: String? = null ) : Serializable /** @@ -8088,11 +8089,11 @@ data class WriteCertification( * @property sequentialPalettes Array of discrete palette definitions * @property divergingPalettes Array of diverging palette definitions */ -data class WriteColorCollection( +data class WriteColorCollection ( var label: String? = null, var categoricalPalettes: Array? = null, var sequentialPalettes: Array? = null, - var divergingPalettes: Array? = null, + var divergingPalettes: Array? = null ) : Serializable /** @@ -8108,12 +8109,12 @@ data class WriteColorCollection( * @property lookml_dashboard Dynamic writeable type for DashboardBase removes: * can, content_favorite_id, content_metadata_id, description, hidden, id, model, query_timezone, readonly, refresh_interval, refresh_interval_to_i, title, user_id, slug, preferred_viewer */ -data class WriteContentFavorite( +data class WriteContentFavorite ( var user_id: String? = null, var content_metadata_id: String? = null, var look: WriteLookBasic? = null, var dashboard: WriteDashboardBase? = null, - var lookml_dashboard: WriteDashboardBase? = null, + var lookml_dashboard: WriteDashboardBase? = null ) : Serializable /** @@ -8122,8 +8123,8 @@ data class WriteContentFavorite( * * @property inherits Whether content inherits its access levels from parent. Can be false only if the associated content is a folder, an agent or a board. */ -data class WriteContentMeta( - var inherits: Boolean? = null, +data class WriteContentMeta ( + var inherits: Boolean? = null ) : Serializable /** @@ -8138,13 +8139,13 @@ data class WriteContentMeta( * @property conversation_agent Dynamic writeable type for Agent removes: * 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, is_lookml, lookml_agent_id, lookml_edit_uri */ -data class WriteConversation( +data class WriteConversation ( var name: String? = null, var category: String? = null, var sources: Array? = null, var agent_id: String? = null, var deleted: Boolean? = null, - var conversation_agent: WriteAgent? = null, + var conversation_agent: WriteAgent? = null ) : Serializable /** @@ -8154,16 +8155,16 @@ data class WriteConversation( * @property message Message content * @property type Message type */ -data class WriteConversationMessage( - var message: Map? = null, - var type: String? = null, +data class WriteConversationMessage ( + var message: Map? = null, + var type: String? = null ) : Serializable /** * @property messages Array of conversation messages to create */ -data class WriteConversationMessages( - var messages: Array? = null, +data class WriteConversationMessages ( + var messages: Array? = null ) : Serializable /** @@ -8184,7 +8185,7 @@ data class WriteConversationMessages( * @property required Whether the filter requires a value to run the dashboard * @property ui_config The visual configuration for this filter. Used to set up how the UI for this filter should appear. */ -data class WriteCreateDashboardFilter( +data class WriteCreateDashboardFilter ( var dashboard_id: String, var name: String, var title: String, @@ -8197,7 +8198,7 @@ data class WriteCreateDashboardFilter( var listens_to_filters: Array? = null, var allow_multiple_values: Boolean? = null, var required: Boolean? = null, - var ui_config: Map? = null, + var ui_config: Map? = null ) : Serializable /** @@ -8211,13 +8212,13 @@ data class WriteCreateDashboardFilter( * @property look_id Id of look associated with query. * @property dashboard_id Id of dashboard associated with query. */ -data class WriteCreateQueryTask( +data class WriteCreateQueryTask ( var query_id: String, var result_format: ResultFormat, var source: String? = null, var deferred: Boolean? = null, var look_id: String? = null, - var dashboard_id: String? = null, + var dashboard_id: String? = null ) : Serializable /** @@ -8226,8 +8227,8 @@ data class WriteCreateQueryTask( * * @property purpose User defined purpose for this credential. */ -data class WriteCredentialsApi3( - var purpose: String? = null, +data class WriteCredentialsApi3 ( + var purpose: String? = null ) : Serializable /** @@ -8237,9 +8238,9 @@ data class WriteCredentialsApi3( * @property email EMail address used for user login * @property forced_password_reset_at_next_login Force the user to change their password upon their next login */ -data class WriteCredentialsEmail( +data class WriteCredentialsEmail ( var email: String? = null, - var forced_password_reset_at_next_login: Boolean? = null, + var forced_password_reset_at_next_login: Boolean? = null ) : Serializable /** @@ -8280,7 +8281,7 @@ data class WriteCredentialsEmail( * @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( +data class WriteDashboard ( var description: String? = null, var hidden: Boolean? = null, var query_timezone: String? = null, @@ -8311,7 +8312,7 @@ data class WriteDashboard( var appearance: DashboardAppearance? = null, var layout_granularity: String? = null, var preserve_desktop_layout: Boolean? = null, - var download_settings: DashboardDownloadSettings? = null, + var download_settings: DashboardDownloadSettings? = null ) : Serializable /** @@ -8323,9 +8324,9 @@ data class WriteDashboard( * @property certification_metadata Dynamic writeable type for Certification removes: * ui_status, user_name, updated_at */ -data class WriteDashboardBase( +data class WriteDashboardBase ( var folder: WriteFolderBase? = null, - var certification_metadata: WriteCertification? = null, + var certification_metadata: WriteCertification? = null ) : Serializable /** @@ -8362,7 +8363,7 @@ data class WriteDashboardBase( * ui_status, user_name, updated_at * @property image_id ID of Dashboard Image */ -data class WriteDashboardElement( +data class WriteDashboardElement ( var body_text: String? = null, var dashboard_id: String? = null, var dashboard_layout_id: String? = null, @@ -8387,7 +8388,7 @@ data class WriteDashboardElement( var extension_id: String? = null, var aria_description: String? = null, var certification_metadata: WriteCertification? = null, - var image_id: String? = null, + var image_id: String? = null ) : Serializable /** @@ -8407,7 +8408,7 @@ data class WriteDashboardElement( * @property required Whether the filter requires a value to run the dashboard * @property ui_config The visual configuration for this filter. Used to set up how the UI for this filter should appear. */ -data class WriteDashboardFilter( +data class WriteDashboardFilter ( var name: String? = null, var title: String? = null, var type: String? = null, @@ -8419,7 +8420,7 @@ data class WriteDashboardFilter( var listens_to_filters: Array? = null, var allow_multiple_values: Boolean? = null, var required: Boolean? = null, - var ui_config: Map? = null, + var ui_config: Map? = null ) : Serializable /** @@ -8436,7 +8437,7 @@ data class WriteDashboardFilter( * @property order Order * @property lookml_link_id LookML link ID (stable name) */ -data class WriteDashboardLayout( +data class WriteDashboardLayout ( var dashboard_id: String? = null, var type: String? = null, var active: Boolean? = null, @@ -8445,7 +8446,7 @@ data class WriteDashboardLayout( var label: String? = null, var description: String? = null, var order: Long? = null, - var lookml_link_id: String? = null, + var lookml_link_id: String? = null ) : Serializable /** @@ -8465,7 +8466,7 @@ data class WriteDashboardLayout( * @property granular_height Height (granular layout) * @property group_id Id of parent Dashboard Layout Component group */ -data class WriteDashboardLayoutComponent( +data class WriteDashboardLayoutComponent ( var dashboard_layout_id: String? = null, var dashboard_element_id: String? = null, var row: Long? = null, @@ -8477,7 +8478,7 @@ data class WriteDashboardLayoutComponent( var granular_column: Long? = null, var granular_width: Long? = null, var granular_height: Long? = null, - var group_id: String? = null, + var group_id: String? = null ) : Serializable /** @@ -8487,9 +8488,9 @@ data class WriteDashboardLayoutComponent( * @property folder_id (Write-Only) Id of the folder * @property lookml lookml of UDD */ -data class WriteDashboardLookml( +data class WriteDashboardLookml ( var folder_id: String? = null, - var lookml: String? = null, + var lookml: String? = null ) : Serializable /** @@ -8499,9 +8500,9 @@ data class WriteDashboardLookml( * @property stale_before UNIX timestamp before which cache entries are considered stale. Cannot be in the future. * @property triggered_at UNIX timestamp at which this entry became triggered. Cannot be in the future. */ -data class WriteDatagroup( +data class WriteDatagroup ( var stale_before: Long? = null, - var triggered_at: Long? = null, + var triggered_at: Long? = null ) : Serializable /** @@ -8560,7 +8561,7 @@ data class WriteDatagroup( * @property query_holding_disabled Disable query holding for this connection. * @property service_name Service name used for connections with TNS enabled */ -data class WriteDBConnection( +data class WriteDBConnection ( var name: String? = null, var project_id: String? = null, var named_driver_version_requested: String? = null, @@ -8610,7 +8611,7 @@ data class WriteDBConnection( var bq_storage_project_id: String? = null, var bq_roles_verified: Boolean? = null, var query_holding_disabled: Boolean? = null, - var service_name: String? = null, + var service_name: String? = null ) : Serializable /** @@ -8640,7 +8641,7 @@ data class WriteDBConnection( * @property pdt_after_connect_statements SQL statements (semicolon separated) to issue after connecting to the database. Requires `custom_after_connect_statements` license feature (same as after_connect_statements) * @property pdt_service_name Service name used for connections with TNS enabled */ -data class WriteDBConnectionOverride( +data class WriteDBConnectionOverride ( var context: String? = null, var host: String? = null, var pdt_host: String? = null, @@ -8662,7 +8663,7 @@ data class WriteDBConnectionOverride( var pdt_jdbc_additional_params: String? = null, var after_connect_statements: String? = null, var pdt_after_connect_statements: String? = null, - var pdt_service_name: String? = null, + var pdt_service_name: String? = null ) : Serializable /** @@ -8681,7 +8682,7 @@ data class WriteDBConnectionOverride( * @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. */ -data class WriteEmbedConfig( +data class WriteEmbedConfig ( var domain_allowlist: Array? = null, var alert_url_allowlist: Array? = null, var alert_url_param_owner: String? = null, @@ -8692,7 +8693,7 @@ data class WriteEmbedConfig( var embed_content_management: Boolean? = null, var strict_sameorigin_for_login: Boolean? = null, var look_filters: Boolean? = null, - var hide_look_navigation: Boolean? = null, + var hide_look_navigation: Boolean? = null ) : Serializable /** @@ -8703,10 +8704,10 @@ data class WriteEmbedConfig( * @property enabled Is this secret currently enabled * @property secret_type Field to distinguish between SSO secrets and JWT secrets Valid values are: "SSO", "JWT". */ -data class WriteEmbedSecret( +data class WriteEmbedSecret ( var algorithm: String? = null, var enabled: Boolean? = null, - var secret_type: SecretType? = null, + var secret_type: SecretType? = null ) : Serializable /** @@ -8720,13 +8721,13 @@ data class WriteEmbedSecret( * @property dialect_name The database dialect for this application. * @property bi_directional_data_access Whether this application supports bi-directional data access. */ -data class WriteExternalOauthApplication( +data class WriteExternalOauthApplication ( var name: String? = null, var client_id: String? = null, var client_secret: String? = null, var tenant_id: String? = null, var dialect_name: String? = null, - var bi_directional_data_access: Boolean? = null, + var bi_directional_data_access: Boolean? = null ) : Serializable /** @@ -8736,9 +8737,9 @@ data class WriteExternalOauthApplication( * @property name Unique Name * @property parent_id Id of Parent. If the parent id is null, this is a root-level entry */ -data class WriteFolderBase( +data class WriteFolderBase ( var name: String, - var parent_id: String? = null, + var parent_id: String? = null ) : Serializable /** @@ -8748,9 +8749,9 @@ data class WriteFolderBase( * @property name The short name on the local. Updating `name` results in `git checkout ` * @property ref The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. */ -data class WriteGitBranch( +data class WriteGitBranch ( var name: String? = null, - var ref: String? = null, + var ref: String? = null ) : Serializable /** @@ -8760,9 +8761,9 @@ data class WriteGitBranch( * @property questions Variations of the golden question text * @property answer The Explore URL representing the answer to the question */ -data class WriteGoldenQuery( +data class WriteGoldenQuery ( var questions: Array? = null, - var answer: String? = null, + var answer: String? = null ) : Serializable /** @@ -8772,9 +8773,9 @@ data class WriteGoldenQuery( * @property can_add_to_content_metadata Group can be used in content access controls * @property name Name of group */ -data class WriteGroup( +data class WriteGroup ( var can_add_to_content_metadata: Boolean? = null, - var name: String? = null, + var name: String? = null ) : Serializable /** @@ -8785,10 +8786,10 @@ data class WriteGroup( * @property params Array of params for the integration. * @property installed_delegate_oauth_targets Whether the integration is available to users. */ -data class WriteIntegration( +data class WriteIntegration ( var enabled: Boolean? = null, var params: Array? = null, - var installed_delegate_oauth_targets: Array? = null, + var installed_delegate_oauth_targets: Array? = null ) : Serializable /** @@ -8798,9 +8799,9 @@ data class WriteIntegration( * @property url URL of the hub. * @property authorization_token (Write-Only) An authorization key that will be sent to the integration hub on every request. */ -data class WriteIntegrationHub( +data class WriteIntegrationHub ( var url: String? = null, - var authorization_token: String? = null, + var authorization_token: String? = null ) : Serializable /** @@ -8809,8 +8810,8 @@ data class WriteIntegrationHub( * * @property enabled If true and internal help resources content is not blank then the link for internal help resources will be shown in the help menu and the content displayed within Looker */ -data class WriteInternalHelpResources( - var enabled: Boolean? = null, +data class WriteInternalHelpResources ( + var enabled: Boolean? = null ) : Serializable /** @@ -8820,9 +8821,9 @@ data class WriteInternalHelpResources( * @property organization_name Text to display in the help menu item which will display the internal help resources * @property markdown_content Content to be displayed in the internal help resources page/modal */ -data class WriteInternalHelpResourcesContent( +data class WriteInternalHelpResourcesContent ( var organization_name: String? = null, - var markdown_content: String? = null, + var markdown_content: String? = null ) : Serializable /** @@ -8864,7 +8865,7 @@ data class WriteInternalHelpResourcesContent( * @property allow_roles_from_normal_groups LDAP auth'd users will be able to inherit roles from non-reflected Looker groups. * @property allow_direct_roles Allows roles to be directly assigned to LDAP auth'd users. */ -data class WriteLDAPConfig( +data class WriteLDAPConfig ( var alternate_email_login_allowed: Boolean? = null, var auth_password: String? = null, var auth_requires_role: Boolean? = null, @@ -8898,7 +8899,7 @@ data class WriteLDAPConfig( var user_objectclass: String? = null, var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, - var allow_direct_roles: Boolean? = null, + var allow_direct_roles: Boolean? = null ) : Serializable /** @@ -8907,8 +8908,8 @@ data class WriteLDAPConfig( * * @property enabled_locally Whether this feature has been enabled by a user */ -data class WriteLegacyFeature( - var enabled_locally: Boolean? = null, +data class WriteLegacyFeature ( + var enabled_locally: Boolean? = null ) : Serializable /** @@ -8919,9 +8920,9 @@ data class WriteLegacyFeature( * @property certification_metadata Dynamic writeable type for Certification removes: * ui_status, user_name, updated_at */ -data class WriteLookBasic( +data class WriteLookBasic ( var user_id: String? = null, - var certification_metadata: WriteCertification? = null, + var certification_metadata: WriteCertification? = null ) : Serializable /** @@ -8933,11 +8934,11 @@ data class WriteLookBasic( * @property project_name Name of project containing the model * @property unlimited_db_connections Is this model allowed to use all current and future connections */ -data class WriteLookmlModel( +data class WriteLookmlModel ( var allowed_db_connection_names: Array? = null, var name: String? = null, var project_name: String? = null, - var unlimited_db_connections: Boolean? = null, + var unlimited_db_connections: Boolean? = null ) : Serializable /** @@ -8959,7 +8960,7 @@ data class WriteLookmlModel( * @property query Dynamic writeable type for Query removes: * can, id, slug, share_url, expanded_share_url, url, has_table_calculations */ -data class WriteLookWithQuery( +data class WriteLookWithQuery ( var title: String? = null, var user_id: String? = null, var certification_metadata: WriteCertification? = null, @@ -8970,7 +8971,7 @@ data class WriteLookWithQuery( var query_id: String? = null, var folder: WriteFolderBase? = null, var folder_id: String? = null, - var query: WriteQuery? = null, + var query: WriteQuery? = null ) : Serializable /** @@ -9064,7 +9065,7 @@ data class WriteLookWithQuery( * @property render_dashboard Dynamic writeable type for McpToolSetting removes: * description, category, access_level */ -data class WriteMcpTools( +data class WriteMcpTools ( var enable_all: Boolean? = null, var add_dashboard_element: WriteMcpToolSetting? = null, var add_dashboard_filter: WriteMcpToolSetting? = null, @@ -9108,7 +9109,7 @@ data class WriteMcpTools( var run_lookml_tests: WriteMcpToolSetting? = null, var create_view_from_table: WriteMcpToolSetting? = null, var render_visualization: WriteMcpToolSetting? = null, - var render_dashboard: WriteMcpToolSetting? = null, + var render_dashboard: WriteMcpToolSetting? = null ) : Serializable /** @@ -9117,8 +9118,8 @@ data class WriteMcpTools( * * @property enabled Is this tool enabled */ -data class WriteMcpToolSetting( - var enabled: Boolean? = null, +data class WriteMcpToolSetting ( + var enabled: Boolean? = null ) : Serializable /** @@ -9134,7 +9135,7 @@ data class WriteMcpToolSetting( * @property limit Limit * @property vis_config Visualization Config */ -data class WriteMergeQuery( +data class WriteMergeQuery ( var column_limit: String? = null, var dynamic_fields: String? = null, var pivots: Array? = null, @@ -9142,7 +9143,7 @@ data class WriteMergeQuery( var source_queries: Array? = null, var total: Boolean? = null, var limit: String? = null, - var vis_config: Map? = null, + var vis_config: Map? = null ) : Serializable /** @@ -9152,9 +9153,9 @@ data class WriteMergeQuery( * @property device_token Specifies the device token * @property device_type Specifies type of device. Valid values are: "android", "ios". */ -data class WriteMobileToken( +data class WriteMobileToken ( var device_token: String, - var device_type: DeviceType, + var device_type: DeviceType ) : Serializable /** @@ -9164,9 +9165,9 @@ data class WriteMobileToken( * @property models * @property name Name of ModelSet */ -data class WriteModelSet( +data class WriteModelSet ( var models: Array? = null, - var name: String? = null, + var name: String? = null ) : Serializable /** @@ -9180,13 +9181,13 @@ data class WriteModelSet( * @property enabled When enabled is true, OAuth2 and API requests will be accepted from this app. When false, all requests from this app will be refused. Setting disabled invalidates existing tokens. * @property group_id If set, only Looker users who are members of this group can use this web app with Looker. If group_id is not set, any Looker user may use this app to access this Looker instance */ -data class WriteOauthClientApp( +data class WriteOauthClientApp ( var redirect_uri: String? = null, var redirect_uris: Array? = null, var display_name: String? = null, var description: String? = null, var enabled: Boolean? = null, - var group_id: String? = null, + var group_id: String? = null ) : Serializable /** @@ -9218,7 +9219,7 @@ data class WriteOauthClientApp( * @property allow_roles_from_normal_groups OIDC auth'd users will inherit roles from non-reflected Looker groups. * @property allow_direct_roles Allows roles to be directly assigned to OIDC auth'd users. */ -data class WriteOIDCConfig( +data class WriteOIDCConfig ( var alternate_email_login_allowed: Boolean? = null, var audience: String? = null, var auth_requires_role: Boolean? = null, @@ -9242,7 +9243,7 @@ data class WriteOIDCConfig( var userinfo_endpoint: String? = null, var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, - var allow_direct_roles: Boolean? = null, + var allow_direct_roles: Boolean? = null ) : Serializable /** @@ -9256,13 +9257,13 @@ data class WriteOIDCConfig( * @property expiration_enabled Enable/Disable password expiration policy. * @property expiration_duration_days Number of days before passwords expire. Must be between 30 and 365. */ -data class WritePasswordConfig( +data class WritePasswordConfig ( var min_length: Long? = null, var require_numeric: Boolean? = null, var require_upperlower: Boolean? = null, var require_special: Boolean? = null, var expiration_enabled: Boolean? = null, - var expiration_duration_days: Long? = null, + var expiration_duration_days: Long? = null ) : Serializable /** @@ -9272,9 +9273,9 @@ data class WritePasswordConfig( * @property name Name of PermissionSet * @property permissions */ -data class WritePermissionSet( +data class WritePermissionSet ( var name: String? = null, - var permissions: Array? = null, + var permissions: Array? = null ) : Serializable /** @@ -9295,7 +9296,7 @@ data class WritePermissionSet( * @property alerts_links Remove Looker links from Alerts * @property folders_mentions Remove Looker mentions in home folder page when you don’t have any items saved */ -data class WritePrivatelabelConfiguration( +data class WritePrivatelabelConfiguration ( var logo_file: String? = null, var favicon_file: String? = null, var default_title: String? = null, @@ -9308,7 +9309,7 @@ data class WritePrivatelabelConfiguration( var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, - var folders_mentions: Boolean? = null, + var folders_mentions: Boolean? = null ) : Serializable /** @@ -9334,7 +9335,7 @@ data class WritePrivatelabelConfiguration( * @property allow_warnings Validation policy: If true, the project can be committed with warnings when `validation_required` is true. (`allow_warnings` does nothing if `validation_required` is false). * @property dependency_status Status of dependencies in your manifest & lockfile */ -data class WriteProject( +data class WriteProject ( var name: String? = null, var git_remote_url: String? = null, var git_username: String? = null, @@ -9352,7 +9353,7 @@ data class WriteProject( var validation_required: Boolean? = null, var git_release_mgmt_enabled: Boolean? = null, var allow_warnings: Boolean? = null, - var dependency_status: String? = null, + var dependency_status: String? = null ) : Serializable /** @@ -9402,7 +9403,7 @@ data class WriteProject( * @property upstream_trigger_is_enabled Whether the CI suite upstream project imports trigger is active * @property upstream_projects Names of upstream projects subscribed for pull request triggers */ -data class WriteProjectCISuite( +data class WriteProjectCISuite ( var name: String? = null, var schedule_trigger_is_enabled: Boolean? = null, var schedule_trigger_crontab: String? = null, @@ -9444,7 +9445,7 @@ data class WriteProjectCISuite( var sql_validator_config_selectors: Array? = null, var sql_validator_config_exclusions: Array? = null, var upstream_trigger_is_enabled: Boolean? = null, - var upstream_projects: Array? = null, + var upstream_projects: Array? = null ) : Serializable /** @@ -9471,13 +9472,13 @@ data class WriteProjectCISuite( * @property client_id Client Id: used to generate shortened explore URLs. If set by client, must be a unique 22 character alphanumeric string. Otherwise one will be generated. * @property query_timezone Query Timezone */ -data class WriteQuery( +data class WriteQuery ( var model: String, var view: String, var fields: Array? = null, var pivots: Array? = null, var fill_fields: Array? = null, - var filters: Map? = null, + var filters: Map? = null, var filter_expression: String? = null, var sorts: Array? = null, var limit: String? = null, @@ -9485,12 +9486,12 @@ data class WriteQuery( var total: Boolean? = null, var row_total: String? = null, var subtotals: Array? = null, - var vis_config: Map? = null, - var filter_config: Map? = null, + var vis_config: Map? = null, + var filter_config: Map? = null, var visible_ui_sections: String? = null, var dynamic_fields: String? = null, var client_id: String? = null, - var query_timezone: String? = null, + var query_timezone: String? = null ) : Serializable /** @@ -9501,10 +9502,10 @@ data class WriteQuery( * @property git_password (Write-Only) Git password for HTTPS authentication. * @property ssh_public_key Public deploy key for SSH authentication. */ -data class WriteRepositoryCredential( +data class WriteRepositoryCredential ( var git_username: String? = null, var git_password: String? = null, - var ssh_public_key: String? = null, + var ssh_public_key: String? = null ) : Serializable /** @@ -9521,7 +9522,7 @@ data class WriteRepositoryCredential( * can, id, slug, share_url, expanded_share_url, url, has_table_calculations * @property vis_config Vis config of the constituent Query, or Merge Query. */ -data class WriteResultMakerWithIdVisConfigAndDynamicFields( +data class WriteResultMakerWithIdVisConfigAndDynamicFields ( var dynamic_fields: String? = null, var filterables: Array? = null, var sorts: Array? = null, @@ -9529,7 +9530,7 @@ data class WriteResultMakerWithIdVisConfigAndDynamicFields( var total: Boolean? = null, var sql_query_id: String? = null, var query: WriteQuery? = null, - var vis_config: Map? = null, + var vis_config: Map? = null ) : Serializable /** @@ -9544,12 +9545,12 @@ data class WriteResultMakerWithIdVisConfigAndDynamicFields( * can, all_access, built_in, id, url * @property model_set_id (Write-Only) Id of model set */ -data class WriteRole( +data class WriteRole ( var name: String? = null, var permission_set: WritePermissionSet? = null, var permission_set_id: String? = null, var model_set: WriteModelSet? = null, - var model_set_id: String? = null, + var model_set_id: String? = null ) : Serializable /** @@ -9583,7 +9584,7 @@ data class WriteRole( * @property allow_roles_from_normal_groups SAML auth'd users will inherit roles from non-reflected Looker groups. * @property allow_direct_roles Allows roles to be directly assigned to SAML auth'd users. */ -data class WriteSamlConfig( +data class WriteSamlConfig ( var enabled: Boolean? = null, var idp_cert: String? = null, var idp_cert_multi: SamlIdpCertMulti? = null, @@ -9609,7 +9610,7 @@ data class WriteSamlConfig( var bypass_login_page: Boolean? = null, var allow_normal_group_membership: Boolean? = null, var allow_roles_from_normal_groups: Boolean? = null, - var allow_direct_roles: Boolean? = null, + var allow_direct_roles: Boolean? = null ) : Serializable /** @@ -9651,7 +9652,7 @@ data class WriteSamlConfig( * @property inline_table_width The pixel width at which we render the inline table visualizations * @property query_id Query id */ -data class WriteScheduledPlan( +data class WriteScheduledPlan ( var name: String? = null, var user_id: String? = null, var run_as_recipient: Boolean? = null, @@ -9685,7 +9686,7 @@ data class WriteScheduledPlan( var include_filters: Boolean? = null, var tab_ids: Array? = null, var inline_table_width: Long? = null, - var query_id: String? = null, + var query_id: String? = null ) : Serializable /** @@ -9695,9 +9696,9 @@ data class WriteScheduledPlan( * @property service_account_name Display name of the service account. * @property is_disabled Indicates if the service account is disabled */ -data class WriteServiceAccount( +data class WriteServiceAccount ( var service_account_name: String? = null, - var is_disabled: Boolean? = null, + var is_disabled: Boolean? = null ) : Serializable /** @@ -9710,12 +9711,12 @@ data class WriteServiceAccount( * @property use_inactivity_based_logout Enforce session logout for sessions that are inactive for 15 minutes. * @property track_session_location Track location of session when user logs in. */ -data class WriteSessionConfig( +data class WriteSessionConfig ( var allow_persistent_sessions: Boolean? = null, var session_minutes: Long? = null, var unlimited_sessions_per_user: Boolean? = null, var use_inactivity_based_logout: Boolean? = null, - var track_session_location: Boolean? = null, + var track_session_location: Boolean? = null ) : Serializable /** @@ -9753,7 +9754,7 @@ data class WriteSessionConfig( * @property ca_agent_observability Toggle Conversational Analytics Agent Token usage * @property mcp_tools Dynamic writeable type for McpTools */ -data class WriteSetting( +data class WriteSetting ( var extension_framework_enabled: Boolean? = null, var extension_load_url_enabled: Boolean? = null, var marketplace_auto_install_enabled: Boolean? = null, @@ -9781,7 +9782,7 @@ data class WriteSetting( var is_content_certification_enabled: Boolean? = null, var auto_certify_lookml_content: Boolean? = null, var ca_agent_observability: Boolean? = null, - var mcp_tools: WriteMcpTools? = null, + var mcp_tools: WriteMcpTools? = null ) : Serializable /** @@ -9791,9 +9792,9 @@ data class WriteSetting( * @property sql Original SQL request * @property jdbc_client Whether the query should be run for use in a JDBC Client. This changes the formatting of some datetime based values. */ -data class WriteSqlInterfaceQueryCreate( +data class WriteSqlInterfaceQueryCreate ( var sql: String, - var jdbc_client: Boolean? = null, + var jdbc_client: Boolean? = null ) : Serializable /** @@ -9805,11 +9806,11 @@ data class WriteSqlInterfaceQueryCreate( * @property ssh_server_port The port to connect to on the SSH Server * @property ssh_server_user The username used to connect to the SSH Server */ -data class WriteSshServer( +data class WriteSshServer ( var ssh_server_name: String? = null, var ssh_server_host: String? = null, var ssh_server_port: Long? = null, - var ssh_server_user: String? = null, + var ssh_server_user: String? = null ) : Serializable /** @@ -9821,11 +9822,11 @@ data class WriteSshServer( * @property database_host Hostname or IP Address of the Database Server * @property database_port Port that the Database Server is listening on */ -data class WriteSshTunnel( +data class WriteSshTunnel ( var ssh_server_id: String? = null, var local_host_port: Long? = null, var database_host: String? = null, - var database_port: Long? = null, + var database_port: Long? = null ) : Serializable /** @@ -9837,11 +9838,11 @@ data class WriteSshTunnel( * @property name Name of theme. Can only be alphanumeric and underscores. * @property settings */ -data class WriteTheme( +data class WriteTheme ( var begin_at: Date? = null, var end_at: Date? = null, var name: String? = null, - var settings: ThemeSettings? = null, + var settings: ThemeSettings? = null ) : Serializable /** @@ -9859,7 +9860,7 @@ data class WriteTheme( * @property ui_state Per user dictionary of undocumented state information owned by the Looker UI. * @property can_manage_api3_creds Indicates if the user can manage API3 credentials. This is an experimental feature and may not yet be available on your instance. */ -data class WriteUser( +data class WriteUser ( var credentials_email: WriteCredentialsEmail? = null, var first_name: String? = null, var home_folder_id: String? = null, @@ -9867,8 +9868,8 @@ data class WriteUser( var last_name: String? = null, var locale: String? = null, var models_dir_validated: Boolean? = null, - var ui_state: Map? = null, - var can_manage_api3_creds: Boolean? = null, + var ui_state: Map? = null, + var can_manage_api3_creds: Boolean? = null ) : Serializable /** @@ -9886,7 +9887,7 @@ data class WriteUser( * @property needed_for_ci_run Whether this user attribute is needed for a CI run * @property value_for_ci_run The value to use for this user attribute during a CI run */ -data class WriteUserAttribute( +data class WriteUserAttribute ( var name: String, var label: String, var type: String, @@ -9896,7 +9897,7 @@ data class WriteUserAttribute( var user_can_edit: Boolean? = null, var hidden_value_domain_whitelist: String? = null, var needed_for_ci_run: Boolean? = null, - var value_for_ci_run: String? = null, + var value_for_ci_run: String? = null ) : Serializable /** @@ -9905,8 +9906,8 @@ data class WriteUserAttribute( * * @property value Value of attribute for user */ -data class WriteUserAttributeWithValue( - var value: String? = null, +data class WriteUserAttributeWithValue ( + var value: String? = null ) : Serializable /** @@ -9915,8 +9916,8 @@ data class WriteUserAttributeWithValue( * * @property enabled Whether this connection is enabled */ -data class WriteUserDbConnection( - var enabled: Boolean? = null, +data class WriteUserDbConnection ( + var enabled: Boolean? = null ) : Serializable /** @@ -9937,7 +9938,7 @@ data class WriteUserDbConnection( * @property alerts_links Remove Looker links from Alerts * @property folders_mentions Remove Looker mentions in home folder page when you don’t have any items saved */ -data class WriteWhitelabelConfiguration( +data class WriteWhitelabelConfiguration ( var logo_file: String? = null, var favicon_file: String? = null, var default_title: String? = null, @@ -9950,5 +9951,5 @@ data class WriteWhitelabelConfiguration( var setup_mentions: Boolean? = null, var alerts_logo: Boolean? = null, var alerts_links: Boolean? = null, - var folders_mentions: Boolean? = null, -) : Serializable + var folders_mentions: Boolean? = null +) : Serializable \ No newline at end of file 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 efa04c24a..cedb2ba14 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/streams.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/streams.kt @@ -28,6 +28,7 @@ * 529 API methods */ + // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 package com.looker.sdk @@ -36,8 +37,10 @@ import java.util.* class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { + //region Alert: Alert + /** * Follow an alert. * @@ -46,12 +49,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /alerts/{alert_id}/follow -> ByteArray */ fun follow_alert( - alert_id: String, - ): SDKResponse { + alert_id: String + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.post("/alerts/${path_alert_id}/follow", mapOf()) + return this.post("/alerts/${path_alert_id}/follow", mapOf()) } + /** * Unfollow an alert. * @@ -60,12 +64,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /alerts/{alert_id}/follow -> ByteArray */ fun unfollow_alert( - alert_id: String, - ): SDKResponse { + alert_id: String + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.delete("/alerts/${path_alert_id}/follow", mapOf()) + return this.delete("/alerts/${path_alert_id}/follow", mapOf()) } + /** * ### Search Alerts * @@ -92,25 +97,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { condition_met: Boolean? = null, last_run_start: String? = null, last_run_end: String? = null, - all_owners: Boolean? = null, - ): SDKResponse { - return this.get( - "/alerts/search", - mapOf( - "limit" to limit, - "offset" to offset, - "group_by" to group_by, - "fields" to fields, - "disabled" to disabled, - "frequency" to frequency, - "condition_met" to condition_met, - "last_run_start" to last_run_start, - "last_run_end" to last_run_end, - "all_owners" to all_owners, - ), - ) + all_owners: Boolean? = null + ) : SDKResponse { + return this.get("/alerts/search", + mapOf("limit" to limit, + "offset" to offset, + "group_by" to group_by, + "fields" to fields, + "disabled" to disabled, + "frequency" to frequency, + "condition_met" to condition_met, + "last_run_start" to last_run_start, + "last_run_end" to last_run_end, + "all_owners" to all_owners)) } + /** * ### Get an alert by a given alert ID * @@ -119,12 +121,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /alerts/{alert_id} -> ByteArray */ fun get_alert( - alert_id: String, - ): SDKResponse { + alert_id: String + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.get("/alerts/${path_alert_id}", mapOf()) + return this.get("/alerts/${path_alert_id}", mapOf()) } + /** * ### Update an alert * # Required fields: `owner_id`, `field`, `destinations`, `comparison_type`, `threshold`, `cron` @@ -137,12 +140,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_alert( alert_id: String, - body: WriteAlert, - ): SDKResponse { + body: WriteAlert + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.put("/alerts/${path_alert_id}", mapOf(), body) + return this.put("/alerts/${path_alert_id}", mapOf(), body) } + /** * ### Update select alert fields * # Available fields: `owner_id`, `is_disabled`, `disabled_reason`, `is_public`, `threshold`, `enhancements` @@ -155,12 +159,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_alert_field( alert_id: String, - body: AlertPatch, - ): SDKResponse { + body: AlertPatch + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.patch("/alerts/${path_alert_id}", mapOf(), body) + return this.patch("/alerts/${path_alert_id}", mapOf(), body) } + /** * ### Delete an alert by a given alert ID * @@ -169,12 +174,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /alerts/{alert_id} -> ByteArray */ fun delete_alert( - alert_id: String, - ): SDKResponse { + alert_id: String + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.delete("/alerts/${path_alert_id}", mapOf()) + return this.delete("/alerts/${path_alert_id}", mapOf()) } + /** * ### Create a new alert and return details of the newly created object * @@ -217,11 +223,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /alerts -> ByteArray */ fun create_alert( - body: WriteAlert, - ): SDKResponse { - return this.post("/alerts", mapOf(), body) + body: WriteAlert + ) : SDKResponse { + return this.post("/alerts", mapOf(), body) } + /** * ### Enqueue an Alert by ID * @@ -232,15 +239,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun enqueue_alert( alert_id: String, - force: Boolean? = null, - ): SDKResponse { + force: Boolean? = null + ) : SDKResponse { val path_alert_id = encodeParam(alert_id) - return this.post( - "/alerts/${path_alert_id}/enqueue", - mapOf("force" to force), - ) + return this.post("/alerts/${path_alert_id}/enqueue", + mapOf("force" to force)) } + /** * # Alert Notifications. * The endpoint returns all the alert notifications received by the user on email in the past 7 days. It also returns whether the notifications have been read by the user. @@ -252,17 +258,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun alert_notifications( limit: Long? = null, - offset: Long? = null, - ): SDKResponse { - return this.get( - "/alert_notifications", - mapOf( - "limit" to limit, - "offset" to offset, - ), - ) + offset: Long? = null + ) : SDKResponse { + return this.get("/alert_notifications", + mapOf("limit" to limit, + "offset" to offset)) } + /** * # Reads a Notification * The endpoint marks a given alert notification as read by the user, in case it wasn't already read. The AlertNotification model is updated for this purpose. It returns the notification as a response. @@ -272,16 +275,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /alert_notifications/{alert_notification_id} -> ByteArray */ fun read_alert_notification( - alert_notification_id: String, - ): SDKResponse { + alert_notification_id: String + ) : SDKResponse { val path_alert_notification_id = encodeParam(alert_notification_id) - return this.patch("/alert_notifications/${path_alert_notification_id}", mapOf()) + return this.patch("/alert_notifications/${path_alert_notification_id}", mapOf()) } //endregion Alert: Alert //region ApiAuth: API Authentication + /** * ### Present client credentials to obtain an authorization token * @@ -319,20 +323,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun login( client_id: String? = null, - client_secret: String? = null, - ): SDKResponse { - return this.post( - "/login", - mapOf(), - encodeValues( - mapOf( - "client_id" to client_id, - "client_secret" to client_secret, - ), - ), - ) + client_secret: String? = null + ) : SDKResponse { + return this.post("/login", mapOf(), encodeValues( + mapOf("client_id" to client_id, + "client_secret" to client_secret))) } + /** * ### Create an access token that runs as a given user. * @@ -361,25 +359,29 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /login/{user_id} -> ByteArray */ fun login_user( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post("/login/${path_user_id}", mapOf()) + return this.post("/login/${path_user_id}", mapOf()) } + /** * ### Logout of the API and invalidate the current access token. * * DELETE /logout -> ByteArray */ - fun logout(): SDKResponse { - return this.delete("/logout", mapOf()) + fun logout( + + ) : SDKResponse { + return this.delete("/logout", mapOf()) } //endregion ApiAuth: API Authentication //region Artifact: Artifact Storage + /** * Get the maximum configured size of the entire artifact store, and the currently used storage in bytes. * @@ -390,14 +392,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /artifact/usage -> ByteArray */ @JvmOverloads fun artifact_usage( - fields: String? = null, - ): SDKResponse { - return this.get( - "/artifact/usage", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/artifact/usage", + mapOf("fields" to fields)) } + /** * Get all artifact namespaces and the count of artifacts in each namespace * @@ -412,18 +413,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun artifact_namespaces( fields: String? = null, limit: Long? = null, - offset: Long? = null, - ): SDKResponse { - return this.get( - "/artifact/namespaces", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - ), - ) + offset: Long? = null + ) : SDKResponse { + return this.get("/artifact/namespaces", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset)) } + /** * ### Return the value of an artifact * @@ -438,15 +436,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun artifact_value( namespace: String, - key: String? = null, - ): SDKResponse { + key: String? = null + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.get( - "/artifact/${path_namespace}/value", - mapOf("key" to key), - ) + return this.get("/artifact/${path_namespace}/value", + mapOf("key" to key)) } + /** * Remove *all* artifacts from a namespace. Purged artifacts are permanently deleted * @@ -457,12 +454,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /artifact/{namespace}/purge -> ByteArray */ fun purge_artifacts( - namespace: String, - ): SDKResponse { + namespace: String + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.delete("/artifact/${path_namespace}/purge", mapOf()) + return this.delete("/artifact/${path_namespace}/purge", mapOf()) } + /** * ### Search all key/value pairs in a namespace for matching criteria. * @@ -503,24 +501,21 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { max_size: Long? = null, limit: Long? = null, offset: Long? = null, - tally: Boolean? = null, - ): SDKResponse { + tally: Boolean? = null + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.get( - "/artifact/${path_namespace}/search", - mapOf( - "fields" to fields, - "key" to key, - "user_ids" to user_ids, - "min_size" to min_size, - "max_size" to max_size, - "limit" to limit, - "offset" to offset, - "tally" to tally, - ), - ) + return this.get("/artifact/${path_namespace}/search", + mapOf("fields" to fields, + "key" to key, + "user_ids" to user_ids, + "min_size" to min_size, + "max_size" to max_size, + "limit" to limit, + "offset" to offset, + "tally" to tally)) } + /** * ### Get one or more artifacts * @@ -543,21 +538,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, limit: Long? = null, offset: Long? = null, - tally: Boolean? = null, - ): SDKResponse { + tally: Boolean? = null + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.get( - "/artifact/${path_namespace}", - mapOf( - "key" to key, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "tally" to tally, - ), - ) + return this.get("/artifact/${path_namespace}", + mapOf("key" to key, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "tally" to tally)) } + /** * ### Delete one or more artifacts * @@ -572,15 +564,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_artifact( namespace: String, - key: String, - ): SDKResponse { + key: String + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.delete( - "/artifact/${path_namespace}", - mapOf("key" to key), - ) + return this.delete("/artifact/${path_namespace}", + mapOf("key" to key)) } + /** * ### Create or update one or more artifacts * @@ -618,20 +609,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_artifacts( namespace: String, body: Array, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_namespace = encodeParam(namespace) - return this.put( - "/artifacts/${path_namespace}", - mapOf("fields" to fields), - body, - ) + return this.put("/artifacts/${path_namespace}", + mapOf("fields" to fields), body) } //endregion Artifact: Artifact Storage //region Auth: Manage User Authentication Configuration + /** * ### Create an embed secret using the specified information. * @@ -644,11 +633,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /embed_config/secrets -> ByteArray */ @JvmOverloads fun create_embed_secret( - body: WriteEmbedSecret? = null, - ): SDKResponse { - return this.post("/embed_config/secrets", mapOf(), body) + body: WriteEmbedSecret? = null + ) : SDKResponse { + return this.post("/embed_config/secrets", mapOf(), body) } + /** * ### Delete an embed secret. * @@ -659,12 +649,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /embed_config/secrets/{embed_secret_id} -> ByteArray */ fun delete_embed_secret( - embed_secret_id: String, - ): SDKResponse { + embed_secret_id: String + ) : SDKResponse { val path_embed_secret_id = encodeParam(embed_secret_id) - return this.delete("/embed_config/secrets/${path_embed_secret_id}", mapOf()) + return this.delete("/embed_config/secrets/${path_embed_secret_id}", mapOf()) } + /** * ### Create Signed Embed URL * @@ -716,11 +707,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/sso_url -> ByteArray */ fun create_sso_embed_url( - body: EmbedSsoParams, - ): SDKResponse { - return this.post("/embed/sso_url", mapOf(), body) + body: EmbedSsoParams + ) : SDKResponse { + return this.post("/embed/sso_url", mapOf(), body) } + /** * ### Create an Embed URL * @@ -753,11 +745,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/token_url/me -> ByteArray */ fun create_embed_url_as_me( - body: EmbedParams, - ): SDKResponse { - return this.post("/embed/token_url/me", mapOf(), body) + body: EmbedParams + ) : SDKResponse { + return this.post("/embed/token_url/me", mapOf(), body) } + /** * ### Validate a Signed Embed URL * @@ -766,14 +759,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /embed/sso/validate -> ByteArray */ @JvmOverloads fun validate_embed_url( - url: String? = null, - ): SDKResponse { - return this.get( - "/embed/sso/validate", - mapOf("url" to url), - ) + url: String? = null + ) : SDKResponse { + return this.get("/embed/sso/validate", + mapOf("url" to url)) } + /** * ### Acquire a cookieless embed session. * @@ -813,11 +805,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /embed/cookieless_session/acquire -> ByteArray */ fun acquire_embed_cookieless_session( - body: EmbedCookielessSessionAcquire, - ): SDKResponse { - return this.post("/embed/cookieless_session/acquire", mapOf(), body) + body: EmbedCookielessSessionAcquire + ) : SDKResponse { + return this.post("/embed/cookieless_session/acquire", mapOf(), body) } + /** * ### Delete cookieless embed session * @@ -832,12 +825,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /embed/cookieless_session/{session_reference_token} -> ByteArray */ fun delete_embed_cookieless_session( - session_reference_token: String, - ): SDKResponse { + session_reference_token: String + ) : SDKResponse { val path_session_reference_token = encodeParam(session_reference_token) - return this.delete("/embed/cookieless_session/${path_session_reference_token}", mapOf()) + return this.delete("/embed/cookieless_session/${path_session_reference_token}", mapOf()) } + /** * ### Generate api and navigation tokens for a cookieless embed session * @@ -861,11 +855,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /embed/cookieless_session/generate_tokens -> ByteArray */ fun generate_tokens_for_cookieless_session( - body: EmbedCookielessSessionGenerateTokens, - ): SDKResponse { - return this.put("/embed/cookieless_session/generate_tokens", mapOf(), body) + body: EmbedCookielessSessionGenerateTokens + ) : SDKResponse { + return this.put("/embed/cookieless_session/generate_tokens", mapOf(), body) } + /** * ### Get the LDAP configuration. * @@ -888,10 +883,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /ldap_config -> ByteArray */ - fun ldap_config(): SDKResponse { - return this.get("/ldap_config", mapOf()) + fun ldap_config( + + ) : SDKResponse { + return this.get("/ldap_config", mapOf()) } + /** * ### Update the LDAP configuration. * @@ -912,11 +910,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /ldap_config -> ByteArray */ fun update_ldap_config( - body: WriteLDAPConfig, - ): SDKResponse { - return this.patch("/ldap_config", mapOf(), body) + body: WriteLDAPConfig + ) : SDKResponse { + return this.patch("/ldap_config", mapOf(), body) } + /** * ### Test the connection settings for an LDAP configuration. * @@ -944,11 +943,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_connection -> ByteArray */ fun test_ldap_config_connection( - body: WriteLDAPConfig, - ): SDKResponse { - return this.put("/ldap_config/test_connection", mapOf(), body) + body: WriteLDAPConfig + ) : SDKResponse { + return this.put("/ldap_config/test_connection", mapOf(), body) } + /** * ### Test the connection authentication settings for an LDAP configuration. * @@ -978,11 +978,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_auth -> ByteArray */ fun test_ldap_config_auth( - body: WriteLDAPConfig, - ): SDKResponse { - return this.put("/ldap_config/test_auth", mapOf(), body) + body: WriteLDAPConfig + ) : SDKResponse { + return this.put("/ldap_config/test_auth", mapOf(), body) } + /** * ### Test the user authentication settings for an LDAP configuration without authenticating the user. * @@ -1001,11 +1002,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_user_info -> ByteArray */ fun test_ldap_config_user_info( - body: WriteLDAPConfig, - ): SDKResponse { - return this.put("/ldap_config/test_user_info", mapOf(), body) + body: WriteLDAPConfig + ) : SDKResponse { + return this.put("/ldap_config/test_user_info", mapOf(), body) } + /** * ### Test the user authentication settings for an LDAP configuration. * @@ -1024,11 +1026,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /ldap_config/test_user_auth -> ByteArray */ fun test_ldap_config_user_auth( - body: WriteLDAPConfig, - ): SDKResponse { - return this.put("/ldap_config/test_user_auth", mapOf(), body) + body: WriteLDAPConfig + ) : SDKResponse { + return this.put("/ldap_config/test_user_auth", mapOf(), body) } + /** * ### Registers a mobile device. * # Required fields: [:device_token, :device_type] @@ -1038,11 +1041,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /mobile/device -> ByteArray */ fun register_mobile_device( - body: WriteMobileToken, - ): SDKResponse { - return this.post("/mobile/device", mapOf(), body) + body: WriteMobileToken + ) : SDKResponse { + return this.post("/mobile/device", mapOf(), body) } + /** * ### Updates the mobile device registration * @@ -1051,12 +1055,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /mobile/device/{device_id} -> ByteArray */ fun update_mobile_device_registration( - device_id: String, - ): SDKResponse { + device_id: String + ) : SDKResponse { val path_device_id = encodeParam(device_id) - return this.patch("/mobile/device/${path_device_id}", mapOf()) + return this.patch("/mobile/device/${path_device_id}", mapOf()) } + /** * ### Deregister a mobile device. * @@ -1065,12 +1070,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /mobile/device/{device_id} -> ByteArray */ fun deregister_mobile_device( - device_id: String, - ): SDKResponse { + device_id: String + ) : SDKResponse { val path_device_id = encodeParam(device_id) - return this.delete("/mobile/device/${path_device_id}", mapOf()) + return this.delete("/mobile/device/${path_device_id}", mapOf()) } + /** * ### List All OAuth Client Apps * @@ -1085,14 +1091,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /oauth_client_apps -> ByteArray */ @JvmOverloads fun all_oauth_client_apps( - fields: String? = null, - ): SDKResponse { - return this.get( - "/oauth_client_apps", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/oauth_client_apps", + mapOf("fields" to fields)) } + /** * ### Get Oauth Client App * @@ -1105,15 +1110,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun oauth_client_app( client_guid: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.get( - "/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), - ) + return this.get("/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields)) } + /** * ### Register an OAuth2 Client App * @@ -1131,16 +1135,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun register_oauth_client_app( client_guid: String, body: WriteOauthClientApp, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.post( - "/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), - body, - ) + return this.post("/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), body) } + /** * ### Update OAuth2 Client App Details * @@ -1155,16 +1157,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_oauth_client_app( client_guid: String, body: WriteOauthClientApp, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.patch( - "/oauth_client_apps/${path_client_guid}", - mapOf("fields" to fields), - body, - ) + return this.patch("/oauth_client_apps/${path_client_guid}", + mapOf("fields" to fields), body) } + /** * ### Delete OAuth Client App * @@ -1181,12 +1181,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oauth_client_apps/{client_guid} -> ByteArray */ fun delete_oauth_client_app( - client_guid: String, - ): SDKResponse { + client_guid: String + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.delete("/oauth_client_apps/${path_client_guid}", mapOf()) + return this.delete("/oauth_client_apps/${path_client_guid}", mapOf()) } + /** * ### Invalidate All Issued Tokens * @@ -1198,12 +1199,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oauth_client_apps/{client_guid}/tokens -> ByteArray */ fun invalidate_tokens( - client_guid: String, - ): SDKResponse { + client_guid: String + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) - return this.delete("/oauth_client_apps/${path_client_guid}/tokens", mapOf()) + return this.delete("/oauth_client_apps/${path_client_guid}/tokens", mapOf()) } + /** * ### Activate an app for a user * @@ -1222,16 +1224,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun activate_app_user( client_guid: String, user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) val path_user_id = encodeParam(user_id) - return this.post( - "/oauth_client_apps/${path_client_guid}/users/${path_user_id}", - mapOf("fields" to fields), - ) + return this.post("/oauth_client_apps/${path_client_guid}/users/${path_user_id}", + mapOf("fields" to fields)) } + /** * ### Deactivate an app for a user * @@ -1253,16 +1254,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun deactivate_app_user( client_guid: String, user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_client_guid = encodeParam(client_guid) val path_user_id = encodeParam(user_id) - return this.delete( - "/oauth_client_apps/${path_client_guid}/users/${path_user_id}", - mapOf("fields" to fields), - ) + return this.delete("/oauth_client_apps/${path_client_guid}/users/${path_user_id}", + mapOf("fields" to fields)) } + /** * ### Get the OIDC configuration. * @@ -1281,10 +1281,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /oidc_config -> ByteArray */ - fun oidc_config(): SDKResponse { - return this.get("/oidc_config", mapOf()) + fun oidc_config( + + ) : SDKResponse { + return this.get("/oidc_config", mapOf()) } + /** * ### Update the OIDC configuration. * @@ -1303,11 +1306,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /oidc_config -> ByteArray */ fun update_oidc_config( - body: WriteOIDCConfig, - ): SDKResponse { - return this.patch("/oidc_config", mapOf(), body) + body: WriteOIDCConfig + ) : SDKResponse { + return this.patch("/oidc_config", mapOf(), body) } + /** * ### Get a OIDC test configuration by test_slug. * @@ -1318,12 +1322,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /oidc_test_configs/{test_slug} -> ByteArray */ fun oidc_test_config( - test_slug: String, - ): SDKResponse { + test_slug: String + ) : SDKResponse { val path_test_slug = encodeParam(test_slug) - return this.get("/oidc_test_configs/${path_test_slug}", mapOf()) + return this.get("/oidc_test_configs/${path_test_slug}", mapOf()) } + /** * ### Delete a OIDC test configuration. * @@ -1334,12 +1339,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /oidc_test_configs/{test_slug} -> ByteArray */ fun delete_oidc_test_config( - test_slug: String, - ): SDKResponse { + test_slug: String + ) : SDKResponse { val path_test_slug = encodeParam(test_slug) - return this.delete("/oidc_test_configs/${path_test_slug}", mapOf()) + return this.delete("/oidc_test_configs/${path_test_slug}", mapOf()) } + /** * ### Create a OIDC test configuration. * @@ -1350,11 +1356,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /oidc_test_configs -> ByteArray */ fun create_oidc_test_config( - body: WriteOIDCConfig, - ): SDKResponse { - return this.post("/oidc_test_configs", mapOf(), body) + body: WriteOIDCConfig + ) : SDKResponse { + return this.post("/oidc_test_configs", mapOf(), body) } + /** * ### Get password config. * @@ -1362,10 +1369,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /password_config -> ByteArray */ - fun password_config(): SDKResponse { - return this.get("/password_config", mapOf()) + fun password_config( + + ) : SDKResponse { + return this.get("/password_config", mapOf()) } + /** * ### Update password config. * @@ -1376,11 +1386,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /password_config -> ByteArray */ fun update_password_config( - body: WritePasswordConfig, - ): SDKResponse { - return this.patch("/password_config", mapOf(), body) + body: WritePasswordConfig + ) : SDKResponse { + return this.patch("/password_config", mapOf(), body) } + /** * ### Force all credentials_email users to reset their login passwords upon their next login. * @@ -1388,10 +1399,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * PUT /password_config/force_password_reset_at_next_login_for_all_users -> ByteArray */ - fun force_password_reset_at_next_login_for_all_users(): SDKResponse { - return this.put("/password_config/force_password_reset_at_next_login_for_all_users", mapOf()) + fun force_password_reset_at_next_login_for_all_users( + + ) : SDKResponse { + return this.put("/password_config/force_password_reset_at_next_login_for_all_users", mapOf()) } + /** * ### Get the SAML configuration. * @@ -1410,10 +1424,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /saml_config -> ByteArray */ - fun saml_config(): SDKResponse { - return this.get("/saml_config", mapOf()) + fun saml_config( + + ) : SDKResponse { + return this.get("/saml_config", mapOf()) } + /** * ### Update the SAML configuration. * @@ -1432,11 +1449,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /saml_config -> ByteArray */ fun update_saml_config( - body: WriteSamlConfig, - ): SDKResponse { - return this.patch("/saml_config", mapOf(), body) + body: WriteSamlConfig + ) : SDKResponse { + return this.patch("/saml_config", mapOf(), body) } + /** * ### Get a SAML test configuration by test_slug. * @@ -1447,12 +1465,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /saml_test_configs/{test_slug} -> ByteArray */ fun saml_test_config( - test_slug: String, - ): SDKResponse { + test_slug: String + ) : SDKResponse { val path_test_slug = encodeParam(test_slug) - return this.get("/saml_test_configs/${path_test_slug}", mapOf()) + return this.get("/saml_test_configs/${path_test_slug}", mapOf()) } + /** * ### Delete a SAML test configuration. * @@ -1463,12 +1482,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /saml_test_configs/{test_slug} -> ByteArray */ fun delete_saml_test_config( - test_slug: String, - ): SDKResponse { + test_slug: String + ) : SDKResponse { val path_test_slug = encodeParam(test_slug) - return this.delete("/saml_test_configs/${path_test_slug}", mapOf()) + return this.delete("/saml_test_configs/${path_test_slug}", mapOf()) } + /** * ### Create a SAML test configuration. * @@ -1479,11 +1499,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /saml_test_configs -> ByteArray */ fun create_saml_test_config( - body: WriteSamlConfig, - ): SDKResponse { - return this.post("/saml_test_configs", mapOf(), body) + body: WriteSamlConfig + ) : SDKResponse { + return this.post("/saml_test_configs", mapOf(), body) } + /** * ### Parse the given xml as a SAML IdP metadata document and return the result. * @@ -1494,11 +1515,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /parse_saml_idp_metadata -> ByteArray */ fun parse_saml_idp_metadata( - body: String, - ): SDKResponse { - return this.post("/parse_saml_idp_metadata", mapOf(), body) + body: String + ) : SDKResponse { + return this.post("/parse_saml_idp_metadata", mapOf(), body) } + /** * ### Fetch the given url and parse it as a SAML IdP metadata document and return the result. * Note that this requires that the url be public or at least at a location where the Looker instance @@ -1511,20 +1533,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /fetch_and_parse_saml_idp_metadata -> ByteArray */ fun fetch_and_parse_saml_idp_metadata( - body: String, - ): SDKResponse { - return this.post("/fetch_and_parse_saml_idp_metadata", mapOf(), body) + body: String + ) : SDKResponse { + return this.post("/fetch_and_parse_saml_idp_metadata", mapOf(), body) } + /** * ### Get session config. * * GET /session_config -> ByteArray */ - fun session_config(): SDKResponse { - return this.get("/session_config", mapOf()) + fun session_config( + + ) : SDKResponse { + return this.get("/session_config", mapOf()) } + /** * ### Update session config. * @@ -1533,11 +1559,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /session_config -> ByteArray */ fun update_session_config( - body: WriteSessionConfig, - ): SDKResponse { - return this.patch("/session_config", mapOf(), body) + body: WriteSessionConfig + ) : SDKResponse { + return this.patch("/session_config", mapOf(), body) } + /** * ### Get Support Access Allowlist Users * @@ -1550,14 +1577,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /support_access/allowlist -> ByteArray */ @JvmOverloads fun get_support_access_allowlist_entries( - fields: String? = null, - ): SDKResponse { - return this.get( - "/support_access/allowlist", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/support_access/allowlist", + mapOf("fields" to fields)) } + /** * ### Add Support Access Allowlist Users * @@ -1570,11 +1596,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /support_access/allowlist -> ByteArray */ fun add_support_access_allowlist_entries( - body: SupportAccessAddEntries, - ): SDKResponse { - return this.post("/support_access/allowlist", mapOf(), body) + body: SupportAccessAddEntries + ) : SDKResponse { + return this.post("/support_access/allowlist", mapOf(), body) } + /** * ### Delete Support Access Allowlist User * @@ -1587,12 +1614,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /support_access/allowlist/{entry_id} -> ByteArray */ fun delete_support_access_allowlist_entry( - entry_id: String, - ): SDKResponse { + entry_id: String + ) : SDKResponse { val path_entry_id = encodeParam(entry_id) - return this.delete("/support_access/allowlist/${path_entry_id}", mapOf()) + return this.delete("/support_access/allowlist/${path_entry_id}", mapOf()) } + /** * ### Enable Support Access * @@ -1605,11 +1633,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /support_access/enable -> ByteArray */ fun enable_support_access( - body: SupportAccessEnable, - ): SDKResponse { - return this.put("/support_access/enable", mapOf(), body) + body: SupportAccessEnable + ) : SDKResponse { + return this.put("/support_access/enable", mapOf(), body) } + /** * ### Disable Support Access * @@ -1619,10 +1648,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * PUT /support_access/disable -> ByteArray */ - fun disable_support_access(): SDKResponse { - return this.put("/support_access/disable", mapOf()) + fun disable_support_access( + + ) : SDKResponse { + return this.put("/support_access/disable", mapOf()) } + /** * ### Support Access Status * @@ -1632,10 +1664,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /support_access/status -> ByteArray */ - fun support_access_status(): SDKResponse { - return this.get("/support_access/status", mapOf()) + fun support_access_status( + + ) : SDKResponse { + return this.get("/support_access/status", mapOf()) } + /** * ### Get currently locked-out users. * @@ -1644,14 +1679,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /user_login_lockouts -> ByteArray */ @JvmOverloads fun all_user_login_lockouts( - fields: String? = null, - ): SDKResponse { - return this.get( - "/user_login_lockouts", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/user_login_lockouts", + mapOf("fields" to fields)) } + /** * ### Search currently locked-out users. * @@ -1680,26 +1714,23 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { full_name: String? = null, email: String? = null, remote_id: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get( - "/user_login_lockouts/search", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "auth_type" to auth_type, - "full_name" to full_name, - "email" to email, - "remote_id" to remote_id, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get("/user_login_lockouts/search", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "auth_type" to auth_type, + "full_name" to full_name, + "email" to email, + "remote_id" to remote_id, + "filter_or" to filter_or)) } + /** * ### Removes login lockout for the associated user. * @@ -1708,16 +1739,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_login_lockout/{key} -> ByteArray */ fun delete_user_login_lockout( - key: String, - ): SDKResponse { + key: String + ) : SDKResponse { val path_key = encodeParam(key) - return this.delete("/user_login_lockout/${path_key}", mapOf()) + return this.delete("/user_login_lockout/${path_key}", mapOf()) } //endregion Auth: Manage User Authentication Configuration //region Board: Manage Boards + /** * ### Get information about all boards. * @@ -1726,14 +1758,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /boards -> ByteArray */ @JvmOverloads fun all_boards( - fields: String? = null, - ): SDKResponse { - return this.get( - "/boards", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/boards", + mapOf("fields" to fields)) } + /** * ### Create a new board. * @@ -1744,15 +1775,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board( body: WriteBoard, - fields: String? = null, - ): SDKResponse { - return this.post( - "/boards", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/boards", + mapOf("fields" to fields), body) } + /** * ### Search Boards * @@ -1808,29 +1837,26 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, limit: Long? = null, filter_or: Boolean? = null, - permission: String? = null, - ): SDKResponse { - return this.get( - "/boards/search", - mapOf( - "title" to title, - "created_at" to created_at, - "first_name" to first_name, - "last_name" to last_name, - "fields" to fields, - "favorited" to favorited, - "creator_id" to creator_id, - "sorts" to sorts, - "page" to page, - "per_page" to per_page, - "offset" to offset, - "limit" to limit, - "filter_or" to filter_or, - "permission" to permission, - ), - ) + permission: String? = null + ) : SDKResponse { + return this.get("/boards/search", + mapOf("title" to title, + "created_at" to created_at, + "first_name" to first_name, + "last_name" to last_name, + "fields" to fields, + "favorited" to favorited, + "creator_id" to creator_id, + "sorts" to sorts, + "page" to page, + "per_page" to per_page, + "offset" to offset, + "limit" to limit, + "filter_or" to filter_or, + "permission" to permission)) } + /** * ### Get information about a board. * @@ -1841,15 +1867,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board( board_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_id = encodeParam(board_id) - return this.get( - "/boards/${path_board_id}", - mapOf("fields" to fields), - ) + return this.get("/boards/${path_board_id}", + mapOf("fields" to fields)) } + /** * ### Update a board definition. * @@ -1862,16 +1887,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board( board_id: String, body: WriteBoard, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_id = encodeParam(board_id) - return this.patch( - "/boards/${path_board_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/boards/${path_board_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a board. * @@ -1880,12 +1903,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /boards/{board_id} -> ByteArray */ fun delete_board( - board_id: String, - ): SDKResponse { + board_id: String + ) : SDKResponse { val path_board_id = encodeParam(board_id) - return this.delete("/boards/${path_board_id}", mapOf()) + return this.delete("/boards/${path_board_id}", mapOf()) } + /** * ### Get information about all board items. * @@ -1898,18 +1922,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_board_items( fields: String? = null, sorts: String? = null, - board_section_id: String? = null, - ): SDKResponse { - return this.get( - "/board_items", - mapOf( - "fields" to fields, - "sorts" to sorts, - "board_section_id" to board_section_id, - ), - ) + board_section_id: String? = null + ) : SDKResponse { + return this.get("/board_items", + mapOf("fields" to fields, + "sorts" to sorts, + "board_section_id" to board_section_id)) } + /** * ### Create a new board item. * @@ -1920,15 +1941,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board_item( body: WriteBoardItem, - fields: String? = null, - ): SDKResponse { - return this.post( - "/board_items", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/board_items", + mapOf("fields" to fields), body) } + /** * ### Get information about a board item. * @@ -1939,15 +1958,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board_item( board_item_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.get( - "/board_items/${path_board_item_id}", - mapOf("fields" to fields), - ) + return this.get("/board_items/${path_board_item_id}", + mapOf("fields" to fields)) } + /** * ### Update a board item definition. * @@ -1960,16 +1978,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board_item( board_item_id: String, body: WriteBoardItem, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.patch( - "/board_items/${path_board_item_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/board_items/${path_board_item_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a board item. * @@ -1978,12 +1994,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /board_items/{board_item_id} -> ByteArray */ fun delete_board_item( - board_item_id: String, - ): SDKResponse { + board_item_id: String + ) : SDKResponse { val path_board_item_id = encodeParam(board_item_id) - return this.delete("/board_items/${path_board_item_id}", mapOf()) + return this.delete("/board_items/${path_board_item_id}", mapOf()) } + /** * ### Get information about all board sections. * @@ -1994,17 +2011,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_board_sections( fields: String? = null, - sorts: String? = null, - ): SDKResponse { - return this.get( - "/board_sections", - mapOf( - "fields" to fields, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get("/board_sections", + mapOf("fields" to fields, + "sorts" to sorts)) } + /** * ### Create a new board section. * @@ -2015,15 +2029,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_board_section( body: WriteBoardSection, - fields: String? = null, - ): SDKResponse { - return this.post( - "/board_sections", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/board_sections", + mapOf("fields" to fields), body) } + /** * ### Get information about a board section. * @@ -2034,15 +2046,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun board_section( board_section_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.get( - "/board_sections/${path_board_section_id}", - mapOf("fields" to fields), - ) + return this.get("/board_sections/${path_board_section_id}", + mapOf("fields" to fields)) } + /** * ### Update a board section definition. * @@ -2055,16 +2066,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_board_section( board_section_id: String, body: WriteBoardSection, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.patch( - "/board_sections/${path_board_section_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/board_sections/${path_board_section_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a board section. * @@ -2073,16 +2082,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /board_sections/{board_section_id} -> ByteArray */ fun delete_board_section( - board_section_id: String, - ): SDKResponse { + board_section_id: String + ) : SDKResponse { val path_board_section_id = encodeParam(board_section_id) - return this.delete("/board_sections/${path_board_section_id}", mapOf()) + return this.delete("/board_sections/${path_board_section_id}", mapOf()) } //endregion Board: Manage Boards //region ColorCollection: Manage Color Collections + /** * ### Get an array of all existing Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2098,14 +2108,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections -> ByteArray */ @JvmOverloads fun all_color_collections( - fields: String? = null, - ): SDKResponse { - return this.get( - "/color_collections", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/color_collections", + mapOf("fields" to fields)) } + /** * ### Create a custom color collection with the specified information * @@ -2122,11 +2131,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /color_collections -> ByteArray */ fun create_color_collection( - body: WriteColorCollection, - ): SDKResponse { - return this.post("/color_collections", mapOf(), body) + body: WriteColorCollection + ) : SDKResponse { + return this.post("/color_collections", mapOf(), body) } + /** * ### Get an array of all existing **Custom** Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2140,14 +2150,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections/custom -> ByteArray */ @JvmOverloads fun color_collections_custom( - fields: String? = null, - ): SDKResponse { - return this.get( - "/color_collections/custom", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/color_collections/custom", + mapOf("fields" to fields)) } + /** * ### Get an array of all existing **Standard** Color Collections * Get a **single** color collection by id with [ColorCollection](#!/ColorCollection/color_collection) @@ -2161,14 +2170,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /color_collections/standard -> ByteArray */ @JvmOverloads fun color_collections_standard( - fields: String? = null, - ): SDKResponse { - return this.get( - "/color_collections/standard", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/color_collections/standard", + mapOf("fields" to fields)) } + /** * ### Get the default color collection * @@ -2178,10 +2186,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /color_collections/default -> ByteArray */ - fun default_color_collection(): SDKResponse { - return this.get("/color_collections/default", mapOf()) + fun default_color_collection( + + ) : SDKResponse { + return this.get("/color_collections/default", mapOf()) } + /** * ### Set the global default Color Collection by ID * @@ -2193,14 +2204,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /color_collections/default -> ByteArray */ fun set_default_color_collection( - collection_id: String, - ): SDKResponse { - return this.put( - "/color_collections/default", - mapOf("collection_id" to collection_id), - ) + collection_id: String + ) : SDKResponse { + return this.put("/color_collections/default", + mapOf("collection_id" to collection_id)) } + /** * ### Get a Color Collection by ID * @@ -2220,15 +2230,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun color_collection( collection_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_collection_id = encodeParam(collection_id) - return this.get( - "/color_collections/${path_collection_id}", - mapOf("fields" to fields), - ) + return this.get("/color_collections/${path_collection_id}", + mapOf("fields" to fields)) } + /** * ### Update a custom color collection by id. * **Note**: Only an API user with the Admin role can call this endpoint. Unauthorized requests will return `Not Found` (404) errors. @@ -2240,12 +2249,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_color_collection( collection_id: String, - body: WriteColorCollection, - ): SDKResponse { + body: WriteColorCollection + ) : SDKResponse { val path_collection_id = encodeParam(collection_id) - return this.patch("/color_collections/${path_collection_id}", mapOf(), body) + return this.patch("/color_collections/${path_collection_id}", mapOf(), body) } + /** * ### Delete a custom color collection by id * @@ -2261,25 +2271,29 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /color_collections/{collection_id} -> ByteArray */ fun delete_color_collection( - collection_id: String, - ): SDKResponse { + collection_id: String + ) : SDKResponse { val path_collection_id = encodeParam(collection_id) - return this.delete("/color_collections/${path_collection_id}", mapOf()) + return this.delete("/color_collections/${path_collection_id}", mapOf()) } //endregion ColorCollection: Manage Color Collections //region Config: Manage General Configuration + /** * Get the current Cloud Storage Configuration. * * GET /cloud_storage -> ByteArray */ - fun cloud_storage_configuration(): SDKResponse { - return this.get("/cloud_storage", mapOf()) + fun cloud_storage_configuration( + + ) : SDKResponse { + return this.get("/cloud_storage", mapOf()) } + /** * Update the current Cloud Storage Configuration. * @@ -2288,21 +2302,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /cloud_storage -> ByteArray */ fun update_cloud_storage_configuration( - body: WriteBackupConfiguration, - ): SDKResponse { - return this.patch("/cloud_storage", mapOf(), body) + body: WriteBackupConfiguration + ) : SDKResponse { + return this.patch("/cloud_storage", mapOf(), body) } + /** * ### Get the current status and content of custom welcome emails * * GET /custom_welcome_email -> ByteArray */ @Deprecated(message = "Deprecated method") - fun custom_welcome_email(): SDKResponse { - return this.get("/custom_welcome_email", mapOf()) + fun custom_welcome_email( + + ) : SDKResponse { + return this.get("/custom_welcome_email", mapOf()) } + /** * Update custom welcome email setting and values. Optionally send a test email with the new content to the currently logged in user. * @@ -2312,18 +2330,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /custom_welcome_email -> ByteArray */ @Deprecated(message = "Deprecated method") - @JvmOverloads - fun update_custom_welcome_email( + @JvmOverloads fun update_custom_welcome_email( body: CustomWelcomeEmail, - send_test_welcome_email: Boolean? = null, - ): SDKResponse { - return this.patch( - "/custom_welcome_email", - mapOf("send_test_welcome_email" to send_test_welcome_email), - body, - ) + send_test_welcome_email: Boolean? = null + ) : SDKResponse { + return this.patch("/custom_welcome_email", + mapOf("send_test_welcome_email" to send_test_welcome_email), body) } + /** * Requests to this endpoint will send a welcome email with the custom content provided in the body to the currently logged in user. * @@ -2332,20 +2347,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PUT /custom_welcome_email_test -> ByteArray */ fun update_custom_welcome_email_test( - body: WelcomeEmailTest, - ): SDKResponse { - return this.put("/custom_welcome_email_test", mapOf(), body) + body: WelcomeEmailTest + ) : SDKResponse { + return this.put("/custom_welcome_email_test", mapOf(), body) } + /** * ### Retrieve the value for whether or not digest emails is enabled * * GET /digest_emails_enabled -> ByteArray */ - fun digest_emails_enabled(): SDKResponse { - return this.get("/digest_emails_enabled", mapOf()) + fun digest_emails_enabled( + + ) : SDKResponse { + return this.get("/digest_emails_enabled", mapOf()) } + /** * ### Update the setting for enabling/disabling digest emails * @@ -2354,11 +2373,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /digest_emails_enabled -> ByteArray */ fun update_digest_emails_enabled( - body: DigestEmails, - ): SDKResponse { - return this.patch("/digest_emails_enabled", mapOf(), body) + body: DigestEmails + ) : SDKResponse { + return this.patch("/digest_emails_enabled", mapOf(), body) } + /** * ### Trigger the generation of digest email records and send them to Looker's internal system. This does not send * any actual emails, it generates records containing content which may be of interest for users who have become inactive. @@ -2366,10 +2386,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * POST /digest_email_send -> ByteArray */ - fun create_digest_email_send(): SDKResponse { - return this.post("/digest_email_send", mapOf()) + fun create_digest_email_send( + + ) : SDKResponse { + return this.post("/digest_email_send", mapOf()) } + /** * ### Get Egress IP Addresses * @@ -2379,19 +2402,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /public_egress_ip_addresses -> ByteArray */ - fun public_egress_ip_addresses(): SDKResponse { - return this.get("/public_egress_ip_addresses", mapOf()) + fun public_egress_ip_addresses( + + ) : SDKResponse { + return this.get("/public_egress_ip_addresses", mapOf()) } + /** * ### Set the menu item name and content for internal help resources * * GET /internal_help_resources_content -> ByteArray */ - fun internal_help_resources_content(): SDKResponse { - return this.get("/internal_help_resources_content", mapOf()) + fun internal_help_resources_content( + + ) : SDKResponse { + return this.get("/internal_help_resources_content", mapOf()) } + /** * Update internal help resources content * @@ -2400,20 +2429,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /internal_help_resources_content -> ByteArray */ fun update_internal_help_resources_content( - body: WriteInternalHelpResourcesContent, - ): SDKResponse { - return this.patch("/internal_help_resources_content", mapOf(), body) + body: WriteInternalHelpResourcesContent + ) : SDKResponse { + return this.patch("/internal_help_resources_content", mapOf(), body) } + /** * ### Get and set the options for internal help resources * * GET /internal_help_resources_enabled -> ByteArray */ - fun internal_help_resources(): SDKResponse { - return this.get("/internal_help_resources_enabled", mapOf()) + fun internal_help_resources( + + ) : SDKResponse { + return this.get("/internal_help_resources_enabled", mapOf()) } + /** * Update internal help resources settings * @@ -2422,11 +2455,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /internal_help_resources -> ByteArray */ fun update_internal_help_resources( - body: WriteInternalHelpResources, - ): SDKResponse { - return this.patch("/internal_help_resources", mapOf(), body) + body: WriteInternalHelpResources + ) : SDKResponse { + return this.patch("/internal_help_resources", mapOf(), body) } + /** * ### Get all legacy features. * @@ -2434,10 +2468,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /legacy_features -> ByteArray */ - fun all_legacy_features(): SDKResponse { - return this.get("/legacy_features", mapOf()) + fun all_legacy_features( + + ) : SDKResponse { + return this.get("/legacy_features", mapOf()) } + /** * ### Get information about the legacy feature with a specific id. * @@ -2448,12 +2485,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /legacy_features/{legacy_feature_id} -> ByteArray */ fun legacy_feature( - legacy_feature_id: String, - ): SDKResponse { + legacy_feature_id: String + ) : SDKResponse { val path_legacy_feature_id = encodeParam(legacy_feature_id) - return this.get("/legacy_features/${path_legacy_feature_id}", mapOf()) + return this.get("/legacy_features/${path_legacy_feature_id}", mapOf()) } + /** * ### Update information about the legacy feature with a specific id. * @@ -2466,30 +2504,37 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_legacy_feature( legacy_feature_id: String, - body: WriteLegacyFeature, - ): SDKResponse { + body: WriteLegacyFeature + ) : SDKResponse { val path_legacy_feature_id = encodeParam(legacy_feature_id) - return this.patch("/legacy_features/${path_legacy_feature_id}", mapOf(), body) + return this.patch("/legacy_features/${path_legacy_feature_id}", mapOf(), body) } + /** * ### Get a list of locales that Looker supports. * * GET /locales -> ByteArray */ - fun all_locales(): SDKResponse { - return this.get("/locales", mapOf()) + fun all_locales( + + ) : SDKResponse { + return this.get("/locales", mapOf()) } + /** * ### Get all mobile settings. * * GET /mobile/settings -> ByteArray */ - fun mobile_settings(): SDKResponse { - return this.get("/mobile/settings", mapOf()) + fun mobile_settings( + + ) : SDKResponse { + return this.get("/mobile/settings", mapOf()) } + /** * ### Get Looker Settings * @@ -2529,14 +2574,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /setting -> ByteArray */ @JvmOverloads fun get_setting( - fields: String? = null, - ): SDKResponse { - return this.get( - "/setting", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/setting", + mapOf("fields" to fields)) } + /** * ### Configure Looker Settings * @@ -2582,15 +2626,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun set_setting( body: WriteSetting, - fields: String? = null, - ): SDKResponse { - return this.patch( - "/setting", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.patch("/setting", + mapOf("fields" to fields), body) } + /** * ### Configure SMTP Settings * This API allows users to configure the SMTP settings on the Looker instance. @@ -2601,11 +2643,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /smtp_settings -> ByteArray */ fun set_smtp_settings( - body: SmtpSettings, - ): SDKResponse { - return this.post("/smtp_settings", mapOf(), body) + body: SmtpSettings + ) : SDKResponse { + return this.post("/smtp_settings", mapOf(), body) } + /** * ### Get current SMTP status. * @@ -2614,23 +2657,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /smtp_status -> ByteArray */ @JvmOverloads fun smtp_status( - fields: String? = null, - ): SDKResponse { - return this.get( - "/smtp_status", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/smtp_status", + mapOf("fields" to fields)) } + /** * ### Get a list of timezones that Looker supports (e.g. useful for scheduling tasks). * * GET /timezones -> ByteArray */ - fun all_timezones(): SDKResponse { - return this.get("/timezones", mapOf()) + fun all_timezones( + + ) : SDKResponse { + return this.get("/timezones", mapOf()) } + /** * ### Get information about all API versions supported by this Looker instance. * @@ -2639,14 +2684,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /versions -> ByteArray */ @JvmOverloads fun versions( - fields: String? = null, - ): SDKResponse { - return this.get( - "/versions", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/versions", + mapOf("fields" to fields)) } + /** * ### Get an API specification for this Looker instance. * @@ -2659,13 +2703,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun api_spec( api_version: String, - specification: String, - ): SDKResponse { + specification: String + ) : SDKResponse { val path_api_version = encodeParam(api_version) val path_specification = encodeParam(specification) - return this.get("/api_spec/${path_api_version}/${path_specification}", mapOf()) + return this.get("/api_spec/${path_api_version}/${path_specification}", mapOf()) } + /** * ### This feature is enabled only by special license. * @@ -2678,16 +2723,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /whitelabel_configuration -> ByteArray */ @Deprecated(message = "Deprecated method") - @JvmOverloads - fun whitelabel_configuration( - fields: String? = null, - ): SDKResponse { - return this.get( - "/whitelabel_configuration", - mapOf("fields" to fields), - ) + @JvmOverloads fun whitelabel_configuration( + fields: String? = null + ) : SDKResponse { + return this.get("/whitelabel_configuration", + mapOf("fields" to fields)) } + /** * ### Update the private label configuration * @@ -2699,15 +2742,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @Deprecated(message = "Deprecated method") fun update_whitelabel_configuration( - body: WriteWhitelabelConfiguration, - ): SDKResponse { - return this.put("/whitelabel_configuration", mapOf(), body) + body: WriteWhitelabelConfiguration + ) : SDKResponse { + return this.put("/whitelabel_configuration", mapOf(), body) } //endregion Config: Manage General Configuration //region Connection: Manage Database Connections + /** * ### Get information about all connections. * @@ -2716,14 +2760,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /connections -> ByteArray */ @JvmOverloads fun all_connections( - fields: String? = null, - ): SDKResponse { - return this.get( - "/connections", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/connections", + mapOf("fields" to fields)) } + /** * ### Create a connection using the specified configuration. * @@ -2732,11 +2775,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /connections -> ByteArray */ fun create_connection( - body: WriteDBConnection, - ): SDKResponse { - return this.post("/connections", mapOf(), body) + body: WriteDBConnection + ) : SDKResponse { + return this.post("/connections", mapOf(), body) } + /** * ### Get information about a connection. * @@ -2747,15 +2791,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun connection( connection_name: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get( - "/connections/${path_connection_name}", - mapOf("fields" to fields), - ) + return this.get("/connections/${path_connection_name}", + mapOf("fields" to fields)) } + /** * ### Update a connection using the specified configuration. * @@ -2766,12 +2809,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_connection( connection_name: String, - body: WriteDBConnection, - ): SDKResponse { + body: WriteDBConnection + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.patch("/connections/${path_connection_name}", mapOf(), body) + return this.patch("/connections/${path_connection_name}", mapOf(), body) } + /** * ### Delete a connection. * @@ -2780,12 +2824,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /connections/{connection_name} -> ByteArray */ fun delete_connection( - connection_name: String, - ): SDKResponse { + connection_name: String + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.delete("/connections/${path_connection_name}", mapOf()) + return this.delete("/connections/${path_connection_name}", mapOf()) } + /** * ### Delete a connection override. * @@ -2796,13 +2841,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_connection_override( connection_name: String, - override_context: String, - ): SDKResponse { + override_context: String + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) val path_override_context = encodeParam(override_context) - return this.delete("/connections/${path_connection_name}/connection_override/${path_override_context}", mapOf()) + return this.delete("/connections/${path_connection_name}/connection_override/${path_override_context}", mapOf()) } + /** * ### Test an existing connection. * @@ -2820,15 +2866,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun test_connection( connection_name: String, - tests: DelimArray? = null, - ): SDKResponse { + tests: DelimArray? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.put( - "/connections/${path_connection_name}/test", - mapOf("tests" to tests), - ) + return this.put("/connections/${path_connection_name}/test", + mapOf("tests" to tests)) } + /** * ### Test a connection configuration. * @@ -2846,15 +2891,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun test_connection_config( body: WriteDBConnection, - tests: DelimArray? = null, - ): SDKResponse { - return this.put( - "/connections/test", - mapOf("tests" to tests), - body, - ) + tests: DelimArray? = null + ) : SDKResponse { + return this.put("/connections/test", + mapOf("tests" to tests), body) } + /** * ### Get information about all dialects. * @@ -2863,14 +2906,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dialect_info -> ByteArray */ @JvmOverloads fun all_dialect_infos( - fields: String? = null, - ): SDKResponse { - return this.get( - "/dialect_info", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/dialect_info", + mapOf("fields" to fields)) } + /** * ### Get all External OAuth Applications. * @@ -2883,17 +2925,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_external_oauth_applications( name: String? = null, - client_id: String? = null, - ): SDKResponse { - return this.get( - "/external_oauth_applications", - mapOf( - "name" to name, - "client_id" to client_id, - ), - ) + client_id: String? = null + ) : SDKResponse { + return this.get("/external_oauth_applications", + mapOf("name" to name, + "client_id" to client_id)) } + /** * ### Create an OAuth Application using the specified configuration. * @@ -2904,11 +2943,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /external_oauth_applications -> ByteArray */ fun create_external_oauth_application( - body: WriteExternalOauthApplication, - ): SDKResponse { - return this.post("/external_oauth_applications", mapOf(), body) + body: WriteExternalOauthApplication + ) : SDKResponse { + return this.post("/external_oauth_applications", mapOf(), body) } + /** * ### Update an OAuth Application's client secret. * @@ -2921,12 +2961,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_external_oauth_application( client_id: String, - body: WriteExternalOauthApplication, - ): SDKResponse { + body: WriteExternalOauthApplication + ) : SDKResponse { val path_client_id = encodeParam(client_id) - return this.patch("/external_oauth_applications/${path_client_id}", mapOf(), body) + return this.patch("/external_oauth_applications/${path_client_id}", mapOf(), body) } + /** * ### Delete an OAuth Application. * @@ -2937,12 +2978,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /external_oauth_applications/{client_id} -> ByteArray */ fun delete_external_oauth_application( - client_id: String, - ): SDKResponse { + client_id: String + ) : SDKResponse { val path_client_id = encodeParam(client_id) - return this.delete("/external_oauth_applications/${path_client_id}", mapOf()) + return this.delete("/external_oauth_applications/${path_client_id}", mapOf()) } + /** * ### Create OAuth User state. * @@ -2951,11 +2993,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /external_oauth_applications/user_state -> ByteArray */ fun create_oauth_application_user_state( - body: CreateOAuthApplicationUserStateRequest, - ): SDKResponse { - return this.post("/external_oauth_applications/user_state", mapOf(), body) + body: CreateOAuthApplicationUserStateRequest + ) : SDKResponse { + return this.post("/external_oauth_applications/user_state", mapOf(), body) } + /** * ### Get information about all SSH Servers. * @@ -2964,14 +3007,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_servers -> ByteArray */ @JvmOverloads fun all_ssh_servers( - fields: String? = null, - ): SDKResponse { - return this.get( - "/ssh_servers", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/ssh_servers", + mapOf("fields" to fields)) } + /** * ### Create an SSH Server. * @@ -2980,11 +3022,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /ssh_servers -> ByteArray */ fun create_ssh_server( - body: WriteSshServer, - ): SDKResponse { - return this.post("/ssh_servers", mapOf(), body) + body: WriteSshServer + ) : SDKResponse { + return this.post("/ssh_servers", mapOf(), body) } + /** * ### Get information about an SSH Server. * @@ -2993,12 +3036,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_server/{ssh_server_id} -> ByteArray */ fun ssh_server( - ssh_server_id: String, - ): SDKResponse { + ssh_server_id: String + ) : SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) - return this.get("/ssh_server/${path_ssh_server_id}", mapOf()) + return this.get("/ssh_server/${path_ssh_server_id}", mapOf()) } + /** * ### Update an SSH Server. * @@ -3009,12 +3053,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_ssh_server( ssh_server_id: String, - body: WriteSshServer, - ): SDKResponse { + body: WriteSshServer + ) : SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) - return this.patch("/ssh_server/${path_ssh_server_id}", mapOf(), body) + return this.patch("/ssh_server/${path_ssh_server_id}", mapOf(), body) } + /** * ### Delete an SSH Server. * @@ -3023,12 +3068,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /ssh_server/{ssh_server_id} -> ByteArray */ fun delete_ssh_server( - ssh_server_id: String, - ): SDKResponse { + ssh_server_id: String + ) : SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) - return this.delete("/ssh_server/${path_ssh_server_id}", mapOf()) + return this.delete("/ssh_server/${path_ssh_server_id}", mapOf()) } + /** * ### Test the SSH Server * @@ -3037,12 +3083,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_server/{ssh_server_id}/test -> ByteArray */ fun test_ssh_server( - ssh_server_id: String, - ): SDKResponse { + ssh_server_id: String + ) : SDKResponse { val path_ssh_server_id = encodeParam(ssh_server_id) - return this.get("/ssh_server/${path_ssh_server_id}/test", mapOf()) + return this.get("/ssh_server/${path_ssh_server_id}/test", mapOf()) } + /** * ### Get information about all SSH Tunnels. * @@ -3051,14 +3098,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnels -> ByteArray */ @JvmOverloads fun all_ssh_tunnels( - fields: String? = null, - ): SDKResponse { - return this.get( - "/ssh_tunnels", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/ssh_tunnels", + mapOf("fields" to fields)) } + /** * ### Create an SSH Tunnel * @@ -3067,11 +3113,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /ssh_tunnels -> ByteArray */ fun create_ssh_tunnel( - body: WriteSshTunnel, - ): SDKResponse { - return this.post("/ssh_tunnels", mapOf(), body) + body: WriteSshTunnel + ) : SDKResponse { + return this.post("/ssh_tunnels", mapOf(), body) } + /** * ### Get information about an SSH Tunnel. * @@ -3080,12 +3127,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnel/{ssh_tunnel_id} -> ByteArray */ fun ssh_tunnel( - ssh_tunnel_id: String, - ): SDKResponse { + ssh_tunnel_id: String + ) : SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) - return this.get("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) + return this.get("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) } + /** * ### Update an SSH Tunnel * @@ -3096,12 +3144,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_ssh_tunnel( ssh_tunnel_id: String, - body: WriteSshTunnel, - ): SDKResponse { + body: WriteSshTunnel + ) : SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) - return this.patch("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf(), body) + return this.patch("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf(), body) } + /** * ### Delete an SSH Tunnel * @@ -3110,12 +3159,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /ssh_tunnel/{ssh_tunnel_id} -> ByteArray */ fun delete_ssh_tunnel( - ssh_tunnel_id: String, - ): SDKResponse { + ssh_tunnel_id: String + ) : SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) - return this.delete("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) + return this.delete("/ssh_tunnel/${path_ssh_tunnel_id}", mapOf()) } + /** * ### Test the SSH Tunnel * @@ -3124,12 +3174,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /ssh_tunnel/{ssh_tunnel_id}/test -> ByteArray */ fun test_ssh_tunnel( - ssh_tunnel_id: String, - ): SDKResponse { + ssh_tunnel_id: String + ) : SDKResponse { val path_ssh_tunnel_id = encodeParam(ssh_tunnel_id) - return this.get("/ssh_tunnel/${path_ssh_tunnel_id}/test", mapOf()) + return this.get("/ssh_tunnel/${path_ssh_tunnel_id}/test", mapOf()) } + /** * ### Get the SSH public key * @@ -3137,10 +3188,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /ssh_public_key -> ByteArray */ - fun ssh_public_key(): SDKResponse { - return this.get("/ssh_public_key", mapOf()) + fun ssh_public_key( + + ) : SDKResponse { + return this.get("/ssh_public_key", mapOf()) } + /** * ### Get All User DB Connections * @@ -3151,14 +3205,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /user_db_connections -> ByteArray */ @JvmOverloads fun all_user_db_connections( - fields: String? = null, - ): SDKResponse { - return this.get( - "/user_db_connections", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/user_db_connections", + mapOf("fields" to fields)) } + /** * ### Update User DB Connection * @@ -3171,12 +3224,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_user_db_connection( user_db_connection_id: String, - body: WriteUserDbConnection, - ): SDKResponse { + body: WriteUserDbConnection + ) : SDKResponse { val path_user_db_connection_id = encodeParam(user_db_connection_id) - return this.patch("/user_db_connections/${path_user_db_connection_id}", mapOf(), body) + return this.patch("/user_db_connections/${path_user_db_connection_id}", mapOf(), body) } + /** * ### Delete User DB Connection * @@ -3187,16 +3241,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_db_connections/{user_db_connection_id} -> ByteArray */ fun delete_user_db_connection( - user_db_connection_id: String, - ): SDKResponse { + user_db_connection_id: String + ) : SDKResponse { val path_user_db_connection_id = encodeParam(user_db_connection_id) - return this.delete("/user_db_connections/${path_user_db_connection_id}", mapOf()) + return this.delete("/user_db_connections/${path_user_db_connection_id}", mapOf()) } //endregion Connection: Manage Database Connections //region Content: Manage Content + /** * ### Search Favorite Content * @@ -3250,28 +3305,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, fields: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get( - "/content_favorite/search", - mapOf( - "id" to id, - "user_id" to user_id, - "content_metadata_id" to content_metadata_id, - "dashboard_id" to dashboard_id, - "look_id" to look_id, - "board_id" to board_id, - "lookml_dashboard_id" to lookml_dashboard_id, - "include_board_items" to include_board_items, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "fields" to fields, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get("/content_favorite/search", + mapOf("id" to id, + "user_id" to user_id, + "content_metadata_id" to content_metadata_id, + "dashboard_id" to dashboard_id, + "look_id" to look_id, + "board_id" to board_id, + "lookml_dashboard_id" to lookml_dashboard_id, + "include_board_items" to include_board_items, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "fields" to fields, + "filter_or" to filter_or)) } + /** * ### Get favorite content by its id * @@ -3282,15 +3334,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun content_favorite( content_favorite_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_content_favorite_id = encodeParam(content_favorite_id) - return this.get( - "/content_favorite/${path_content_favorite_id}", - mapOf("fields" to fields), - ) + return this.get("/content_favorite/${path_content_favorite_id}", + mapOf("fields" to fields)) } + /** * ### Delete favorite content * @@ -3299,12 +3350,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /content_favorite/{content_favorite_id} -> ByteArray */ fun delete_content_favorite( - content_favorite_id: String, - ): SDKResponse { + content_favorite_id: String + ) : SDKResponse { val path_content_favorite_id = encodeParam(content_favorite_id) - return this.delete("/content_favorite/${path_content_favorite_id}", mapOf()) + return this.delete("/content_favorite/${path_content_favorite_id}", mapOf()) } + /** * ### Create favorite content * @@ -3313,11 +3365,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /content_favorite -> ByteArray */ fun create_content_favorite( - body: WriteContentFavorite, - ): SDKResponse { - return this.post("/content_favorite", mapOf(), body) + body: WriteContentFavorite + ) : SDKResponse { + return this.post("/content_favorite", mapOf(), body) } + /** * ### Get information about all content metadata in a space. * @@ -3328,17 +3381,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_content_metadatas( parent_id: String, - fields: String? = null, - ): SDKResponse { - return this.get( - "/content_metadata", - mapOf( - "parent_id" to parent_id, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/content_metadata", + mapOf("parent_id" to parent_id, + "fields" to fields)) } + /** * ### Get information about an individual content metadata record. * @@ -3349,15 +3399,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun content_metadata( content_metadata_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_content_metadata_id = encodeParam(content_metadata_id) - return this.get( - "/content_metadata/${path_content_metadata_id}", - mapOf("fields" to fields), - ) + return this.get("/content_metadata/${path_content_metadata_id}", + mapOf("fields" to fields)) } + /** * ### Move a piece of content. * @@ -3368,12 +3417,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_content_metadata( content_metadata_id: String, - body: WriteContentMeta, - ): SDKResponse { + body: WriteContentMeta + ) : SDKResponse { val path_content_metadata_id = encodeParam(content_metadata_id) - return this.patch("/content_metadata/${path_content_metadata_id}", mapOf(), body) + return this.patch("/content_metadata/${path_content_metadata_id}", mapOf(), body) } + /** * ### All content metadata access records for a content metadata item. * @@ -3384,17 +3434,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_content_metadata_accesses( content_metadata_id: String, - fields: String? = null, - ): SDKResponse { - return this.get( - "/content_metadata_access", - mapOf( - "content_metadata_id" to content_metadata_id, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/content_metadata_access", + mapOf("content_metadata_id" to content_metadata_id, + "fields" to fields)) } + /** * ### Create content metadata access. * @@ -3405,15 +3452,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_content_metadata_access( body: ContentMetaGroupUser, - send_boards_notification_email: Boolean? = null, - ): SDKResponse { - return this.post( - "/content_metadata_access", - mapOf("send_boards_notification_email" to send_boards_notification_email), - body, - ) + send_boards_notification_email: Boolean? = null + ) : SDKResponse { + return this.post("/content_metadata_access", + mapOf("send_boards_notification_email" to send_boards_notification_email), body) } + /** * ### Update type of access for content metadata. * @@ -3424,12 +3469,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_content_metadata_access( content_metadata_access_id: String, - body: ContentMetaGroupUser, - ): SDKResponse { + body: ContentMetaGroupUser + ) : SDKResponse { val path_content_metadata_access_id = encodeParam(content_metadata_access_id) - return this.put("/content_metadata_access/${path_content_metadata_access_id}", mapOf(), body) + return this.put("/content_metadata_access/${path_content_metadata_access_id}", mapOf(), body) } + /** * ### Remove content metadata access. * @@ -3438,12 +3484,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /content_metadata_access/{content_metadata_access_id} -> ByteArray */ fun delete_content_metadata_access( - content_metadata_access_id: String, - ): SDKResponse { + content_metadata_access_id: String + ) : SDKResponse { val path_content_metadata_access_id = encodeParam(content_metadata_access_id) - return this.delete("/content_metadata_access/${path_content_metadata_access_id}", mapOf()) + return this.delete("/content_metadata_access/${path_content_metadata_access_id}", mapOf()) } + /** * ### Search across looks, dashboards, and lookml dashboards. The terms field will be matched against the * title and description of the content and the closest results are returned. Content that has been frequently @@ -3472,22 +3519,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, page: Long? = null, - per_page: Long? = null, - ): SDKResponse { + per_page: Long? = null + ) : SDKResponse { val path_terms = encodeParam(terms) - return this.get( - "/content/${path_terms}", - mapOf( - "fields" to fields, - "types" to types, - "limit" to limit, - "offset" to offset, - "page" to page, - "per_page" to per_page, - ), - ) + return this.get("/content/${path_terms}", + mapOf("fields" to fields, + "types" to types, + "limit" to limit, + "offset" to offset, + "page" to page, + "per_page" to per_page)) } + /** * ### Get Content Summary * @@ -3511,22 +3555,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { target_group_id: String? = null, target_user_id: String? = null, target_content_type: String? = null, - sorts: String? = null, - ): SDKResponse { - return this.get( - "/content_summary", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "target_group_id" to target_group_id, - "target_user_id" to target_user_id, - "target_content_type" to target_content_type, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get("/content_summary", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "target_group_id" to target_group_id, + "target_user_id" to target_user_id, + "target_content_type" to target_content_type, + "sorts" to sorts)) } + /** * ### Get an image representing the contents of a dashboard or look. * @@ -3552,22 +3593,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { theme: String? = null, format: String? = null, width: Long? = null, - height: Long? = null, - ): SDKResponse { + height: Long? = null + ) : SDKResponse { val path_type = encodeParam(type) val path_resource_id = encodeParam(resource_id) - return this.get( - "/content_thumbnail/${path_type}/${path_resource_id}", - mapOf( - "reload" to reload, - "theme" to theme, - "format" to format, - "width" to width, - "height" to height, - ), - ) + return this.get("/content_thumbnail/${path_type}/${path_resource_id}", + mapOf("reload" to reload, + "theme" to theme, + "format" to format, + "width" to width, + "height" to height)) } + /** * ### Validate All Content * @@ -3583,18 +3621,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun content_validation( fields: String? = null, project_names: DelimArray? = null, - space_ids: DelimArray? = null, - ): SDKResponse { - return this.get( - "/content_validation", - mapOf( - "fields" to fields, - "project_names" to project_names, - "space_ids" to space_ids, - ), - ) + space_ids: DelimArray? = null + ) : SDKResponse { + return this.get("/content_validation", + mapOf("fields" to fields, + "project_names" to project_names, + "space_ids" to space_ids)) } + /** * ### Search Content Views * @@ -3648,28 +3683,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get( - "/content_view/search", - mapOf( - "view_count" to view_count, - "group_id" to group_id, - "look_id" to look_id, - "dashboard_id" to dashboard_id, - "content_metadata_id" to content_metadata_id, - "start_of_week_date" to start_of_week_date, - "all_time" to all_time, - "user_id" to user_id, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get("/content_view/search", + mapOf("view_count" to view_count, + "group_id" to group_id, + "look_id" to look_id, + "dashboard_id" to dashboard_id, + "content_metadata_id" to content_metadata_id, + "start_of_week_date" to start_of_week_date, + "all_time" to all_time, + "user_id" to user_id, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or)) } + /** * ### Get a vector image representing the contents of a dashboard or look. * @@ -3685,24 +3717,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /vector_thumbnail/{type}/{resource_id} -> ByteArray */ @Deprecated(message = "Deprecated method") - @JvmOverloads - fun vector_thumbnail( + @JvmOverloads fun vector_thumbnail( type: String, resource_id: String, - reload: String? = null, - ): SDKResponse { + reload: String? = null + ) : SDKResponse { val path_type = encodeParam(type) val path_resource_id = encodeParam(resource_id) - return this.get( - "/vector_thumbnail/${path_type}/${path_resource_id}", - mapOf("reload" to reload), - ) + return this.get("/vector_thumbnail/${path_type}/${path_resource_id}", + mapOf("reload" to reload)) } //endregion Content: Manage Content //region ConversationalAnalytics: Manage Conversations, Agents and Messages + /** * ### Search Agents * @@ -3741,28 +3771,25 @@ 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", - mapOf( - "id" to id, - "name" to name, - "description" to description, - "created_by_user_id" to created_by_user_id, - "fields" to fields, - "limit" to limit, - "category" to category, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "not_owned_by" to not_owned_by, - "deleted" to deleted, - "primary_agent_id" to primary_agent_id, - ), - ) + primary_agent_id: String? = null + ) : SDKResponse { + return this.get("/agents/search", + mapOf("id" to id, + "name" to name, + "description" to description, + "created_by_user_id" to created_by_user_id, + "fields" to fields, + "limit" to limit, + "category" to category, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "not_owned_by" to not_owned_by, + "deleted" to deleted, + "primary_agent_id" to primary_agent_id)) } + /** * ### Create Agent * @@ -3776,15 +3803,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_agent( body: WriteAgent, - fields: String? = null, - ): SDKResponse { - return this.post( - "/agents", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/agents", + mapOf("fields" to fields), body) } + /** * ### Delete Agents * @@ -3797,17 +3822,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun delete_agent( id: String, - fields: String? = null, - ): SDKResponse { - return this.delete( - "/agents", - mapOf( - "id" to id, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.delete("/agents", + mapOf("id" to id, + "fields" to fields)) } + /** * ### Get Agent * @@ -3820,15 +3842,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun get_agent( agent_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_agent_id = encodeParam(agent_id) - return this.get( - "/agents/${path_agent_id}", - mapOf("fields" to fields), - ) + return this.get("/agents/${path_agent_id}", + mapOf("fields" to fields)) } + /** * ### Update Agent * @@ -3843,16 +3864,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_agent( agent_id: String, body: WriteAgent, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_agent_id = encodeParam(agent_id) - return this.patch( - "/agents/${path_agent_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/agents/${path_agent_id}", + mapOf("fields" to fields), body) } + /** * ### Get LookML of a UDD Agent * @@ -3863,12 +3882,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /agents/lookml/{agent_id} -> ByteArray */ fun agent_lookml( - agent_id: String, - ): SDKResponse { + agent_id: String + ) : SDKResponse { val path_agent_id = encodeParam(agent_id) - return this.get("/agents/lookml/${path_agent_id}", mapOf()) + return this.get("/agents/lookml/${path_agent_id}", mapOf()) } + /** * ### Get All Conversation Messages * @@ -3881,15 +3901,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_conversation_messages( conversation_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.get( - "/conversations/${path_conversation_id}/messages", - mapOf("fields" to fields), - ) + return this.get("/conversations/${path_conversation_id}/messages", + mapOf("fields" to fields)) } + /** * ### Create Conversation Message * @@ -3908,16 +3927,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_conversation_message( conversation_id: String, body: WriteConversationMessages, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.post( - "/conversations/${path_conversation_id}/messages", - mapOf("fields" to fields), - body, - ) + return this.post("/conversations/${path_conversation_id}/messages", + mapOf("fields" to fields), body) } + /** * ### Delete Conversation Message * @@ -3932,18 +3949,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun delete_conversation_message( conversation_id: String, id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.delete( - "/conversations/${path_conversation_id}/messages", - mapOf( - "id" to id, - "fields" to fields, - ), - ) + return this.delete("/conversations/${path_conversation_id}/messages", + mapOf("id" to id, + "fields" to fields)) } + /** * ### Get Conversation Message * @@ -3958,16 +3972,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun get_conversation_message( conversation_id: String, message_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) val path_message_id = encodeParam(message_id) - return this.get( - "/conversations/${path_conversation_id}/messages/${path_message_id}", - mapOf("fields" to fields), - ) + return this.get("/conversations/${path_conversation_id}/messages/${path_message_id}", + mapOf("fields" to fields)) } + /** * ### Update Conversation Message * @@ -3984,17 +3997,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { conversation_id: String, message_id: String, body: WriteConversationMessage, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) val path_message_id = encodeParam(message_id) - return this.patch( - "/conversations/${path_conversation_id}/messages/${path_message_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/conversations/${path_conversation_id}/messages/${path_message_id}", + mapOf("fields" to fields), body) } + /** * ### Get Agent Responses for User Message * @@ -4013,16 +4024,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun get_conversation_message_responses( conversation_id: String, user_message_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) val path_user_message_id = encodeParam(user_message_id) - return this.get( - "/conversations/${path_conversation_id}/messages/${path_user_message_id}/responses", - mapOf("fields" to fields), - ) + return this.get("/conversations/${path_conversation_id}/messages/${path_user_message_id}/responses", + mapOf("fields" to fields)) } + /** * ### Search Conversations * @@ -4056,25 +4066,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, filter_or: Boolean? = null, category: String? = null, - deleted: Boolean? = null, - ): SDKResponse { - return this.get( - "/conversations/search", - mapOf( - "id" to id, - "name" to name, - "agent_id" to agent_id, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "category" to category, - "deleted" to deleted, - ), - ) + deleted: Boolean? = null + ) : SDKResponse { + return this.get("/conversations/search", + mapOf("id" to id, + "name" to name, + "agent_id" to agent_id, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "category" to category, + "deleted" to deleted)) } + /** * ### Create Conversation * @@ -4088,15 +4095,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_conversation( body: WriteConversation, - fields: String? = null, - ): SDKResponse { - return this.post( - "/conversations", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/conversations", + mapOf("fields" to fields), body) } + /** * ### Delete Conversations * @@ -4109,17 +4114,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun delete_conversation( id: String, - fields: String? = null, - ): SDKResponse { - return this.delete( - "/conversations", - mapOf( - "id" to id, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.delete("/conversations", + mapOf("id" to id, + "fields" to fields)) } + /** * ### Get Conversation * @@ -4132,15 +4134,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun get_conversation( conversation_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.get( - "/conversations/${path_conversation_id}", - mapOf("fields" to fields), - ) + return this.get("/conversations/${path_conversation_id}", + mapOf("fields" to fields)) } + /** * ### Update Conversation * @@ -4155,16 +4156,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_conversation( conversation_id: String, body: WriteConversation, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_conversation_id = encodeParam(conversation_id) - return this.patch( - "/conversations/${path_conversation_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/conversations/${path_conversation_id}", + mapOf("fields" to fields), body) } + /** * ## Takes the latest conversation context (ID and a user message) and * ## returns a list of newly generated system messages. @@ -4174,11 +4173,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /conversational_analytics/chat -> ByteArray */ fun conversational_analytics_chat( - body: ConversationalAnalyticsChatRequest, - ): SDKResponse { - return this.post("/conversational_analytics/chat", mapOf(), body) + body: ConversationalAnalyticsChatRequest + ) : SDKResponse { + return this.post("/conversational_analytics/chat", mapOf(), body) } + /** * ### Create Golden Query * @@ -4189,11 +4189,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /golden_queries -> ByteArray */ fun create_golden_query( - body: WriteGoldenQuery, - ): SDKResponse { - return this.post("/golden_queries", mapOf(), body) + body: WriteGoldenQuery + ) : SDKResponse { + return this.post("/golden_queries", mapOf(), body) } + /** * ### Update Golden Query * @@ -4206,12 +4207,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_golden_query( golden_query_id: Long, - body: WriteGoldenQuery, - ): SDKResponse { + body: WriteGoldenQuery + ) : SDKResponse { val path_golden_query_id = encodeParam(golden_query_id) - return this.patch("/golden_queries/${path_golden_query_id}", mapOf(), body) + return this.patch("/golden_queries/${path_golden_query_id}", mapOf(), body) } + /** * ### Delete Golden Query * @@ -4222,16 +4224,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /golden_queries/{golden_query_id} -> ByteArray */ fun delete_golden_query( - golden_query_id: Long, - ): SDKResponse { + golden_query_id: Long + ) : SDKResponse { val path_golden_query_id = encodeParam(golden_query_id) - return this.delete("/golden_queries/${path_golden_query_id}", mapOf()) + return this.delete("/golden_queries/${path_golden_query_id}", mapOf()) } //endregion ConversationalAnalytics: Manage Conversations, Agents and Messages //region Dashboard: Manage Dashboards + /** * ### Get information about all active dashboards. * @@ -4246,14 +4249,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards -> ByteArray */ @JvmOverloads fun all_dashboards( - fields: String? = null, - ): SDKResponse { - return this.get( - "/dashboards", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/dashboards", + mapOf("fields" to fields)) } + /** * ### Create a new dashboard * @@ -4275,11 +4277,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards -> ByteArray */ fun create_dashboard( - body: WriteDashboard, - ): SDKResponse { - return this.post("/dashboards", mapOf(), body) + body: WriteDashboard + ) : SDKResponse { + return this.post("/dashboards", mapOf(), body) } + /** * ### Search Dashboards * @@ -4355,35 +4358,32 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { offset: Long? = null, sorts: String? = null, filter_or: Boolean? = null, - not_owned_by: Boolean? = null, - ): SDKResponse { - return this.get( - "/dashboards/search", - mapOf( - "id" to id, - "slug" to slug, - "title" to title, - "description" to description, - "content_favorite_id" to content_favorite_id, - "folder_id" to folder_id, - "deleted" to deleted, - "user_id" to user_id, - "view_count" to view_count, - "content_metadata_id" to content_metadata_id, - "curate" to curate, - "last_viewed_at" to last_viewed_at, - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "not_owned_by" to not_owned_by, - ), - ) + not_owned_by: Boolean? = null + ) : SDKResponse { + return this.get("/dashboards/search", + mapOf("id" to id, + "slug" to slug, + "title" to title, + "description" to description, + "content_favorite_id" to content_favorite_id, + "folder_id" to folder_id, + "deleted" to deleted, + "user_id" to user_id, + "view_count" to view_count, + "content_metadata_id" to content_metadata_id, + "curate" to curate, + "last_viewed_at" to last_viewed_at, + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "not_owned_by" to not_owned_by)) } + /** * ### Import a LookML dashboard to a space as a UDD * Creates a UDD (a dashboard which exists in the Looker database rather than as a LookML file) from the LookML dashboard @@ -4409,17 +4409,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { lookml_dashboard_id: String, space_id: String, body: WriteDashboard? = null, - raw_locale: Boolean? = null, - ): SDKResponse { + raw_locale: Boolean? = null + ) : SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) val path_space_id = encodeParam(space_id) - return this.post( - "/dashboards/${path_lookml_dashboard_id}/import/${path_space_id}", - mapOf("raw_locale" to raw_locale), - body, - ) + return this.post("/dashboards/${path_lookml_dashboard_id}/import/${path_space_id}", + mapOf("raw_locale" to raw_locale), body) } + /** * ### Update all linked dashboards to match the specified LookML dashboard. * @@ -4442,18 +4440,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun sync_lookml_dashboard( lookml_dashboard_id: String, raw_locale: Boolean? = null, - dashboard_ids: DelimArray? = null, - ): SDKResponse { + dashboard_ids: DelimArray? = null + ) : SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) - return this.patch( - "/dashboards/${path_lookml_dashboard_id}/sync", - mapOf( - "raw_locale" to raw_locale, - "dashboard_ids" to dashboard_ids, - ), - ) + return this.patch("/dashboards/${path_lookml_dashboard_id}/sync", + mapOf("raw_locale" to raw_locale, + "dashboard_ids" to dashboard_ids)) } + /** * ### Get information about a dashboard * @@ -4470,15 +4465,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard( dashboard_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get( - "/dashboards/${path_dashboard_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboards/${path_dashboard_id}", + mapOf("fields" to fields)) } + /** * ### Update a dashboard * @@ -4498,12 +4492,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_dashboard( dashboard_id: String, - body: WriteDashboard, - ): SDKResponse { + body: WriteDashboard + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch("/dashboards/${path_dashboard_id}", mapOf(), body) + return this.patch("/dashboards/${path_dashboard_id}", mapOf(), body) } + /** * ### Delete the dashboard with the specified id * @@ -4518,12 +4513,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboards/{dashboard_id} -> ByteArray */ fun delete_dashboard( - dashboard_id: String, - ): SDKResponse { + dashboard_id: String + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.delete("/dashboards/${path_dashboard_id}", mapOf()) + return this.delete("/dashboards/${path_dashboard_id}", mapOf()) } + /** * ### Get Dashboard Image * @@ -4538,13 +4534,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun get_dashboard_image( dashboard_id: String, - image_slug: String, - ): SDKResponse { + image_slug: String + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) val path_image_slug = encodeParam(image_slug) - return this.get("/dashboards/${path_dashboard_id}/images/${path_image_slug}", mapOf()) + return this.get("/dashboards/${path_dashboard_id}/images/${path_image_slug}", mapOf()) } + /** * ### Get Aggregate Table LookML for Each Query on a Dashboard * @@ -4555,12 +4552,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards/aggregate_table_lookml/{dashboard_id} -> ByteArray */ fun dashboard_aggregate_table_lookml( - dashboard_id: String, - ): SDKResponse { + dashboard_id: String + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/aggregate_table_lookml/${path_dashboard_id}", mapOf()) + return this.get("/dashboards/aggregate_table_lookml/${path_dashboard_id}", mapOf()) } + /** * ### Search LookML Dashboards * @@ -4612,22 +4610,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null, - ): SDKResponse { - return this.get( - "/dashboards/lookml/search", - mapOf( - "folder_id" to folder_id, - "title" to title, - "content_favorite_id" to content_favorite_id, - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get("/dashboards/lookml/search", + mapOf("folder_id" to folder_id, + "title" to title, + "content_favorite_id" to content_favorite_id, + "fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts)) } + /** * ### Get lookml of a UDD * @@ -4638,12 +4633,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboards/lookml/{dashboard_id} -> ByteArray */ fun dashboard_lookml( - dashboard_id: String, - ): SDKResponse { + dashboard_id: String + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get("/dashboards/lookml/${path_dashboard_id}", mapOf()) + return this.get("/dashboards/lookml/${path_dashboard_id}", mapOf()) } + /** * ### Move an existing dashboard * @@ -4661,18 +4657,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun move_dashboard( dashboard_id: String, folder_id: String, - project_name: String? = null, - ): SDKResponse { + project_name: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch( - "/dashboards/${path_dashboard_id}/move", - mapOf( - "folder_id" to folder_id, - "project_name" to project_name, - ), - ) + return this.patch("/dashboards/${path_dashboard_id}/move", + mapOf("folder_id" to folder_id, + "project_name" to project_name)) } + /** * ### Creates a dashboard object based on LookML Dashboard YAML, and returns the details of the newly created dashboard. * @@ -4695,11 +4688,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards/lookml -> ByteArray */ fun import_dashboard_from_lookml( - body: WriteDashboardLookml, - ): SDKResponse { - return this.post("/dashboards/lookml", mapOf(), body) + body: WriteDashboardLookml + ) : SDKResponse { + return this.post("/dashboards/lookml", mapOf(), body) } + /** * # DEPRECATED: Use [import_dashboard_from_lookml()](#!/Dashboard/import_dashboard_from_lookml) * @@ -4708,11 +4702,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboards/from_lookml -> ByteArray */ fun create_dashboard_from_lookml( - body: WriteDashboardLookml, - ): SDKResponse { - return this.post("/dashboards/from_lookml", mapOf(), body) + body: WriteDashboardLookml + ) : SDKResponse { + return this.post("/dashboards/from_lookml", mapOf(), body) } + /** * ### Copy an existing dashboard * @@ -4731,15 +4726,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun copy_dashboard( dashboard_id: String, - folder_id: String? = null, - ): SDKResponse { + folder_id: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.post( - "/dashboards/${path_dashboard_id}/copy", - mapOf("folder_id" to folder_id), - ) + return this.post("/dashboards/${path_dashboard_id}/copy", + mapOf("folder_id" to folder_id)) } + /** * ### Update dashboard certification * @@ -4750,12 +4744,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_dashboard_certification( dashboard_id: String, - body: WriteCertification, - ): SDKResponse { + body: WriteCertification + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch("/dashboards/${path_dashboard_id}/certification", mapOf(), body) + return this.patch("/dashboards/${path_dashboard_id}/certification", mapOf(), body) } + /** * ### Update LookML dashboard certification * @@ -4766,12 +4761,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_lookml_certification( dashboard_id: String, - body: WriteCertification, - ): SDKResponse { + body: WriteCertification + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.patch("/dashboards/lookml/${path_dashboard_id}/certification", mapOf(), body) + return this.patch("/dashboards/lookml/${path_dashboard_id}/certification", mapOf(), body) } + /** * ### Search Dashboard Elements * @@ -4815,22 +4811,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { deleted: Boolean? = null, fields: String? = null, filter_or: Boolean? = null, - sorts: String? = null, - ): SDKResponse { - return this.get( - "/dashboard_elements/search", - mapOf( - "dashboard_id" to dashboard_id, - "look_id" to look_id, - "title" to title, - "deleted" to deleted, - "fields" to fields, - "filter_or" to filter_or, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get("/dashboard_elements/search", + mapOf("dashboard_id" to dashboard_id, + "look_id" to look_id, + "title" to title, + "deleted" to deleted, + "fields" to fields, + "filter_or" to filter_or, + "sorts" to sorts)) } + /** * ### Get information about the dashboard element with a specific id. * @@ -4841,15 +4834,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_element( dashboard_element_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.get( - "/dashboard_elements/${path_dashboard_element_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboard_elements/${path_dashboard_element_id}", + mapOf("fields" to fields)) } + /** * ### Update the dashboard element with a specific id. * @@ -4862,16 +4854,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_element( dashboard_element_id: String, body: WriteDashboardElement, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.patch( - "/dashboard_elements/${path_dashboard_element_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/dashboard_elements/${path_dashboard_element_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a dashboard element with a specific id. * @@ -4880,12 +4870,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_elements/{dashboard_element_id} -> ByteArray */ fun delete_dashboard_element( - dashboard_element_id: String, - ): SDKResponse { + dashboard_element_id: String + ) : SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) - return this.delete("/dashboard_elements/${path_dashboard_element_id}", mapOf()) + return this.delete("/dashboard_elements/${path_dashboard_element_id}", mapOf()) } + /** * ### Get information about all the dashboard elements on a dashboard with a specific id. * @@ -4896,15 +4887,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_elements( dashboard_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get( - "/dashboards/${path_dashboard_id}/dashboard_elements", - mapOf("fields" to fields), - ) + return this.get("/dashboards/${path_dashboard_id}/dashboard_elements", + mapOf("fields" to fields)) } + /** * ### Create a dashboard element on the dashboard with a specific id. * @@ -4917,18 +4907,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_dashboard_element( body: WriteDashboardElement, fields: String? = null, - apply_filters: Boolean? = null, - ): SDKResponse { - return this.post( - "/dashboard_elements", - mapOf( - "fields" to fields, - "apply_filters" to apply_filters, - ), - body, - ) + apply_filters: Boolean? = null + ) : SDKResponse { + return this.post("/dashboard_elements", + mapOf("fields" to fields, + "apply_filters" to apply_filters), body) } + /** * ### Get information about the dashboard filters with a specific id. * @@ -4939,15 +4925,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_filter( dashboard_filter_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.get( - "/dashboard_filters/${path_dashboard_filter_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboard_filters/${path_dashboard_filter_id}", + mapOf("fields" to fields)) } + /** * ### Update the dashboard filter with a specific id. * @@ -4960,16 +4945,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_filter( dashboard_filter_id: String, body: WriteDashboardFilter, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.patch( - "/dashboard_filters/${path_dashboard_filter_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/dashboard_filters/${path_dashboard_filter_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a dashboard filter with a specific id. * @@ -4978,12 +4961,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_filters/{dashboard_filter_id} -> ByteArray */ fun delete_dashboard_filter( - dashboard_filter_id: String, - ): SDKResponse { + dashboard_filter_id: String + ) : SDKResponse { val path_dashboard_filter_id = encodeParam(dashboard_filter_id) - return this.delete("/dashboard_filters/${path_dashboard_filter_id}", mapOf()) + return this.delete("/dashboard_filters/${path_dashboard_filter_id}", mapOf()) } + /** * ### Get information about all the dashboard filters on a dashboard with a specific id. * @@ -4994,15 +4978,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_filters( dashboard_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get( - "/dashboards/${path_dashboard_id}/dashboard_filters", - mapOf("fields" to fields), - ) + return this.get("/dashboards/${path_dashboard_id}/dashboard_filters", + mapOf("fields" to fields)) } + /** * ### Create a dashboard filter on the dashboard with a specific id. * @@ -5013,15 +4996,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_dashboard_filter( body: WriteCreateDashboardFilter, - fields: String? = null, - ): SDKResponse { - return this.post( - "/dashboard_filters", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/dashboard_filters", + mapOf("fields" to fields), body) } + /** * ### Get information about the dashboard elements with a specific id. * @@ -5032,15 +5013,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout_component( dashboard_layout_component_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_component_id = encodeParam(dashboard_layout_component_id) - return this.get( - "/dashboard_layout_components/${path_dashboard_layout_component_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboard_layout_components/${path_dashboard_layout_component_id}", + mapOf("fields" to fields)) } + /** * ### Update the dashboard element with a specific id. * @@ -5053,16 +5033,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_layout_component( dashboard_layout_component_id: String, body: WriteDashboardLayoutComponent, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_component_id = encodeParam(dashboard_layout_component_id) - return this.patch( - "/dashboard_layout_components/${path_dashboard_layout_component_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/dashboard_layout_components/${path_dashboard_layout_component_id}", + mapOf("fields" to fields), body) } + /** * ### Get information about all the dashboard layout components for a dashboard layout with a specific id. * @@ -5073,15 +5051,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout_dashboard_layout_components( dashboard_layout_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.get( - "/dashboard_layouts/${path_dashboard_layout_id}/dashboard_layout_components", - mapOf("fields" to fields), - ) + return this.get("/dashboard_layouts/${path_dashboard_layout_id}/dashboard_layout_components", + mapOf("fields" to fields)) } + /** * ### Get information about the dashboard layouts with a specific id. * @@ -5092,15 +5069,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_layout( dashboard_layout_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.get( - "/dashboard_layouts/${path_dashboard_layout_id}", - mapOf("fields" to fields), - ) + return this.get("/dashboard_layouts/${path_dashboard_layout_id}", + mapOf("fields" to fields)) } + /** * ### Update the dashboard layout with a specific id. * @@ -5113,16 +5089,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_dashboard_layout( dashboard_layout_id: String, body: WriteDashboardLayout, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.patch( - "/dashboard_layouts/${path_dashboard_layout_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/dashboard_layouts/${path_dashboard_layout_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a dashboard layout with a specific id. * @@ -5131,12 +5105,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /dashboard_layouts/{dashboard_layout_id} -> ByteArray */ fun delete_dashboard_layout( - dashboard_layout_id: String, - ): SDKResponse { + dashboard_layout_id: String + ) : SDKResponse { val path_dashboard_layout_id = encodeParam(dashboard_layout_id) - return this.delete("/dashboard_layouts/${path_dashboard_layout_id}", mapOf()) + return this.delete("/dashboard_layouts/${path_dashboard_layout_id}", mapOf()) } + /** * ### Get information about all the dashboard elements on a dashboard with a specific id. * @@ -5147,15 +5122,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun dashboard_dashboard_layouts( dashboard_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get( - "/dashboards/${path_dashboard_id}/dashboard_layouts", - mapOf("fields" to fields), - ) + return this.get("/dashboards/${path_dashboard_id}/dashboard_layouts", + mapOf("fields" to fields)) } + /** * ### Create a dashboard layout on the dashboard with a specific id. * @@ -5166,15 +5140,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_dashboard_layout( body: WriteDashboardLayout, - fields: String? = null, - ): SDKResponse { - return this.post( - "/dashboard_layouts", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/dashboard_layouts", + mapOf("fields" to fields), body) } + /** * ### Get Dashboard Filter State * Returns the stored filter state for a given GUID. @@ -5184,12 +5156,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /dashboard_filter_state/{guid} -> ByteArray */ fun dashboard_filter_state( - guid: String, - ): SDKResponse { + guid: String + ) : SDKResponse { val path_guid = encodeParam(guid) - return this.get("/dashboard_filter_state/${path_guid}", mapOf()) + return this.get("/dashboard_filter_state/${path_guid}", mapOf()) } + /** * ### Create Dashboard Filter State * Saves the filter state and returns a GUID. @@ -5199,15 +5172,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /dashboard_filter_state -> ByteArray */ fun create_dashboard_filter_state( - body: String, - ): SDKResponse { - return this.post("/dashboard_filter_state", mapOf(), body) + body: String + ) : SDKResponse { + return this.post("/dashboard_filter_state", mapOf(), body) } //endregion Dashboard: Manage Dashboards //region DataAction: Run Data Actions + /** * Perform a data action. The data action object can be obtained from query results, and used to perform an arbitrary action. * @@ -5216,11 +5190,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /data_actions -> ByteArray */ fun perform_data_action( - body: DataActionRequest, - ): SDKResponse { - return this.post("/data_actions", mapOf(), body) + body: DataActionRequest + ) : SDKResponse { + return this.post("/data_actions", mapOf(), body) } + /** * For some data actions, the remote server may supply a form requesting further user input. This endpoint takes a data action, asks the remote server to generate a form for it, and returns that form to you for presentation to the user. * @@ -5229,24 +5204,28 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /data_actions/form -> ByteArray */ fun fetch_remote_data_action_form( - body: Map, - ): SDKResponse { - return this.post("/data_actions/form", mapOf(), body) + body: Map + ) : SDKResponse { + return this.post("/data_actions/form", mapOf(), body) } //endregion DataAction: Run Data Actions //region Datagroup: Manage Datagroups + /** * ### Get information about all datagroups. * * GET /datagroups -> ByteArray */ - fun all_datagroups(): SDKResponse { - return this.get("/datagroups", mapOf()) + fun all_datagroups( + + ) : SDKResponse { + return this.get("/datagroups", mapOf()) } + /** * ### Get information about a datagroup. * @@ -5255,12 +5234,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /datagroups/{datagroup_id} -> ByteArray */ fun datagroup( - datagroup_id: String, - ): SDKResponse { + datagroup_id: String + ) : SDKResponse { val path_datagroup_id = encodeParam(datagroup_id) - return this.get("/datagroups/${path_datagroup_id}", mapOf()) + return this.get("/datagroups/${path_datagroup_id}", mapOf()) } + /** * ### Update a datagroup using the specified params. * @@ -5271,16 +5251,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_datagroup( datagroup_id: String, - body: WriteDatagroup, - ): SDKResponse { + body: WriteDatagroup + ) : SDKResponse { val path_datagroup_id = encodeParam(datagroup_id) - return this.patch("/datagroups/${path_datagroup_id}", mapOf(), body) + return this.patch("/datagroups/${path_datagroup_id}", mapOf(), body) } //endregion Datagroup: Manage Datagroups //region DerivedTable: View Derived Table graphs + /** * ### Discover information about derived tables * @@ -5293,18 +5274,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun graph_derived_tables_for_model( model: String, format: String? = null, - color: String? = null, - ): SDKResponse { + color: String? = null + ) : SDKResponse { val path_model = encodeParam(model) - return this.get( - "/derived_table/graph/model/${path_model}", - mapOf( - "format" to format, - "color" to color, - ), - ) + return this.get("/derived_table/graph/model/${path_model}", + mapOf("format" to format, + "color" to color)) } + /** * ### Get the subgraph representing this derived table and its dependencies. * @@ -5317,18 +5295,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun graph_derived_tables_for_view( view: String, models: String? = null, - workspace: String? = null, - ): SDKResponse { + workspace: String? = null + ) : SDKResponse { val path_view = encodeParam(view) - return this.get( - "/derived_table/graph/view/${path_view}", - mapOf( - "models" to models, - "workspace" to workspace, - ), - ) + return this.get("/derived_table/graph/view/${path_view}", + mapOf("models" to models, + "workspace" to workspace)) } + /** * Enqueue materialization for a PDT with the given model name and view name * @@ -5347,21 +5322,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { force_rebuild: String? = null, force_full_incremental: String? = null, workspace: String? = null, - source: String? = null, - ): SDKResponse { + source: String? = null + ) : SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) - return this.get( - "/derived_table/${path_model_name}/${path_view_name}/start", - mapOf( - "force_rebuild" to force_rebuild, - "force_full_incremental" to force_full_incremental, - "workspace" to workspace, - "source" to source, - ), - ) + return this.get("/derived_table/${path_model_name}/${path_view_name}/start", + mapOf("force_rebuild" to force_rebuild, + "force_full_incremental" to force_full_incremental, + "workspace" to workspace, + "source" to source)) } + /** * Check status of PDT materialization * @@ -5370,12 +5342,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /derived_table/{materialization_id}/status -> ByteArray */ fun check_pdt_build( - materialization_id: String, - ): SDKResponse { + materialization_id: String + ) : SDKResponse { val path_materialization_id = encodeParam(materialization_id) - return this.get("/derived_table/${path_materialization_id}/status", mapOf()) + return this.get("/derived_table/${path_materialization_id}/status", mapOf()) } + /** * Stop a PDT materialization * @@ -5386,19 +5359,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun stop_pdt_build( materialization_id: String, - source: String? = null, - ): SDKResponse { + source: String? = null + ) : SDKResponse { val path_materialization_id = encodeParam(materialization_id) - return this.get( - "/derived_table/${path_materialization_id}/stop", - mapOf("source" to source), - ) + return this.get("/derived_table/${path_materialization_id}/stop", + mapOf("source" to source)) } //endregion DerivedTable: View Derived Table graphs //region Folder: Manage Folders + /** * Search for folders by creator id, parent id, name, etc * @@ -5431,28 +5403,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { creator_id: String? = null, filter_or: Boolean? = null, is_shared_root: Boolean? = null, - is_users_root: Boolean? = null, - ): SDKResponse { - return this.get( - "/folders/search", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "name" to name, - "id" to id, - "parent_id" to parent_id, - "creator_id" to creator_id, - "filter_or" to filter_or, - "is_shared_root" to is_shared_root, - "is_users_root" to is_users_root, - ), - ) + is_users_root: Boolean? = null + ) : SDKResponse { + return this.get("/folders/search", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "name" to name, + "id" to id, + "parent_id" to parent_id, + "creator_id" to creator_id, + "filter_or" to filter_or, + "is_shared_root" to is_shared_root, + "is_users_root" to is_users_root)) } + /** * ### Get information about the folder with a specific id. * @@ -5463,15 +5432,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}", - mapOf("fields" to fields), - ) + return this.get("/folders/${path_folder_id}", + mapOf("fields" to fields)) } + /** * ### Update the folder with a specific id. * @@ -5482,12 +5450,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_folder( folder_id: String, - body: UpdateFolder, - ): SDKResponse { + body: UpdateFolder + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.patch("/folders/${path_folder_id}", mapOf(), body) + return this.patch("/folders/${path_folder_id}", mapOf(), body) } + /** * ### Delete the folder with a specific id including any children folders. * **DANGER** this will delete all looks and dashboards in the folder. @@ -5497,12 +5466,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /folders/{folder_id} -> ByteArray */ fun delete_folder( - folder_id: String, - ): SDKResponse { + folder_id: String + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.delete("/folders/${path_folder_id}", mapOf()) + return this.delete("/folders/${path_folder_id}", mapOf()) } + /** * ### Get information about all folders. * @@ -5513,14 +5483,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /folders -> ByteArray */ @JvmOverloads fun all_folders( - fields: String? = null, - ): SDKResponse { - return this.get( - "/folders", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/folders", + mapOf("fields" to fields)) } + /** * ### Create a folder with specified information. * @@ -5532,11 +5501,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /folders -> ByteArray */ fun create_folder( - body: CreateFolder, - ): SDKResponse { - return this.post("/folders", mapOf(), body) + body: CreateFolder + ) : SDKResponse { + return this.post("/folders", mapOf(), body) } + /** * ### Get the children of a folder. * @@ -5557,22 +5527,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { per_page: Long? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null, - ): SDKResponse { + sorts: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}/children", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - ), - ) + return this.get("/folders/${path_folder_id}/children", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts)) } + /** * ### Search the children of a folder * @@ -5587,19 +5554,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { folder_id: String, fields: String? = null, sorts: String? = null, - name: String? = null, - ): SDKResponse { + name: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}/children/search", - mapOf( - "fields" to fields, - "sorts" to sorts, - "name" to name, - ), - ) + return this.get("/folders/${path_folder_id}/children/search", + mapOf("fields" to fields, + "sorts" to sorts, + "name" to name)) } + /** * ### Get the parent of a folder * @@ -5610,15 +5574,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_parent( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}/parent", - mapOf("fields" to fields), - ) + return this.get("/folders/${path_folder_id}/parent", + mapOf("fields" to fields)) } + /** * ### Get the ancestors of a folder * @@ -5629,15 +5592,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_ancestors( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}/ancestors", - mapOf("fields" to fields), - ) + return this.get("/folders/${path_folder_id}/ancestors", + mapOf("fields" to fields)) } + /** * ### Get all looks in a folder. * In API 4.0+, all looks in a folder will be returned, excluding looks in the trash. @@ -5649,15 +5611,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_looks( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}/looks", - mapOf("fields" to fields), - ) + return this.get("/folders/${path_folder_id}/looks", + mapOf("fields" to fields)) } + /** * ### Get the dashboards in a folder * @@ -5668,19 +5629,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun folder_dashboards( folder_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_folder_id = encodeParam(folder_id) - return this.get( - "/folders/${path_folder_id}/dashboards", - mapOf("fields" to fields), - ) + return this.get("/folders/${path_folder_id}/dashboards", + mapOf("fields" to fields)) } //endregion Folder: Manage Folders //region Group: Manage Groups + /** * ### Get information about all groups. * @@ -5705,24 +5665,21 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, ids: DelimArray? = null, content_metadata_id: String? = null, - can_add_to_content_metadata: Boolean? = null, - ): SDKResponse { - return this.get( - "/groups", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "ids" to ids, - "content_metadata_id" to content_metadata_id, - "can_add_to_content_metadata" to can_add_to_content_metadata, - ), - ) + can_add_to_content_metadata: Boolean? = null + ) : SDKResponse { + return this.get("/groups", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "ids" to ids, + "content_metadata_id" to content_metadata_id, + "can_add_to_content_metadata" to can_add_to_content_metadata)) } + /** * ### Creates a new group (admin only). * @@ -5733,15 +5690,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_group( body: WriteGroup, - fields: String? = null, - ): SDKResponse { - return this.post( - "/groups", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/groups", + mapOf("fields" to fields), body) } + /** * ### Search groups * @@ -5791,25 +5746,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null, - ): SDKResponse { - return this.get( - "/groups/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned, - ), - ) + externally_orphaned: Boolean? = null + ) : SDKResponse { + return this.get("/groups/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned)) } + /** * ### Search groups include roles * @@ -5859,25 +5811,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null, - ): SDKResponse { - return this.get( - "/groups/search/with_roles", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned, - ), - ) + externally_orphaned: Boolean? = null + ) : SDKResponse { + return this.get("/groups/search/with_roles", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned)) } + /** * ### Search groups include hierarchy * @@ -5928,25 +5877,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, external_group_id: String? = null, externally_managed: Boolean? = null, - externally_orphaned: Boolean? = null, - ): SDKResponse { - return this.get( - "/groups/search/with_hierarchy", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - "id" to id, - "name" to name, - "external_group_id" to external_group_id, - "externally_managed" to externally_managed, - "externally_orphaned" to externally_orphaned, - ), - ) + externally_orphaned: Boolean? = null + ) : SDKResponse { + return this.get("/groups/search/with_hierarchy", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or, + "id" to id, + "name" to name, + "external_group_id" to external_group_id, + "externally_managed" to externally_managed, + "externally_orphaned" to externally_orphaned)) } + /** * ### Get information about a group. * @@ -5957,15 +5903,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun group( group_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.get( - "/groups/${path_group_id}", - mapOf("fields" to fields), - ) + return this.get("/groups/${path_group_id}", + mapOf("fields" to fields)) } + /** * ### Updates the a group (admin only). * @@ -5978,16 +5923,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_group( group_id: String, body: WriteGroup, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.patch( - "/groups/${path_group_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/groups/${path_group_id}", + mapOf("fields" to fields), body) } + /** * ### Deletes a group (admin only). * @@ -5996,12 +5939,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /groups/{group_id} -> ByteArray */ fun delete_group( - group_id: String, - ): SDKResponse { + group_id: String + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.delete("/groups/${path_group_id}", mapOf()) + return this.delete("/groups/${path_group_id}", mapOf()) } + /** * ### Get information about all the groups in a group * @@ -6012,15 +5956,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_group_groups( group_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.get( - "/groups/${path_group_id}/groups", - mapOf("fields" to fields), - ) + return this.get("/groups/${path_group_id}/groups", + mapOf("fields" to fields)) } + /** * ### Adds a new group to a group. * @@ -6031,12 +5974,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun add_group_group( group_id: String, - body: GroupIdForGroupInclusion, - ): SDKResponse { + body: GroupIdForGroupInclusion + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.post("/groups/${path_group_id}/groups", mapOf(), body) + return this.post("/groups/${path_group_id}/groups", mapOf(), body) } + /** * ### Get information about all the users directly included in a group. * @@ -6057,22 +6001,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { per_page: Long? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null, - ): SDKResponse { + sorts: String? = null + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.get( - "/groups/${path_group_id}/users", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - ), - ) + return this.get("/groups/${path_group_id}/users", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts)) } + /** * ### Adds a new user to a group. * @@ -6083,12 +6024,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun add_group_user( group_id: String, - body: GroupIdForGroupUserInclusion, - ): SDKResponse { + body: GroupIdForGroupUserInclusion + ) : SDKResponse { val path_group_id = encodeParam(group_id) - return this.post("/groups/${path_group_id}/users", mapOf(), body) + return this.post("/groups/${path_group_id}/users", mapOf(), body) } + /** * ### Removes a user from a group. * @@ -6099,13 +6041,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_group_user( group_id: String, - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_group_id = encodeParam(group_id) val path_user_id = encodeParam(user_id) - return this.delete("/groups/${path_group_id}/users/${path_user_id}", mapOf()) + return this.delete("/groups/${path_group_id}/users/${path_user_id}", mapOf()) } + /** * ### Removes a group from a group. * @@ -6116,13 +6059,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_group_from_group( group_id: String, - deleting_group_id: String, - ): SDKResponse { + deleting_group_id: String + ) : SDKResponse { val path_group_id = encodeParam(group_id) val path_deleting_group_id = encodeParam(deleting_group_id) - return this.delete("/groups/${path_group_id}/groups/${path_deleting_group_id}", mapOf()) + return this.delete("/groups/${path_group_id}/groups/${path_deleting_group_id}", mapOf()) } + /** * ### Set the value of a user attribute for a group. * @@ -6137,13 +6081,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fun update_user_attribute_group_value( group_id: String, user_attribute_id: String, - body: UserAttributeGroupValue, - ): SDKResponse { + body: UserAttributeGroupValue + ) : SDKResponse { val path_group_id = encodeParam(group_id) val path_user_attribute_id = encodeParam(user_attribute_id) - return this.patch("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) + return this.patch("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) } + /** * ### Remove a user attribute value from a group. * @@ -6154,17 +6099,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_attribute_group_value( group_id: String, - user_attribute_id: String, - ): SDKResponse { + user_attribute_id: String + ) : SDKResponse { val path_group_id = encodeParam(group_id) val path_user_attribute_id = encodeParam(user_attribute_id) - return this.delete("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf()) + return this.delete("/groups/${path_group_id}/attribute_values/${path_user_attribute_id}", mapOf()) } //endregion Group: Manage Groups //region Homepage: Manage Homepage + /** * ### Get information about the primary homepage's sections. * @@ -6173,18 +6119,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /primary_homepage_sections -> ByteArray */ @JvmOverloads fun all_primary_homepage_sections( - fields: String? = null, - ): SDKResponse { - return this.get( - "/primary_homepage_sections", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/primary_homepage_sections", + mapOf("fields" to fields)) } //endregion Homepage: Manage Homepage //region Integration: Manage Integrations + /** * ### Get information about all Integration Hubs. * @@ -6193,14 +6138,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /integration_hubs -> ByteArray */ @JvmOverloads fun all_integration_hubs( - fields: String? = null, - ): SDKResponse { - return this.get( - "/integration_hubs", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/integration_hubs", + mapOf("fields" to fields)) } + /** * ### Create a new Integration Hub. * @@ -6213,15 +6157,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_integration_hub( body: WriteIntegrationHub, - fields: String? = null, - ): SDKResponse { - return this.post( - "/integration_hubs", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/integration_hubs", + mapOf("fields" to fields), body) } + /** * ### Get information about a Integration Hub. * @@ -6232,15 +6174,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun integration_hub( integration_hub_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.get( - "/integration_hubs/${path_integration_hub_id}", - mapOf("fields" to fields), - ) + return this.get("/integration_hubs/${path_integration_hub_id}", + mapOf("fields" to fields)) } + /** * ### Update a Integration Hub definition. * @@ -6255,16 +6196,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_integration_hub( integration_hub_id: String, body: WriteIntegrationHub, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.patch( - "/integration_hubs/${path_integration_hub_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/integration_hubs/${path_integration_hub_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a Integration Hub. * @@ -6273,12 +6212,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /integration_hubs/{integration_hub_id} -> ByteArray */ fun delete_integration_hub( - integration_hub_id: String, - ): SDKResponse { + integration_hub_id: String + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.delete("/integration_hubs/${path_integration_hub_id}", mapOf()) + return this.delete("/integration_hubs/${path_integration_hub_id}", mapOf()) } + /** * Checks to see if the user is able to connect to their integration hub * @@ -6289,15 +6229,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun get_integration_hub_health( integration_hub_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.get( - "/integration_hubs/${path_integration_hub_id}/health", - mapOf("fields" to fields), - ) + return this.get("/integration_hubs/${path_integration_hub_id}/health", + mapOf("fields" to fields)) } + /** * Accepts the legal agreement for a given integration hub. This only works for integration hubs that have legal_agreement_required set to true and legal_agreement_signed set to false. * @@ -6306,12 +6245,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /integration_hubs/{integration_hub_id}/accept_legal_agreement -> ByteArray */ fun accept_integration_hub_legal_agreement( - integration_hub_id: String, - ): SDKResponse { + integration_hub_id: String + ) : SDKResponse { val path_integration_hub_id = encodeParam(integration_hub_id) - return this.post("/integration_hubs/${path_integration_hub_id}/accept_legal_agreement", mapOf()) + return this.post("/integration_hubs/${path_integration_hub_id}/accept_legal_agreement", mapOf()) } + /** * ### Get information about all Integrations. * @@ -6322,17 +6262,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_integrations( fields: String? = null, - integration_hub_id: String? = null, - ): SDKResponse { - return this.get( - "/integrations", - mapOf( - "fields" to fields, - "integration_hub_id" to integration_hub_id, - ), - ) + integration_hub_id: String? = null + ) : SDKResponse { + return this.get("/integrations", + mapOf("fields" to fields, + "integration_hub_id" to integration_hub_id)) } + /** * ### Get information about a Integration. * @@ -6343,15 +6280,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun integration( integration_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.get( - "/integrations/${path_integration_id}", - mapOf("fields" to fields), - ) + return this.get("/integrations/${path_integration_id}", + mapOf("fields" to fields)) } + /** * ### Update parameters on a Integration. * @@ -6364,16 +6300,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_integration( integration_id: String, body: WriteIntegration, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.patch( - "/integrations/${path_integration_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/integrations/${path_integration_id}", + mapOf("fields" to fields), body) } + /** * Returns the Integration form for presentation to the user. * @@ -6384,12 +6318,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun fetch_integration_form( integration_id: String, - body: Map? = null, - ): SDKResponse { + body: Map? = null + ) : SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.post("/integrations/${path_integration_id}/form", mapOf(), body) + return this.post("/integrations/${path_integration_id}/form", mapOf(), body) } + /** * Tests the integration to make sure all the settings are working. * @@ -6398,16 +6333,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /integrations/{integration_id}/test -> ByteArray */ fun test_integration( - integration_id: String, - ): SDKResponse { + integration_id: String + ) : SDKResponse { val path_integration_id = encodeParam(integration_id) - return this.post("/integrations/${path_integration_id}/test", mapOf()) + return this.post("/integrations/${path_integration_id}/test", mapOf()) } //endregion Integration: Manage Integrations //region KeyDriverAnalysis: Run Key Driver Analysis + /** * ### Analyze Key Drivers * @@ -6425,15 +6361,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /internal/kda/analyze -> ByteArray */ fun run_key_driver_analysis( - body: KdaRequestPayload, - ): SDKResponse { - return this.post("/internal/kda/analyze", mapOf(), body) + body: KdaRequestPayload + ) : SDKResponse { + return this.post("/internal/kda/analyze", mapOf(), body) } //endregion KeyDriverAnalysis: Run Key Driver Analysis //region Look: Run and Manage Looks + /** * ### Get information about all active Looks * @@ -6448,14 +6385,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /looks -> ByteArray */ @JvmOverloads fun all_looks( - fields: String? = null, - ): SDKResponse { - return this.get( - "/looks", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/looks", + mapOf("fields" to fields)) } + /** * ### Create a Look * @@ -6472,15 +6408,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_look( body: WriteLookWithQuery, - fields: String? = null, - ): SDKResponse { - return this.post( - "/looks", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/looks", + mapOf("fields" to fields), body) } + /** * ### Search Looks * @@ -6549,33 +6483,30 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get( - "/looks/search", - mapOf( - "id" to id, - "title" to title, - "description" to description, - "content_favorite_id" to content_favorite_id, - "folder_id" to folder_id, - "user_id" to user_id, - "view_count" to view_count, - "deleted" to deleted, - "query_id" to query_id, - "curate" to curate, - "last_viewed_at" to last_viewed_at, - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get("/looks/search", + mapOf("id" to id, + "title" to title, + "description" to description, + "content_favorite_id" to content_favorite_id, + "folder_id" to folder_id, + "user_id" to user_id, + "view_count" to view_count, + "deleted" to deleted, + "query_id" to query_id, + "curate" to curate, + "last_viewed_at" to last_viewed_at, + "fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "filter_or" to filter_or)) } + /** * ### Get a Look. * @@ -6588,15 +6519,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun look( look_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.get( - "/looks/${path_look_id}", - mapOf("fields" to fields), - ) + return this.get("/looks/${path_look_id}", + mapOf("fields" to fields)) } + /** * ### Modify a Look * @@ -6628,16 +6558,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_look( look_id: String, body: WriteLookWithQuery, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch( - "/looks/${path_look_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/looks/${path_look_id}", + mapOf("fields" to fields), body) } + /** * ### Permanently Delete a Look * @@ -6652,12 +6580,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /looks/{look_id} -> ByteArray */ fun delete_look( - look_id: String, - ): SDKResponse { + look_id: String + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.delete("/looks/${path_look_id}", mapOf()) + return this.delete("/looks/${path_look_id}", mapOf()) } + /** * ### Run a Look * @@ -6714,29 +6643,26 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null, - ): SDKResponse { + server_table_calcs: Boolean? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) val path_result_format = encodeParam(result_format) - return this.get( - "/looks/${path_look_id}/run/${path_result_format}", - mapOf( - "limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - ), - ) + return this.get("/looks/${path_look_id}/run/${path_result_format}", + mapOf("limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs)) } + /** * ### Copy an existing look * @@ -6753,15 +6679,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun copy_look( look_id: String, - folder_id: String? = null, - ): SDKResponse { + folder_id: String? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.post( - "/looks/${path_look_id}/copy", - mapOf("folder_id" to folder_id), - ) + return this.post("/looks/${path_look_id}/copy", + mapOf("folder_id" to folder_id)) } + /** * ### Move an existing look * @@ -6777,15 +6702,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun move_look( look_id: String, - folder_id: String, - ): SDKResponse { + folder_id: String + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch( - "/looks/${path_look_id}/move", - mapOf("folder_id" to folder_id), - ) + return this.patch("/looks/${path_look_id}/move", + mapOf("folder_id" to folder_id)) } + /** * ### Update look certification * @@ -6796,16 +6720,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_look_certification( look_id: String, - body: WriteCertification, - ): SDKResponse { + body: WriteCertification + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.patch("/looks/${path_look_id}/certification", mapOf(), body) + return this.patch("/looks/${path_look_id}/certification", mapOf(), body) } //endregion Look: Run and Manage Looks //region LookmlModel: Manage LookML Models + /** * ### Get information about all lookml models. * @@ -6826,22 +6751,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { exclude_empty: Boolean? = null, exclude_hidden: Boolean? = null, include_internal: Boolean? = null, - include_self_service: Boolean? = null, - ): SDKResponse { - return this.get( - "/lookml_models", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "exclude_empty" to exclude_empty, - "exclude_hidden" to exclude_hidden, - "include_internal" to include_internal, - "include_self_service" to include_self_service, - ), - ) + include_self_service: Boolean? = null + ) : SDKResponse { + return this.get("/lookml_models", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "exclude_empty" to exclude_empty, + "exclude_hidden" to exclude_hidden, + "include_internal" to include_internal, + "include_self_service" to include_self_service)) } + /** * ### Create a lookml model using the specified configuration. * @@ -6850,11 +6772,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /lookml_models -> ByteArray */ fun create_lookml_model( - body: WriteLookmlModel, - ): SDKResponse { - return this.post("/lookml_models", mapOf(), body) + body: WriteLookmlModel + ) : SDKResponse { + return this.post("/lookml_models", mapOf(), body) } + /** * ### Get information about a lookml model. * @@ -6865,15 +6788,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun lookml_model( lookml_model_name: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) - return this.get( - "/lookml_models/${path_lookml_model_name}", - mapOf("fields" to fields), - ) + return this.get("/lookml_models/${path_lookml_model_name}", + mapOf("fields" to fields)) } + /** * ### Update a lookml model using the specified configuration. * @@ -6884,12 +6806,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_lookml_model( lookml_model_name: String, - body: WriteLookmlModel, - ): SDKResponse { + body: WriteLookmlModel + ) : SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) - return this.patch("/lookml_models/${path_lookml_model_name}", mapOf(), body) + return this.patch("/lookml_models/${path_lookml_model_name}", mapOf(), body) } + /** * ### Delete a lookml model. * @@ -6898,12 +6821,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /lookml_models/{lookml_model_name} -> ByteArray */ fun delete_lookml_model( - lookml_model_name: String, - ): SDKResponse { + lookml_model_name: String + ) : SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) - return this.delete("/lookml_models/${path_lookml_model_name}", mapOf()) + return this.delete("/lookml_models/${path_lookml_model_name}", mapOf()) } + /** * ### Get information about a lookml model explore. * @@ -6918,23 +6842,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { lookml_model_name: String, explore_name: String, fields: String? = null, - add_drills_metadata: Boolean? = null, - ): SDKResponse { + add_drills_metadata: Boolean? = null + ) : SDKResponse { val path_lookml_model_name = encodeParam(lookml_model_name) val path_explore_name = encodeParam(explore_name) - return this.get( - "/lookml_models/${path_lookml_model_name}/explores/${path_explore_name}", - mapOf( - "fields" to fields, - "add_drills_metadata" to add_drills_metadata, - ), - ) + return this.get("/lookml_models/${path_lookml_model_name}/explores/${path_explore_name}", + mapOf("fields" to fields, + "add_drills_metadata" to add_drills_metadata)) } //endregion LookmlModel: Manage LookML Models //region Metadata: Connection Metadata Features + /** * ### Field name suggestions for a model and view * @@ -6969,20 +6890,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { view_name: String, field_name: String, term: String? = null, - filters: Any? = null, - ): SDKResponse { + filters: Any? = null + ) : SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) val path_field_name = encodeParam(field_name) - return this.get( - "/models/${path_model_name}/views/${path_view_name}/fields/${path_field_name}/suggestions", - mapOf( - "term" to term, - "filters" to filters, - ), - ) + return this.get("/models/${path_model_name}/views/${path_view_name}/fields/${path_field_name}/suggestions", + mapOf("term" to term, + "filters" to filters)) } + /** * ### Get a single model * @@ -6991,12 +6909,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /models/{model_name} -> ByteArray */ fun get_model( - model_name: String, - ): SDKResponse { + model_name: String + ) : SDKResponse { val path_model_name = encodeParam(model_name) - return this.get("/models/${path_model_name}", mapOf()) + return this.get("/models/${path_model_name}", mapOf()) } + /** * ### List databases available to this connection * @@ -7013,12 +6932,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /connections/{connection_name}/databases -> ByteArray */ fun connection_databases( - connection_name: String, - ): SDKResponse { + connection_name: String + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get("/connections/${path_connection_name}/databases", mapOf()) + return this.get("/connections/${path_connection_name}/databases", mapOf()) } + /** * ### Retrieve metadata features for this connection * @@ -7031,15 +6951,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun connection_features( connection_name: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get( - "/connections/${path_connection_name}/features", - mapOf("fields" to fields), - ) + return this.get("/connections/${path_connection_name}/features", + mapOf("fields" to fields)) } + /** * ### Get the list of schemas and tables for a connection * @@ -7054,19 +6973,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { connection_name: String, database: String? = null, cache: Boolean? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get( - "/connections/${path_connection_name}/schemas", - mapOf( - "database" to database, - "cache" to cache, - "fields" to fields, - ), - ) + return this.get("/connections/${path_connection_name}/schemas", + mapOf("database" to database, + "cache" to cache, + "fields" to fields)) } + /** * ### Get the list of tables for a schema * @@ -7092,22 +7008,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache: Boolean? = null, fields: String? = null, table_filter: String? = null, - table_limit: Long? = null, - ): SDKResponse { + table_limit: Long? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get( - "/connections/${path_connection_name}/tables", - mapOf( - "database" to database, - "schema_name" to schema_name, - "cache" to cache, - "fields" to fields, - "table_filter" to table_filter, - "table_limit" to table_limit, - ), - ) + return this.get("/connections/${path_connection_name}/tables", + mapOf("database" to database, + "schema_name" to schema_name, + "cache" to cache, + "fields" to fields, + "table_filter" to table_filter, + "table_limit" to table_limit)) } + /** * ### Get the columns (and therefore also the tables) in a specific schema * @@ -7128,22 +7041,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache: Boolean? = null, table_limit: Long? = null, table_names: String? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get( - "/connections/${path_connection_name}/columns", - mapOf( - "database" to database, - "schema_name" to schema_name, - "cache" to cache, - "table_limit" to table_limit, - "table_names" to table_names, - "fields" to fields, - ), - ) + return this.get("/connections/${path_connection_name}/columns", + mapOf("database" to database, + "schema_name" to schema_name, + "cache" to cache, + "table_limit" to table_limit, + "table_names" to table_names, + "fields" to fields)) } + /** * ### Search a connection for columns matching the specified name * @@ -7158,18 +7068,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun connection_search_columns( connection_name: String, column_name: String? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.get( - "/connections/${path_connection_name}/search_columns", - mapOf( - "column_name" to column_name, - "fields" to fields, - ), - ) + return this.get("/connections/${path_connection_name}/search_columns", + mapOf("column_name" to column_name, + "fields" to fields)) } + /** * ### Connection cost estimating * @@ -7186,20 +7093,18 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun connection_cost_estimate( connection_name: String, body: CreateCostEstimate, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_connection_name = encodeParam(connection_name) - return this.post( - "/connections/${path_connection_name}/cost_estimate", - mapOf("fields" to fields), - body, - ) + return this.post("/connections/${path_connection_name}/cost_estimate", + mapOf("fields" to fields), body) } //endregion Metadata: Connection Metadata Features //region Project: Manage Projects + /** * ### Search Continuous Integration Runs for a project. * @@ -7226,24 +7131,21 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { trigger_type: String? = null, limit: Long? = null, offset: Long? = null, - sorts: String? = null, - ): SDKResponse { + sorts: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/continuous_integration/runs/search", - mapOf( - "fields" to fields, - "suite_id" to suite_id, - "status" to status, - "user_id" to user_id, - "trigger_type" to trigger_type, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - ), - ) + return this.get("/projects/${path_project_id}/continuous_integration/runs/search", + mapOf("fields" to fields, + "suite_id" to suite_id, + "status" to status, + "user_id" to user_id, + "trigger_type" to trigger_type, + "limit" to limit, + "offset" to offset, + "sorts" to sorts)) } + /** * ### Fetches Multiple CI Suite Configurations for Project. * @@ -7260,20 +7162,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, limit: Long? = null, offset: Long? = null, - created_at: Date? = null, - ): SDKResponse { + created_at: Date? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/continuous_integration/suites", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "created_at" to created_at, - ), - ) + return this.get("/projects/${path_project_id}/continuous_integration/suites", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "created_at" to created_at)) } + /** * ### Fetches a CI Suite Configuration. * @@ -7286,16 +7185,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_continuous_integration_suite( project_id: String, body: WriteProjectCISuite, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/continuous_integration/suites", - mapOf("fields" to fields), - body, - ) + return this.post("/projects/${path_project_id}/continuous_integration/suites", + mapOf("fields" to fields), body) } + /** * ### Fetches a CI Suite Configuration. * @@ -7308,16 +7205,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun get_continuous_integration_suite( project_id: String, suite_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_suite_id = encodeParam(suite_id) - return this.get( - "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields)) } + /** * ### Updates a Continuous Integration Suite. * @@ -7332,17 +7228,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { project_id: String, suite_id: String, body: WriteProjectCISuite, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_suite_id = encodeParam(suite_id) - return this.patch( - "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields), body) } + /** * ### Deletes a Continuous Integration Suite. * @@ -7355,16 +7249,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun delete_continuous_integration_suite( project_id: String, suite_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_suite_id = encodeParam(suite_id) - return this.delete( - "/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", - mapOf("fields" to fields), - ) + return this.delete("/projects/${path_project_id}/continuous_integration/suites/${path_suite_id}", + mapOf("fields" to fields)) } + /** * ### Creates and queues a Continuous Integration Run. * @@ -7377,16 +7270,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_continuous_integration_run( project_id: String, body: CreateContinuousIntegrationRunRequest, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/continuous_integration/runs", - mapOf("fields" to fields), - body, - ) + return this.post("/projects/${path_project_id}/continuous_integration/runs", + mapOf("fields" to fields), body) } + /** * ### Duplicates and queues a Continuous Integration Run. * @@ -7399,16 +7290,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun duplicate_continuous_integration_run( project_id: String, run_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_run_id = encodeParam(run_id) - return this.post( - "/projects/${path_project_id}/continuous_integration/runs/${path_run_id}/duplicate", - mapOf("fields" to fields), - ) + return this.post("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}/duplicate", + mapOf("fields" to fields)) } + /** * ### Gets a Continuous Integration run. * @@ -7421,16 +7311,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun get_continuous_integration_run( project_id: String, run_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_run_id = encodeParam(run_id) - return this.get( - "/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", + mapOf("fields" to fields)) } + /** * ### Cancels a Continuous Integration Run. * @@ -7441,13 +7330,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun cancel_continuous_integration_run( project_id: String, - run_id: String, - ): SDKResponse { + run_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_run_id = encodeParam(run_id) - return this.delete("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", mapOf()) + return this.delete("/projects/${path_project_id}/continuous_integration/runs/${path_run_id}", mapOf()) } + /** * ### Generate Lockfile for All LookML Dependencies * @@ -7464,15 +7354,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun lock_all( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/manifest/lock_all", - mapOf("fields" to fields), - ) + return this.post("/projects/${path_project_id}/manifest/lock_all", + mapOf("fields" to fields)) } + /** * ### Get All Git Branches * @@ -7483,12 +7372,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git_branches -> ByteArray */ fun all_git_branches( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/git_branches", mapOf()) + return this.get("/projects/${path_project_id}/git_branches", mapOf()) } + /** * ### Get the Current Git Branch * @@ -7499,12 +7389,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git_branch -> ByteArray */ fun git_branch( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/git_branch", mapOf()) + return this.get("/projects/${path_project_id}/git_branch", mapOf()) } + /** * ### Checkout and/or reset --hard an existing Git Branch * @@ -7523,12 +7414,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_git_branch( project_id: String, - body: WriteGitBranch, - ): SDKResponse { + body: WriteGitBranch + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.put("/projects/${path_project_id}/git_branch", mapOf(), body) + return this.put("/projects/${path_project_id}/git_branch", mapOf(), body) } + /** * ### Create and Checkout a Git Branch * @@ -7546,12 +7438,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun create_git_branch( project_id: String, - body: WriteGitBranch, - ): SDKResponse { + body: WriteGitBranch + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/git_branch", mapOf(), body) + return this.post("/projects/${path_project_id}/git_branch", mapOf(), body) } + /** * ### Get the specified Git Branch * @@ -7564,13 +7457,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun find_git_branch( project_id: String, - branch_name: String, - ): SDKResponse { + branch_name: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_branch_name = encodeParam(branch_name) - return this.get("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) + return this.get("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) } + /** * ### Delete the specified Git Branch * @@ -7583,13 +7477,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_git_branch( project_id: String, - branch_name: String, - ): SDKResponse { + branch_name: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_branch_name = encodeParam(branch_name) - return this.delete("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) + return this.delete("/projects/${path_project_id}/git_branch/${path_branch_name}", mapOf()) } + /** * ### Deploy a Remote Branch or Ref to Production * @@ -7610,18 +7505,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun deploy_ref_to_production( project_id: String, branch: String? = null, - ref: String? = null, - ): SDKResponse { + ref: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/deploy_ref_to_production", - mapOf( - "branch" to branch, - "ref" to ref, - ), - ) + return this.post("/projects/${path_project_id}/deploy_ref_to_production", + mapOf("branch" to branch, + "ref" to ref)) } + /** * ### Asynchronously Deploy a Remote Branch or Ref to Production * @@ -7639,18 +7531,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun async_deploy_ref_to_production( project_id: String, branch: String? = null, - ref: String? = null, - ): SDKResponse { + 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, - ), - ) + 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. @@ -7662,13 +7551,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun async_deploy_status( project_id: String, - deployment_id: Long, - ): SDKResponse { + 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()) + return this.get("/projects/${path_project_id}/deploy_status/${path_deployment_id}", mapOf()) } + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -7688,12 +7578,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/deploy_to_production -> ByteArray */ fun deploy_to_production( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/deploy_to_production", mapOf()) + return this.post("/projects/${path_project_id}/deploy_to_production", mapOf()) } + /** * ### Reset a project to the revision of the project that is in production. * @@ -7704,12 +7595,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/reset_to_production -> ByteArray */ fun reset_project_to_production( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/reset_to_production", mapOf()) + return this.post("/projects/${path_project_id}/reset_to_production", mapOf()) } + /** * ### Reset a project development branch to the revision of the project that is on the remote. * @@ -7720,12 +7612,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/reset_to_remote -> ByteArray */ fun reset_project_to_remote( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/reset_to_remote", mapOf()) + return this.post("/projects/${path_project_id}/reset_to_remote", mapOf()) } + /** * ### Pull from Production * Pulls changes from the remote production branch into the current development workspace. @@ -7735,12 +7628,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/pull_from_production -> ByteArray */ fun pull_project_from_production( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/pull_from_production", mapOf()) + return this.post("/projects/${path_project_id}/pull_from_production", mapOf()) } + /** * ### Pull from Remote * Pulls changes from the remote tracking branch of the currently active branch into the local development workspace. @@ -7750,12 +7644,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/pull_from_remote -> ByteArray */ fun pull_project_from_remote( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/pull_from_remote", mapOf()) + return this.post("/projects/${path_project_id}/pull_from_remote", mapOf()) } + /** * ### Get All Projects * @@ -7766,14 +7661,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects -> ByteArray */ @JvmOverloads fun all_projects( - fields: String? = null, - ): SDKResponse { - return this.get( - "/projects", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/projects", + mapOf("fields" to fields)) } + /** * ### Create A Project * @@ -7788,11 +7682,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects -> ByteArray */ fun create_project( - body: WriteProject, - ): SDKResponse { - return this.post("/projects", mapOf(), body) + body: WriteProject + ) : SDKResponse { + return this.post("/projects", mapOf(), body) } + /** * ### Get A Project * @@ -7805,15 +7700,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}", + mapOf("fields" to fields)) } + /** * ### Update Project Configuration * @@ -7851,16 +7745,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_project( project_id: String, body: WriteProject, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.patch( - "/projects/${path_project_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/projects/${path_project_id}", + mapOf("fields" to fields), body) } + /** * ### Get A Projects Manifest object * @@ -7871,12 +7763,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/manifest -> ByteArray */ fun manifest( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/manifest", mapOf()) + return this.get("/projects/${path_project_id}/manifest", mapOf()) } + /** * ### Git Deploy Key * @@ -7887,12 +7780,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{project_id}/git/deploy_key -> ByteArray */ fun git_deploy_key( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get("/projects/${path_project_id}/git/deploy_key", mapOf()) + return this.get("/projects/${path_project_id}/git/deploy_key", mapOf()) } + /** * ### Create Git Deploy Key * @@ -7909,12 +7803,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /projects/{project_id}/git/deploy_key -> ByteArray */ fun create_git_deploy_key( - project_id: String, - ): SDKResponse { + project_id: String + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post("/projects/${path_project_id}/git/deploy_key", mapOf()) + return this.post("/projects/${path_project_id}/git/deploy_key", mapOf()) } + /** * ### Get Cached Project Validation Results * @@ -7936,15 +7831,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project_validation_results( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/validate", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/validate", + mapOf("fields" to fields)) } + /** * ### Validate Project * @@ -7963,15 +7857,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun validate_project( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/validate", - mapOf("fields" to fields), - ) + return this.post("/projects/${path_project_id}/validate", + mapOf("fields" to fields)) } + /** * ### Get Project Workspace * @@ -7984,15 +7877,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun project_workspace( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/current_workspace", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/current_workspace", + mapOf("fields" to fields)) } + /** * ### Get All Project Files * @@ -8005,15 +7897,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_project_files( project_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/files", - mapOf("fields" to fields), - ) + return this.get("/projects/${path_project_id}/files", + mapOf("fields" to fields)) } + /** * ### Get Project File Info * @@ -8028,18 +7919,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun project_file( project_id: String, file_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/files/file", - mapOf( - "file_id" to file_id, - "fields" to fields, - ), - ) + return this.get("/projects/${path_project_id}/files/file", + mapOf("file_id" to file_id, + "fields" to fields)) } + /** * ### Get All Git Connection Tests * @@ -8056,15 +7944,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_git_connection_tests( project_id: String, - remote_url: String? = null, - ): SDKResponse { + remote_url: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/git_connection_tests", - mapOf("remote_url" to remote_url), - ) + return this.get("/projects/${path_project_id}/git_connection_tests", + mapOf("remote_url" to remote_url)) } + /** * ### Run a git connection test * @@ -8085,19 +7972,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { project_id: String, test_id: String, remote_url: String? = null, - use_production: String? = null, - ): SDKResponse { + use_production: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) val path_test_id = encodeParam(test_id) - return this.get( - "/projects/${path_project_id}/git_connection_tests/${path_test_id}", - mapOf( - "remote_url" to remote_url, - "use_production" to use_production, - ), - ) + return this.get("/projects/${path_project_id}/git_connection_tests/${path_test_id}", + mapOf("remote_url" to remote_url, + "use_production" to use_production)) } + /** * ### Get All LookML Tests * @@ -8112,15 +7996,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_lookml_tests( project_id: String, - file_id: String? = null, - ): SDKResponse { + file_id: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/lookml_tests", - mapOf("file_id" to file_id), - ) + return this.get("/projects/${path_project_id}/lookml_tests", + mapOf("file_id" to file_id)) } + /** * ### Run LookML Tests * @@ -8137,19 +8020,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { project_id: String, file_id: String? = null, test: String? = null, - model: String? = null, - ): SDKResponse { + model: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.get( - "/projects/${path_project_id}/lookml_tests/run", - mapOf( - "file_id" to file_id, - "test" to test, - "model" to model, - ), - ) + return this.get("/projects/${path_project_id}/lookml_tests/run", + mapOf("file_id" to file_id, + "test" to test, + "model" to model)) } + /** * ### Creates a tag for the most recent commit, or a specific ref is a SHA is provided * @@ -8166,20 +8046,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { body: WriteProject, commit_sha: String? = null, tag_name: String? = null, - tag_message: String? = null, - ): SDKResponse { + tag_message: String? = null + ) : SDKResponse { val path_project_id = encodeParam(project_id) - return this.post( - "/projects/${path_project_id}/tag", - mapOf( - "commit_sha" to commit_sha, - "tag_name" to tag_name, - "tag_message" to tag_message, - ), - body, - ) + return this.post("/projects/${path_project_id}/tag", + mapOf("commit_sha" to commit_sha, + "tag_name" to tag_name, + "tag_message" to tag_message), body) } + /** * ### Configure Repository Credential for a remote dependency * @@ -8197,13 +8073,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fun update_repository_credential( root_project_id: String, credential_id: String, - body: WriteRepositoryCredential, - ): SDKResponse { + body: WriteRepositoryCredential + ) : SDKResponse { val path_root_project_id = encodeParam(root_project_id) val path_credential_id = encodeParam(credential_id) - return this.put("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf(), body) + return this.put("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf(), body) } + /** * ### Repository Credential for a remote dependency * @@ -8219,13 +8096,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_repository_credential( root_project_id: String, - credential_id: String, - ): SDKResponse { + credential_id: String + ) : SDKResponse { val path_root_project_id = encodeParam(root_project_id) val path_credential_id = encodeParam(credential_id) - return this.delete("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf()) + return this.delete("/projects/${path_root_project_id}/credential/${path_credential_id}", mapOf()) } + /** * ### Get all Repository Credentials for a project * @@ -8236,16 +8114,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /projects/{root_project_id}/credentials -> ByteArray */ fun get_all_repository_credentials( - root_project_id: String, - ): SDKResponse { + root_project_id: String + ) : SDKResponse { val path_root_project_id = encodeParam(root_project_id) - return this.get("/projects/${path_root_project_id}/credentials", mapOf()) + return this.get("/projects/${path_root_project_id}/credentials", mapOf()) } //endregion Project: Manage Projects //region Query: Run and Manage Queries + /** * ### Create an async query task * @@ -8283,27 +8162,23 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { path_prefix: String? = null, rebuild_pdts: Boolean? = null, server_table_calcs: Boolean? = null, - fields: String? = null, - ): SDKResponse { - return this.post( - "/query_tasks", - mapOf( - "limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - "fields" to fields, - ), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/query_tasks", + mapOf("limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs, + "fields" to fields), body) } + /** * ### Fetch results of multiple async queries * @@ -8318,14 +8193,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /query_tasks/multi_results -> ByteArray */ fun query_task_multi_results( - query_task_ids: DelimArray, - ): SDKResponse { - return this.get( - "/query_tasks/multi_results", - mapOf("query_task_ids" to query_task_ids), - ) + query_task_ids: DelimArray + ) : SDKResponse { + return this.get("/query_tasks/multi_results", + mapOf("query_task_ids" to query_task_ids)) } + /** * ### Get Query Task details * @@ -8342,15 +8216,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query_task( query_task_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.get( - "/query_tasks/${path_query_task_id}", - mapOf("fields" to fields), - ) + return this.get("/query_tasks/${path_query_task_id}", + mapOf("fields" to fields)) } + /** * ### Get Async Query Results * @@ -8381,12 +8254,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /query_tasks/{query_task_id}/results -> ByteArray */ fun query_task_results( - query_task_id: String, - ): SDKResponse { + query_task_id: String + ) : SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.get("/query_tasks/${path_query_task_id}/results", mapOf()) + return this.get("/query_tasks/${path_query_task_id}/results", mapOf()) } + /** * ### Get a previously created query by id. * @@ -8413,15 +8287,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query( query_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_query_id = encodeParam(query_id) - return this.get( - "/queries/${path_query_id}", - mapOf("fields" to fields), - ) + return this.get("/queries/${path_query_id}", + mapOf("fields" to fields)) } + /** * ### Get the query for a given query slug. * @@ -8448,15 +8321,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun query_for_slug( slug: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_slug = encodeParam(slug) - return this.get( - "/queries/slug/${path_slug}", - mapOf("fields" to fields), - ) + return this.get("/queries/slug/${path_slug}", + mapOf("fields" to fields)) } + /** * ### Create a query. * @@ -8474,15 +8346,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_query( body: WriteQuery, - fields: String? = null, - ): SDKResponse { - return this.post( - "/queries", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/queries", + mapOf("fields" to fields), body) } + /** * ### Run a saved query. * @@ -8542,29 +8412,26 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null, - ): SDKResponse { + server_table_calcs: Boolean? = null + ) : SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.get( - "/queries/${path_query_id}/run/${path_result_format}", - mapOf( - "limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - ), - ) + return this.get("/queries/${path_query_id}/run/${path_result_format}", + mapOf("limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs)) } + /** * ### Run the query that is specified inline in the posted body. * @@ -8653,29 +8520,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { cache_only: Boolean? = null, path_prefix: String? = null, rebuild_pdts: Boolean? = null, - server_table_calcs: Boolean? = null, - ): SDKResponse { + server_table_calcs: Boolean? = null + ) : SDKResponse { val path_result_format = encodeParam(result_format) - return this.post( - "/queries/run/${path_result_format}", - mapOf( - "limit" to limit, - "apply_formatting" to apply_formatting, - "apply_vis" to apply_vis, - "cache" to cache, - "image_width" to image_width, - "image_height" to image_height, - "generate_drill_links" to generate_drill_links, - "force_production" to force_production, - "cache_only" to cache_only, - "path_prefix" to path_prefix, - "rebuild_pdts" to rebuild_pdts, - "server_table_calcs" to server_table_calcs, - ), - body, - ) + return this.post("/queries/run/${path_result_format}", + mapOf("limit" to limit, + "apply_formatting" to apply_formatting, + "apply_vis" to apply_vis, + "cache" to cache, + "image_width" to image_width, + "image_height" to image_height, + "generate_drill_links" to generate_drill_links, + "force_production" to force_production, + "cache_only" to cache_only, + "path_prefix" to path_prefix, + "rebuild_pdts" to rebuild_pdts, + "server_table_calcs" to server_table_calcs), body) } + /** * ### Run an URL encoded query. * @@ -8744,14 +8607,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fun run_url_encoded_query( model_name: String, view_name: String, - result_format: String, - ): SDKResponse { + result_format: String + ) : SDKResponse { val path_model_name = encodeParam(model_name) val path_view_name = encodeParam(view_name) val path_result_format = encodeParam(result_format) - return this.get("/queries/models/${path_model_name}/views/${path_view_name}/run/${path_result_format}", mapOf()) + return this.get("/queries/models/${path_model_name}/views/${path_view_name}/run/${path_result_format}", mapOf()) } + /** * ### Get Merge Query * @@ -8764,15 +8628,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun merge_query( merge_query_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_merge_query_id = encodeParam(merge_query_id) - return this.get( - "/merge_queries/${path_merge_query_id}", - mapOf("fields" to fields), - ) + return this.get("/merge_queries/${path_merge_query_id}", + mapOf("fields" to fields)) } + /** * ### Create Merge Query * @@ -8799,24 +8662,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_merge_query( body: WriteMergeQuery? = null, - fields: String? = null, - ): SDKResponse { - return this.post( - "/merge_queries", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/merge_queries", + mapOf("fields" to fields), body) } + /** * Get information about all running queries. * * GET /running_queries -> ByteArray */ - fun all_running_queries(): SDKResponse { - return this.get("/running_queries", mapOf()) + fun all_running_queries( + + ) : SDKResponse { + return this.get("/running_queries", mapOf()) } + /** * Kill a query with a specific query_task_id. * @@ -8825,12 +8689,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /running_queries/{query_task_id} -> ByteArray */ fun kill_query( - query_task_id: String, - ): SDKResponse { + query_task_id: String + ) : SDKResponse { val path_query_task_id = encodeParam(query_task_id) - return this.delete("/running_queries/${path_query_task_id}", mapOf()) + return this.delete("/running_queries/${path_query_task_id}", mapOf()) } + /** * ### Create a SQL Runner Query * @@ -8841,11 +8706,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /sql_queries -> ByteArray */ fun create_sql_query( - body: SqlQueryCreate, - ): SDKResponse { - return this.post("/sql_queries", mapOf(), body) + body: SqlQueryCreate + ) : SDKResponse { + return this.post("/sql_queries", mapOf(), body) } + /** * Get a SQL Runner query. * @@ -8854,12 +8720,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /sql_queries/{slug} -> ByteArray */ fun sql_query( - slug: String, - ): SDKResponse { + slug: String + ) : SDKResponse { val path_slug = encodeParam(slug) - return this.get("/sql_queries/${path_slug}", mapOf()) + return this.get("/sql_queries/${path_slug}", mapOf()) } + /** * Execute a SQL Runner query in a given result_format. * @@ -8872,20 +8739,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun run_sql_query( slug: String, result_format: String, - download: String? = null, - ): SDKResponse { + download: String? = null + ) : SDKResponse { val path_slug = encodeParam(slug) val path_result_format = encodeParam(result_format) - return this.post( - "/sql_queries/${path_slug}/run/${path_result_format}", - mapOf("download" to download), - ) + return this.post("/sql_queries/${path_slug}/run/${path_result_format}", + mapOf("download" to download)) } //endregion Query: Run and Manage Queries //region RenderTask: Manage Render Tasks + /** * ### Create a new task to render a look to an image. * @@ -8906,20 +8772,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) val path_result_format = encodeParam(result_format) - return this.post( - "/render_tasks/looks/${path_look_id}/${path_result_format}", - mapOf( - "width" to width, - "height" to height, - "fields" to fields, - ), - ) + return this.post("/render_tasks/looks/${path_look_id}/${path_result_format}", + mapOf("width" to width, + "height" to height, + "fields" to fields)) } + /** * ### Create a new task to render an existing query to an image. * @@ -8940,20 +8803,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.post( - "/render_tasks/queries/${path_query_id}/${path_result_format}", - mapOf( - "width" to width, - "height" to height, - "fields" to fields, - ), - ) + return this.post("/render_tasks/queries/${path_query_id}/${path_result_format}", + mapOf("width" to width, + "height" to height, + "fields" to fields)) } + /** * ### Create a new task to render a dashboard to a document or image. * @@ -8984,25 +8844,21 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { pdf_paper_size: String? = null, pdf_landscape: Boolean? = null, long_tables: Boolean? = null, - theme: String? = null, - ): SDKResponse { + theme: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) val path_result_format = encodeParam(result_format) - return this.post( - "/render_tasks/dashboards/${path_dashboard_id}/${path_result_format}", - mapOf( - "width" to width, - "height" to height, - "fields" to fields, - "pdf_paper_size" to pdf_paper_size, - "pdf_landscape" to pdf_landscape, - "long_tables" to long_tables, - "theme" to theme, - ), - body, - ) + return this.post("/render_tasks/dashboards/${path_dashboard_id}/${path_result_format}", + mapOf("width" to width, + "height" to height, + "fields" to fields, + "pdf_paper_size" to pdf_paper_size, + "pdf_landscape" to pdf_landscape, + "long_tables" to long_tables, + "theme" to theme), body) } + /** * ### Get information about a render task. * @@ -9017,15 +8873,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun render_task( render_task_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_render_task_id = encodeParam(render_task_id) - return this.get( - "/render_tasks/${path_render_task_id}", - mapOf("fields" to fields), - ) + return this.get("/render_tasks/${path_render_task_id}", + mapOf("fields" to fields)) } + /** * ### Get the document or image produced by a completed render task. * @@ -9052,12 +8907,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * **Note**: Binary content is returned by this method. */ fun render_task_results( - render_task_id: String, - ): SDKResponse { + render_task_id: String + ) : SDKResponse { val path_render_task_id = encodeParam(render_task_id) - return this.get("/render_tasks/${path_render_task_id}/results", mapOf()) + return this.get("/render_tasks/${path_render_task_id}/results", mapOf()) } + /** * ### Create a new task to render a dashboard element to an image. * @@ -9078,24 +8934,21 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { result_format: String, width: Long, height: Long, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_element_id = encodeParam(dashboard_element_id) val path_result_format = encodeParam(result_format) - return this.post( - "/render_tasks/dashboard_elements/${path_dashboard_element_id}/${path_result_format}", - mapOf( - "width" to width, - "height" to height, - "fields" to fields, - ), - ) + return this.post("/render_tasks/dashboard_elements/${path_dashboard_element_id}/${path_result_format}", + mapOf("width" to width, + "height" to height, + "fields" to fields)) } //endregion RenderTask: Manage Render Tasks //region Report: Report + /** * ### Search Reports * @@ -9143,28 +8996,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, limit: Long? = null, fields: String? = null, - next_page_token: String? = null, - ): SDKResponse { - return this.get( - "/reports/search", - mapOf( - "folder_id" to folder_id, - "favorite" to favorite, - "recent" to recent, - "id" to id, - "title" to title, - "sorts" to sorts, - "limit" to limit, - "fields" to fields, - "next_page_token" to next_page_token, - ), - ) + next_page_token: String? = null + ) : SDKResponse { + return this.get("/reports/search", + mapOf("folder_id" to folder_id, + "favorite" to favorite, + "recent" to recent, + "id" to id, + "title" to title, + "sorts" to sorts, + "limit" to limit, + "fields" to fields, + "next_page_token" to next_page_token)) } //endregion Report: Report //region Role: Manage Roles + /** * ### Search model sets * Returns all model set records that match the given search criteria. @@ -9212,25 +9062,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { all_access: Boolean? = null, built_in: Boolean? = null, filter_or: Boolean? = null, - models: String? = null, - ): SDKResponse { - return this.get( - "/model_sets/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "all_access" to all_access, - "built_in" to built_in, - "filter_or" to filter_or, - "models" to models, - ), - ) + models: String? = null + ) : SDKResponse { + return this.get("/model_sets/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "all_access" to all_access, + "built_in" to built_in, + "filter_or" to filter_or, + "models" to models)) } + /** * ### Get information about the model set with a specific id. * @@ -9241,15 +9088,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun model_set( model_set_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_model_set_id = encodeParam(model_set_id) - return this.get( - "/model_sets/${path_model_set_id}", - mapOf("fields" to fields), - ) + return this.get("/model_sets/${path_model_set_id}", + mapOf("fields" to fields)) } + /** * ### Update information about the model set with a specific id. * @@ -9260,12 +9106,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_model_set( model_set_id: String, - body: WriteModelSet, - ): SDKResponse { + body: WriteModelSet + ) : SDKResponse { val path_model_set_id = encodeParam(model_set_id) - return this.patch("/model_sets/${path_model_set_id}", mapOf(), body) + return this.patch("/model_sets/${path_model_set_id}", mapOf(), body) } + /** * ### Delete the model set with a specific id. * @@ -9274,12 +9121,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /model_sets/{model_set_id} -> ByteArray */ fun delete_model_set( - model_set_id: String, - ): SDKResponse { + model_set_id: String + ) : SDKResponse { val path_model_set_id = encodeParam(model_set_id) - return this.delete("/model_sets/${path_model_set_id}", mapOf()) + return this.delete("/model_sets/${path_model_set_id}", mapOf()) } + /** * ### Get information about all model sets. * @@ -9288,14 +9136,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /model_sets -> ByteArray */ @JvmOverloads fun all_model_sets( - fields: String? = null, - ): SDKResponse { - return this.get( - "/model_sets", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/model_sets", + mapOf("fields" to fields)) } + /** * ### Create a model set with the specified information. Model sets are used by Roles. * @@ -9304,20 +9151,24 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /model_sets -> ByteArray */ fun create_model_set( - body: WriteModelSet, - ): SDKResponse { - return this.post("/model_sets", mapOf(), body) + body: WriteModelSet + ) : SDKResponse { + return this.post("/model_sets", mapOf(), body) } + /** * ### Get all supported permissions. * * GET /permissions -> ByteArray */ - fun all_permissions(): SDKResponse { - return this.get("/permissions", mapOf()) + fun all_permissions( + + ) : SDKResponse { + return this.get("/permissions", mapOf()) } + /** * ### Search permission sets * Returns all permission set records that match the given search criteria. @@ -9365,25 +9216,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { all_access: Boolean? = null, built_in: Boolean? = null, filter_or: Boolean? = null, - permissions: String? = null, - ): SDKResponse { - return this.get( - "/permission_sets/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "all_access" to all_access, - "built_in" to built_in, - "filter_or" to filter_or, - "permissions" to permissions, - ), - ) + permissions: String? = null + ) : SDKResponse { + return this.get("/permission_sets/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "all_access" to all_access, + "built_in" to built_in, + "filter_or" to filter_or, + "permissions" to permissions)) } + /** * ### Get information about the permission set with a specific id. * @@ -9394,15 +9242,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun permission_set( permission_set_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) - return this.get( - "/permission_sets/${path_permission_set_id}", - mapOf("fields" to fields), - ) + return this.get("/permission_sets/${path_permission_set_id}", + mapOf("fields" to fields)) } + /** * ### Update information about the permission set with a specific id. * Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. @@ -9414,12 +9261,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_permission_set( permission_set_id: String, - body: WritePermissionSet, - ): SDKResponse { + body: WritePermissionSet + ) : SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) - return this.patch("/permission_sets/${path_permission_set_id}", mapOf(), body) + return this.patch("/permission_sets/${path_permission_set_id}", mapOf(), body) } + /** * ### Delete the permission set with a specific id. * @@ -9428,12 +9276,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /permission_sets/{permission_set_id} -> ByteArray */ fun delete_permission_set( - permission_set_id: String, - ): SDKResponse { + permission_set_id: String + ) : SDKResponse { val path_permission_set_id = encodeParam(permission_set_id) - return this.delete("/permission_sets/${path_permission_set_id}", mapOf()) + return this.delete("/permission_sets/${path_permission_set_id}", mapOf()) } + /** * ### Get information about all permission sets. * @@ -9442,14 +9291,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /permission_sets -> ByteArray */ @JvmOverloads fun all_permission_sets( - fields: String? = null, - ): SDKResponse { - return this.get( - "/permission_sets", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/permission_sets", + mapOf("fields" to fields)) } + /** * ### Create a permission set with the specified information. Permission sets are used by Roles. * Providing save_content permission alone will also provide you the abilities of save_looks and save_dashboards. @@ -9459,11 +9307,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /permission_sets -> ByteArray */ fun create_permission_set( - body: WritePermissionSet, - ): SDKResponse { - return this.post("/permission_sets", mapOf(), body) + body: WritePermissionSet + ) : SDKResponse { + return this.post("/permission_sets", mapOf(), body) } + /** * ### Get information about all roles. * @@ -9476,18 +9325,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_roles( fields: String? = null, ids: DelimArray? = null, - get_all_support_roles: Boolean? = null, - ): SDKResponse { - return this.get( - "/roles", - mapOf( - "fields" to fields, - "ids" to ids, - "get_all_support_roles" to get_all_support_roles, - ), - ) + get_all_support_roles: Boolean? = null + ) : SDKResponse { + return this.get("/roles", + mapOf("fields" to fields, + "ids" to ids, + "get_all_support_roles" to get_all_support_roles)) } + /** * ### Create a role with the specified information. * @@ -9496,11 +9342,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /roles -> ByteArray */ fun create_role( - body: WriteRole, - ): SDKResponse { - return this.post("/roles", mapOf(), body) + body: WriteRole + ) : SDKResponse { + return this.post("/roles", mapOf(), body) } + /** * ### Search roles * @@ -9550,25 +9397,22 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { permission_set_ids: String? = null, name: String? = null, built_in: Boolean? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get( - "/roles/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "model_set_ids" to model_set_ids, - "permission_set_ids" to permission_set_ids, - "name" to name, - "built_in" to built_in, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get("/roles/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "model_set_ids" to model_set_ids, + "permission_set_ids" to permission_set_ids, + "name" to name, + "built_in" to built_in, + "filter_or" to filter_or)) } + /** * ### Search roles include user count * @@ -9615,23 +9459,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, name: String? = null, built_in: Boolean? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get( - "/roles/search/with_user_count", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "name" to name, - "built_in" to built_in, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get("/roles/search/with_user_count", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "name" to name, + "built_in" to built_in, + "filter_or" to filter_or)) } + /** * ### Get information about the role with a specific id. * @@ -9640,12 +9481,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /roles/{role_id} -> ByteArray */ fun role( - role_id: String, - ): SDKResponse { + role_id: String + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.get("/roles/${path_role_id}", mapOf()) + return this.get("/roles/${path_role_id}", mapOf()) } + /** * ### Update information about the role with a specific id. * @@ -9656,12 +9498,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_role( role_id: String, - body: WriteRole, - ): SDKResponse { + body: WriteRole + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.patch("/roles/${path_role_id}", mapOf(), body) + return this.patch("/roles/${path_role_id}", mapOf(), body) } + /** * ### Delete the role with a specific id. * @@ -9670,12 +9513,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /roles/{role_id} -> ByteArray */ fun delete_role( - role_id: String, - ): SDKResponse { + role_id: String + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.delete("/roles/${path_role_id}", mapOf()) + return this.delete("/roles/${path_role_id}", mapOf()) } + /** * ### Get information about all the groups with the role that has a specific id. * @@ -9686,15 +9530,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun role_groups( role_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.get( - "/roles/${path_role_id}/groups", - mapOf("fields" to fields), - ) + return this.get("/roles/${path_role_id}/groups", + mapOf("fields" to fields)) } + /** * ### Set all groups for a role, removing all existing group associations from that role. * @@ -9707,12 +9550,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun set_role_groups( role_id: String, - body: Array, - ): SDKResponse { + body: Array + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.put("/roles/${path_role_id}/groups", mapOf(), body) + return this.put("/roles/${path_role_id}/groups", mapOf(), body) } + /** * ### Get information about all the users with the role that has a specific id. * @@ -9725,18 +9569,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun role_users( role_id: String, fields: String? = null, - direct_association_only: Boolean? = null, - ): SDKResponse { + direct_association_only: Boolean? = null + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.get( - "/roles/${path_role_id}/users", - mapOf( - "fields" to fields, - "direct_association_only" to direct_association_only, - ), - ) + return this.get("/roles/${path_role_id}/users", + mapOf("fields" to fields, + "direct_association_only" to direct_association_only)) } + /** * ### Set all the users of the role with a specific id. * @@ -9747,16 +9588,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun set_role_users( role_id: String, - body: Array, - ): SDKResponse { + body: Array + ) : SDKResponse { val path_role_id = encodeParam(role_id) - return this.put("/roles/${path_role_id}/users", mapOf(), body) + return this.put("/roles/${path_role_id}/users", mapOf(), body) } //endregion Role: Manage Roles //region ScheduledPlan: Manage Scheduled Plans + /** * ### Get Scheduled Plans for a Space * @@ -9769,15 +9611,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plans_for_space( space_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_space_id = encodeParam(space_id) - return this.get( - "/scheduled_plans/space/${path_space_id}", - mapOf("fields" to fields), - ) + return this.get("/scheduled_plans/space/${path_space_id}", + mapOf("fields" to fields)) } + /** * ### Get Information About a Scheduled Plan * @@ -9790,15 +9631,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plan( scheduled_plan_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.get( - "/scheduled_plans/${path_scheduled_plan_id}", - mapOf("fields" to fields), - ) + return this.get("/scheduled_plans/${path_scheduled_plan_id}", + mapOf("fields" to fields)) } + /** * ### Update a Scheduled Plan * @@ -9850,12 +9690,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_scheduled_plan( scheduled_plan_id: String, - body: WriteScheduledPlan, - ): SDKResponse { + body: WriteScheduledPlan + ) : SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.patch("/scheduled_plans/${path_scheduled_plan_id}", mapOf(), body) + return this.patch("/scheduled_plans/${path_scheduled_plan_id}", mapOf(), body) } + /** * ### Delete a Scheduled Plan * @@ -9868,12 +9709,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /scheduled_plans/{scheduled_plan_id} -> ByteArray */ fun delete_scheduled_plan( - scheduled_plan_id: String, - ): SDKResponse { + scheduled_plan_id: String + ) : SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.delete("/scheduled_plans/${path_scheduled_plan_id}", mapOf()) + return this.delete("/scheduled_plans/${path_scheduled_plan_id}", mapOf()) } + /** * ### List All Scheduled Plans * @@ -9896,18 +9738,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun all_scheduled_plans( user_id: String? = null, fields: String? = null, - all_users: Boolean? = null, - ): SDKResponse { - return this.get( - "/scheduled_plans", - mapOf( - "user_id" to user_id, - "fields" to fields, - "all_users" to all_users, - ), - ) + all_users: Boolean? = null + ) : SDKResponse { + return this.get("/scheduled_plans", + mapOf("user_id" to user_id, + "fields" to fields, + "all_users" to all_users)) } + /** * ### Create a Scheduled Plan * @@ -9973,11 +9812,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /scheduled_plans -> ByteArray */ fun create_scheduled_plan( - body: WriteScheduledPlan, - ): SDKResponse { - return this.post("/scheduled_plans", mapOf(), body) + body: WriteScheduledPlan + ) : SDKResponse { + return this.post("/scheduled_plans", mapOf(), body) } + /** * ### Run a Scheduled Plan Immediately * @@ -10022,11 +9862,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /scheduled_plans/run_once -> ByteArray */ fun scheduled_plan_run_once( - body: WriteScheduledPlan, - ): SDKResponse { - return this.post("/scheduled_plans/run_once", mapOf(), body) + body: WriteScheduledPlan + ) : SDKResponse { + return this.post("/scheduled_plans/run_once", mapOf(), body) } + /** * ### Search Scheduled Plans * @@ -10083,35 +9924,32 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { run_once: Boolean? = null, enabled: Boolean? = null, last_run_status: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get( - "/scheduled_plans/search", - mapOf( - "user_id" to user_id, - "fields" to fields, - "all_users" to all_users, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "name" to name, - "user_first_name" to user_first_name, - "user_last_name" to user_last_name, - "dashboard_id" to dashboard_id, - "look_id" to look_id, - "lookml_dashboard_id" to lookml_dashboard_id, - "recipient" to recipient, - "destination_type" to destination_type, - "delivery_format" to delivery_format, - "all_states" to all_states, - "run_once" to run_once, - "enabled" to enabled, - "last_run_status" to last_run_status, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get("/scheduled_plans/search", + mapOf("user_id" to user_id, + "fields" to fields, + "all_users" to all_users, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "name" to name, + "user_first_name" to user_first_name, + "user_last_name" to user_last_name, + "dashboard_id" to dashboard_id, + "look_id" to look_id, + "lookml_dashboard_id" to lookml_dashboard_id, + "recipient" to recipient, + "destination_type" to destination_type, + "delivery_format" to delivery_format, + "all_states" to all_states, + "run_once" to run_once, + "enabled" to enabled, + "last_run_status" to last_run_status, + "filter_or" to filter_or)) } + /** * ### Get Scheduled Plans for a Look * @@ -10136,19 +9974,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { look_id: String, user_id: String? = null, fields: String? = null, - all_users: Boolean? = null, - ): SDKResponse { + all_users: Boolean? = null + ) : SDKResponse { val path_look_id = encodeParam(look_id) - return this.get( - "/scheduled_plans/look/${path_look_id}", - mapOf( - "user_id" to user_id, - "fields" to fields, - "all_users" to all_users, - ), - ) + return this.get("/scheduled_plans/look/${path_look_id}", + mapOf("user_id" to user_id, + "fields" to fields, + "all_users" to all_users)) } + /** * ### Get Scheduled Plans for a Dashboard * @@ -10173,19 +10008,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { dashboard_id: String, user_id: String? = null, all_users: Boolean? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_dashboard_id = encodeParam(dashboard_id) - return this.get( - "/scheduled_plans/dashboard/${path_dashboard_id}", - mapOf( - "user_id" to user_id, - "all_users" to all_users, - "fields" to fields, - ), - ) + return this.get("/scheduled_plans/dashboard/${path_dashboard_id}", + mapOf("user_id" to user_id, + "all_users" to all_users, + "fields" to fields)) } + /** * ### Get Scheduled Plans for a LookML Dashboard * @@ -10210,19 +10042,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { lookml_dashboard_id: String, user_id: String? = null, fields: String? = null, - all_users: Boolean? = null, - ): SDKResponse { + all_users: Boolean? = null + ) : SDKResponse { val path_lookml_dashboard_id = encodeParam(lookml_dashboard_id) - return this.get( - "/scheduled_plans/lookml_dashboard/${path_lookml_dashboard_id}", - mapOf( - "user_id" to user_id, - "fields" to fields, - "all_users" to all_users, - ), - ) + return this.get("/scheduled_plans/lookml_dashboard/${path_lookml_dashboard_id}", + mapOf("user_id" to user_id, + "fields" to fields, + "all_users" to all_users)) } + /** * ### Run a Scheduled Plan By Id Immediately * This function creates a run-once schedule plan based on an existing scheduled plan, @@ -10279,16 +10108,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun scheduled_plan_run_once_by_id( scheduled_plan_id: String, - body: WriteScheduledPlan? = null, - ): SDKResponse { + body: WriteScheduledPlan? = null + ) : SDKResponse { val path_scheduled_plan_id = encodeParam(scheduled_plan_id) - return this.post("/scheduled_plans/${path_scheduled_plan_id}/run_once", mapOf(), body) + return this.post("/scheduled_plans/${path_scheduled_plan_id}/run_once", mapOf(), body) } //endregion ScheduledPlan: Manage Scheduled Plans //region SelfService: Self Service Models + /** * ### Get Allowed Connections under advanced connection governance * @@ -10300,14 +10130,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * 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), - ) + google_sheets: Boolean? = null + ) : SDKResponse { + return this.get("/self_service_models/allowed_connections", + mapOf("google_sheets" to google_sheets)) } + /** * ### Get Generated LookML for a Self Service Model * @@ -10316,12 +10145,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /self_service_models/{model_name}/lookml -> ByteArray */ fun get_self_service_model_lookml( - model_name: String, - ): SDKResponse { + model_name: String + ) : SDKResponse { val path_model_name = encodeParam(model_name) - return this.get("/self_service_models/${path_model_name}/lookml", mapOf()) + return this.get("/self_service_models/${path_model_name}/lookml", mapOf()) } + /** * ### Update certification for a Self Service Explore * @@ -10332,16 +10162,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_self_service_explore_certification( model_name: String, - body: WriteCertification, - ): SDKResponse { + body: WriteCertification + ) : SDKResponse { val path_model_name = encodeParam(model_name) - return this.patch("/self_service_models/${path_model_name}/certification", mapOf(), body) + return this.patch("/self_service_models/${path_model_name}/certification", mapOf(), body) } //endregion SelfService: Self Service Models //region Session: Session Information + /** * ### Get API Session * @@ -10349,10 +10180,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /session -> ByteArray */ - fun session(): SDKResponse { - return this.get("/session", mapOf()) + fun session( + + ) : SDKResponse { + return this.get("/session", mapOf()) } + /** * ### Update API Session * @@ -10380,15 +10214,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * PATCH /session -> ByteArray */ fun update_session( - body: WriteApiSession, - ): SDKResponse { - return this.patch("/session", mapOf(), body) + body: WriteApiSession + ) : SDKResponse { + return this.patch("/session", mapOf(), body) } //endregion Session: Session Information //region SqlInterfaceQuery: Run and Manage SQL Interface Queries + /** * ### Handles Avatica RPC metadata requests for SQL Interface queries * @@ -10397,14 +10232,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /sql_interface_queries/metadata -> ByteArray */ @JvmOverloads fun sql_interface_metadata( - avatica_request: String? = null, - ): SDKResponse { - return this.get( - "/sql_interface_queries/metadata", - mapOf("avatica_request" to avatica_request), - ) + avatica_request: String? = null + ) : SDKResponse { + return this.get("/sql_interface_queries/metadata", + mapOf("avatica_request" to avatica_request)) } + /** * ### Run a saved SQL interface query. * @@ -10425,13 +10259,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun run_sql_interface_query( query_id: Long, - result_format: String, - ): SDKResponse { + result_format: String + ) : SDKResponse { val path_query_id = encodeParam(query_id) val path_result_format = encodeParam(result_format) - return this.get("/sql_interface_queries/${path_query_id}/run/${path_result_format}", mapOf()) + return this.get("/sql_interface_queries/${path_query_id}/run/${path_result_format}", mapOf()) } + /** * ### Create a SQL interface query. * @@ -10447,15 +10282,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /sql_interface_queries -> ByteArray */ fun create_sql_interface_query( - body: WriteSqlInterfaceQueryCreate, - ): SDKResponse { - return this.post("/sql_interface_queries", mapOf(), body) + body: WriteSqlInterfaceQueryCreate + ) : SDKResponse { + return this.post("/sql_interface_queries", mapOf(), body) } //endregion SqlInterfaceQuery: Run and Manage SQL Interface Queries //region Theme: Manage Themes + /** * ### Get an array of all existing themes * @@ -10470,14 +10306,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /themes -> ByteArray */ @JvmOverloads fun all_themes( - fields: String? = null, - ): SDKResponse { - return this.get( - "/themes", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/themes", + mapOf("fields" to fields)) } + /** * ### Create a theme * @@ -10500,11 +10335,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /themes -> ByteArray */ fun create_theme( - body: WriteTheme, - ): SDKResponse { - return this.post("/themes", mapOf(), body) + body: WriteTheme + ) : SDKResponse { + return this.post("/themes", mapOf(), body) } + /** * ### Search all themes for matching criteria. * @@ -10568,25 +10404,22 @@ 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", - mapOf( - "id" to id, - "name" to name, - "begin_at" to begin_at, - "end_at" to end_at, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "fields" to fields, - "filter_or" to filter_or, - "theme_type" to theme_type, - ), - ) + theme_type: String? = null + ) : SDKResponse { + return this.get("/themes/search", + mapOf("id" to id, + "name" to name, + "begin_at" to begin_at, + "end_at" to end_at, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "fields" to fields, + "filter_or" to filter_or, + "theme_type" to theme_type)) } + /** * ### Get the default theme * @@ -10603,16 +10436,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /themes/default -> ByteArray */ @Deprecated(message = "Deprecated method") - @JvmOverloads - fun default_theme( - ts: Date? = null, - ): SDKResponse { - return this.get( - "/themes/default", - mapOf("ts" to ts), - ) + @JvmOverloads fun default_theme( + ts: Date? = null + ) : SDKResponse { + return this.get("/themes/default", + mapOf("ts" to ts)) } + /** * ### Set the global default theme by theme name * @@ -10634,14 +10465,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @Deprecated(message = "Deprecated method") fun set_default_theme( - name: String, - ): SDKResponse { - return this.put( - "/themes/default", - mapOf("name" to name), - ) + name: String + ) : SDKResponse { + return this.put("/themes/default", + mapOf("name" to name)) } + /** * ### Get the default theme * @@ -10660,17 +10490,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun default_theme_by_type( theme_type: String, - ts: Date? = null, - ): SDKResponse { - return this.get( - "/themes/default_theme", - mapOf( - "ts" to ts, - "theme_type" to theme_type, - ), - ) + ts: Date? = null + ) : SDKResponse { + return this.get("/themes/default_theme", + mapOf("ts" to ts, + "theme_type" to theme_type)) } + /** * ### Set the global default theme by theme name * @@ -10691,17 +10518,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun set_default_theme_by_type( name: String, - theme_type: String, - ): SDKResponse { - return this.put( - "/themes/default_theme", - mapOf( - "name" to name, - "theme_type" to theme_type, - ), - ) + theme_type: String + ) : SDKResponse { + return this.put("/themes/default_theme", + mapOf("name" to name, + "theme_type" to theme_type)) } + /** * ### Get active themes * @@ -10724,19 +10548,16 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { name: String? = null, ts: Date? = null, theme_type: String? = null, - fields: String? = null, - ): SDKResponse { - return this.get( - "/themes/active", - mapOf( - "name" to name, - "ts" to ts, - "theme_type" to theme_type, - "fields" to fields, - ), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/themes/active", + mapOf("name" to name, + "ts" to ts, + "theme_type" to theme_type, + "fields" to fields)) } + /** * ### Get the named theme if it's active. Otherwise, return the default theme * @@ -10752,17 +10573,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun theme_or_default( name: String, - ts: Date? = null, - ): SDKResponse { - return this.get( - "/themes/theme_or_default", - mapOf( - "name" to name, - "ts" to ts, - ), - ) + ts: Date? = null + ) : SDKResponse { + return this.get("/themes/theme_or_default", + mapOf("name" to name, + "ts" to ts)) } + /** * ### Validate a theme with the specified information * @@ -10777,11 +10595,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /themes/validate -> ByteArray */ fun validate_theme( - body: WriteTheme, - ): SDKResponse { - return this.post("/themes/validate", mapOf(), body) + body: WriteTheme + ) : SDKResponse { + return this.post("/themes/validate", mapOf(), body) } + /** * ### Get a theme by ID * @@ -10796,15 +10615,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun theme( theme_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_theme_id = encodeParam(theme_id) - return this.get( - "/themes/${path_theme_id}", - mapOf("fields" to fields), - ) + return this.get("/themes/${path_theme_id}", + mapOf("fields" to fields)) } + /** * ### Update the theme by id. * @@ -10817,12 +10635,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun update_theme( theme_id: String, - body: WriteTheme, - ): SDKResponse { + body: WriteTheme + ) : SDKResponse { val path_theme_id = encodeParam(theme_id) - return this.patch("/themes/${path_theme_id}", mapOf(), body) + return this.patch("/themes/${path_theme_id}", mapOf(), body) } + /** * ### Delete a specific theme by id * @@ -10839,16 +10658,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /themes/{theme_id} -> ByteArray */ fun delete_theme( - theme_id: String, - ): SDKResponse { + theme_id: String + ) : SDKResponse { val path_theme_id = encodeParam(theme_id) - return this.delete("/themes/${path_theme_id}", mapOf()) + return this.delete("/themes/${path_theme_id}", mapOf()) } //endregion Theme: Manage Themes //region User: Manage Users + /** * ### Search email credentials * @@ -10897,23 +10717,20 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { id: String? = null, email: String? = null, emails: String? = null, - filter_or: Boolean? = null, - ): SDKResponse { - return this.get( - "/credentials_email/search", - mapOf( - "fields" to fields, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "email" to email, - "emails" to emails, - "filter_or" to filter_or, - ), - ) + filter_or: Boolean? = null + ) : SDKResponse { + return this.get("/credentials_email/search", + mapOf("fields" to fields, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "email" to email, + "emails" to emails, + "filter_or" to filter_or)) } + /** * ### Email/password login information for the specified user. * @@ -10926,15 +10743,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_email( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_email", + mapOf("fields" to fields)) } + /** * ### Email/password login information for the specified user. * @@ -10949,16 +10765,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_email( user_id: String, body: WriteCredentialsEmail, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - body, - ) + return this.post("/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), body) } + /** * ### Email/password login information for the specified user. * @@ -10973,16 +10787,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user_credentials_email( user_id: String, body: WriteCredentialsEmail, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch( - "/users/${path_user_id}/credentials_email", - mapOf("fields" to fields), - body, - ) + return this.patch("/users/${path_user_id}/credentials_email", + mapOf("fields" to fields), body) } + /** * ### Email/password login information for the specified user. * @@ -10993,12 +10805,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_email -> ByteArray */ fun delete_user_credentials_email( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_email", mapOf()) + return this.delete("/users/${path_user_id}/credentials_email", mapOf()) } + /** * ### Create a password reset token. * This will create a cryptographically secure random password reset token for the user. @@ -11021,18 +10834,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_email_password_reset( user_id: String, expires: Boolean? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email/password_reset", - mapOf( - "expires" to expires, - "fields" to fields, - ), - ) + return this.post("/users/${path_user_id}/credentials_email/password_reset", + mapOf("expires" to expires, + "fields" to fields)) } + /** * ### Send a password reset token. * This will send a password reset email to the user. If a password reset token does not already exist @@ -11051,15 +10861,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun send_user_credentials_email_password_reset( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_email/send_password_reset", - mapOf("fields" to fields), - ) + return this.post("/users/${path_user_id}/credentials_email/send_password_reset", + mapOf("fields" to fields)) } + /** * ### Google authentication login information for the specified user. * @@ -11070,15 +10879,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_google( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_google", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_google", + mapOf("fields" to fields)) } + /** * ### Delete Google authentication login information for the specified user. * @@ -11087,12 +10895,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_google -> ByteArray */ fun delete_user_credentials_google( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_google", mapOf()) + return this.delete("/users/${path_user_id}/credentials_google", mapOf()) } + /** * ### Looker Openid login information for the specified user. Used by Looker Analysts. * @@ -11105,15 +10914,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_looker_openid( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_looker_openid", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_looker_openid", + mapOf("fields" to fields)) } + /** * ### Looker Openid login information for the specified user. Used by Looker Analysts. * @@ -11124,12 +10932,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_looker_openid -> ByteArray */ fun delete_user_credentials_looker_openid( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) + return this.delete("/users/${path_user_id}/credentials_looker_openid", mapOf()) } + /** * ### Saml authentication login information for the specified user. * @@ -11140,15 +10949,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_saml( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_saml", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_saml", + mapOf("fields" to fields)) } + /** * ### Delete Saml authentication login information for the specified user. * @@ -11157,12 +10965,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_saml -> ByteArray */ fun delete_user_credentials_saml( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) + return this.delete("/users/${path_user_id}/credentials_saml", mapOf()) } + /** * ### Get two-factor login information for the specified user. * @@ -11175,15 +10984,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_totp( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_totp", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields)) } + /** * ### Create two-factor login information for the specified user. * @@ -11198,16 +11006,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun create_user_credentials_totp( user_id: String, body: CredentialsTotp? = null, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_totp", - mapOf("fields" to fields), - body, - ) + return this.post("/users/${path_user_id}/credentials_totp", + mapOf("fields" to fields), body) } + /** * ### Delete two-factor login information for the specified user. * @@ -11218,12 +11024,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_totp -> ByteArray */ fun delete_user_credentials_totp( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) + return this.delete("/users/${path_user_id}/credentials_totp", mapOf()) } + /** * ### Get information about the current user; i.e. the user account currently calling the API. * @@ -11232,14 +11039,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /user -> ByteArray */ @JvmOverloads fun me( - fields: String? = null, - ): SDKResponse { - return this.get( - "/user", - mapOf("fields" to fields), - ) + fields: String? = null + ) : SDKResponse { + return this.get("/user", + mapOf("fields" to fields)) } + /** * ### Get information about all users. * @@ -11260,22 +11066,19 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { limit: Long? = null, offset: Long? = null, sorts: String? = null, - ids: DelimArray? = null, - ): SDKResponse { - return this.get( - "/users", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "ids" to ids, - ), - ) + ids: DelimArray? = null + ) : SDKResponse { + return this.get("/users", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "ids" to ids)) } + /** * ### Create a user with the specified information. * @@ -11286,15 +11089,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user( body: WriteUser? = null, - fields: String? = null, - ): SDKResponse { - return this.post( - "/users", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/users", + mapOf("fields" to fields), body) } + /** * ### Search users * @@ -11368,34 +11169,31 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { content_metadata_id: String? = null, group_id: String? = null, can_manage_api3_creds: Boolean? = null, - is_service_account: Boolean? = null, - ): SDKResponse { - return this.get( - "/users/search", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "first_name" to first_name, - "last_name" to last_name, - "full_name" to full_name, - "verified_looker_employee" to verified_looker_employee, - "embed_user" to embed_user, - "email" to email, - "is_disabled" to is_disabled, - "filter_or" to filter_or, - "content_metadata_id" to content_metadata_id, - "group_id" to group_id, - "can_manage_api3_creds" to can_manage_api3_creds, - "is_service_account" to is_service_account, - ), - ) + is_service_account: Boolean? = null + ) : SDKResponse { + return this.get("/users/search", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "first_name" to first_name, + "last_name" to last_name, + "full_name" to full_name, + "verified_looker_employee" to verified_looker_employee, + "embed_user" to embed_user, + "email" to email, + "is_disabled" to is_disabled, + "filter_or" to filter_or, + "content_metadata_id" to content_metadata_id, + "group_id" to group_id, + "can_manage_api3_creds" to can_manage_api3_creds, + "is_service_account" to is_service_account)) } + /** * ### Search for user accounts by name * @@ -11433,28 +11231,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { last_name: String? = null, verified_looker_employee: Boolean? = null, email: String? = null, - is_disabled: Boolean? = null, - ): SDKResponse { + is_disabled: Boolean? = null + ) : SDKResponse { val path_pattern = encodeParam(pattern) - return this.get( - "/users/search/names/${path_pattern}", - mapOf( - "fields" to fields, - "page" to page, - "per_page" to per_page, - "limit" to limit, - "offset" to offset, - "sorts" to sorts, - "id" to id, - "first_name" to first_name, - "last_name" to last_name, - "verified_looker_employee" to verified_looker_employee, - "email" to email, - "is_disabled" to is_disabled, - ), - ) + return this.get("/users/search/names/${path_pattern}", + mapOf("fields" to fields, + "page" to page, + "per_page" to per_page, + "limit" to limit, + "offset" to offset, + "sorts" to sorts, + "id" to id, + "first_name" to first_name, + "last_name" to last_name, + "verified_looker_employee" to verified_looker_employee, + "email" to email, + "is_disabled" to is_disabled)) } + /** * ### Get information about the user with a specific id. * @@ -11469,15 +11264,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}", + mapOf("fields" to fields)) } + /** * ### Update information about the user with a specific id. * @@ -11490,16 +11284,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user( user_id: String, body: WriteUser, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch( - "/users/${path_user_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/users/${path_user_id}", + mapOf("fields" to fields), body) } + /** * ### Delete the user with a specific id. * @@ -11522,12 +11314,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id} -> ByteArray */ fun delete_user( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}", mapOf()) + return this.delete("/users/${path_user_id}", mapOf()) } + /** * ### Get information about the user with a credential of given type with specific id. * @@ -11569,16 +11362,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_for_credential( credential_type: String, credential_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_credential_type = encodeParam(credential_type) val path_credential_id = encodeParam(credential_id) - return this.get( - "/users/credential/${path_credential_type}/${path_credential_id}", - mapOf("fields" to fields), - ) + return this.get("/users/credential/${path_credential_type}/${path_credential_id}", + mapOf("fields" to fields)) } + /** * ### Update information for a specific service account. This action is restricted to Looker admins. * @@ -11593,16 +11385,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_service_account( user_id: String, body: WriteServiceAccount, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.patch( - "/users/service_accounts/${path_user_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/users/service_accounts/${path_user_id}", + mapOf("fields" to fields), body) } + /** * ### Delete the service account with a specific id. * @@ -11621,12 +11411,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/service_accounts/{user_id} -> ByteArray */ fun delete_service_account( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/service_accounts/${path_user_id}", mapOf()) + return this.delete("/users/service_accounts/${path_user_id}", mapOf()) } + /** * ### LDAP login information for the specified user. * @@ -11639,15 +11430,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_ldap( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_ldap", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_ldap", + mapOf("fields" to fields)) } + /** * ### LDAP login information for the specified user. * @@ -11658,12 +11448,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_ldap -> ByteArray */ fun delete_user_credentials_ldap( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) + return this.delete("/users/${path_user_id}/credentials_ldap", mapOf()) } + /** * ### OpenID Connect (OIDC) authentication login information for the specified user. * @@ -11674,15 +11465,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_credentials_oidc( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_oidc", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_oidc", + mapOf("fields" to fields)) } + /** * ### OpenID Connect (OIDC) authentication login information for the specified user. * @@ -11691,12 +11481,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /users/{user_id}/credentials_oidc -> ByteArray */ fun delete_user_credentials_oidc( - user_id: String, - ): SDKResponse { + user_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.delete("/users/${path_user_id}/credentials_oidc", mapOf()) + return this.delete("/users/${path_user_id}/credentials_oidc", mapOf()) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11709,16 +11500,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_credentials_api3( user_id: String, credentials_api3_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) - return this.get( - "/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", + mapOf("fields" to fields)) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11733,17 +11523,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { user_id: String, credentials_api3_id: String, body: WriteCredentialsApi3, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) - return this.patch( - "/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", + mapOf("fields" to fields), body) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11754,13 +11542,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_credentials_api3( user_id: String, - credentials_api3_id: String, - ): SDKResponse { + credentials_api3_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_api3_id = encodeParam(credentials_api3_id) - return this.delete("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", mapOf()) + return this.delete("/users/${path_user_id}/credentials_api3/${path_credentials_api3_id}", mapOf()) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11771,15 +11560,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_credentials_api3s( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_api3", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_api3", + mapOf("fields" to fields)) } + /** * ### API login information for the specified user. This is for the newer API keys that can be added for any user. * @@ -11790,15 +11578,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user_credentials_api3( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/credentials_api3", - mapOf("fields" to fields), - ) + return this.post("/users/${path_user_id}/credentials_api3", + mapOf("fields" to fields)) } + /** * ### Embed login information for the specified user. * @@ -11813,16 +11600,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_credentials_embed( user_id: String, credentials_embed_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_embed_id = encodeParam(credentials_embed_id) - return this.get( - "/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", + mapOf("fields" to fields)) } + /** * ### Embed login information for the specified user. * @@ -11835,13 +11621,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_credentials_embed( user_id: String, - credentials_embed_id: String, - ): SDKResponse { + credentials_embed_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_credentials_embed_id = encodeParam(credentials_embed_id) - return this.delete("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", mapOf()) + return this.delete("/users/${path_user_id}/credentials_embed/${path_credentials_embed_id}", mapOf()) } + /** * ### Embed login information for the specified user. * @@ -11854,15 +11641,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_credentials_embeds( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/credentials_embed", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/credentials_embed", + mapOf("fields" to fields)) } + /** * ### Web login session for the specified user. * @@ -11875,16 +11661,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_session( user_id: String, session_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_session_id = encodeParam(session_id) - return this.get( - "/users/${path_user_id}/sessions/${path_session_id}", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/sessions/${path_session_id}", + mapOf("fields" to fields)) } + /** * ### Web login session for the specified user. * @@ -11895,13 +11680,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_session( user_id: String, - session_id: String, - ): SDKResponse { + session_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_session_id = encodeParam(session_id) - return this.delete("/users/${path_user_id}/sessions/${path_session_id}", mapOf()) + return this.delete("/users/${path_user_id}/sessions/${path_session_id}", mapOf()) } + /** * ### Web login session for the specified user. * @@ -11912,15 +11698,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_sessions( user_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/sessions", - mapOf("fields" to fields), - ) + return this.get("/users/${path_user_id}/sessions", + mapOf("fields" to fields)) } + /** * ### Get information about roles of a given user * @@ -11933,18 +11718,15 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun user_roles( user_id: String, fields: String? = null, - direct_association_only: Boolean? = null, - ): SDKResponse { + direct_association_only: Boolean? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/roles", - mapOf( - "fields" to fields, - "direct_association_only" to direct_association_only, - ), - ) + return this.get("/users/${path_user_id}/roles", + mapOf("fields" to fields, + "direct_association_only" to direct_association_only)) } + /** * ### Set roles of the user with a specific id. * @@ -11957,16 +11739,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun set_user_roles( user_id: String, body: Array, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.put( - "/users/${path_user_id}/roles", - mapOf("fields" to fields), - body, - ) + return this.put("/users/${path_user_id}/roles", + mapOf("fields" to fields), body) } + /** * ### Get user attribute values for a given user. * @@ -11998,20 +11778,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fields: String? = null, user_attribute_ids: DelimArray? = null, all_values: Boolean? = null, - include_unset: Boolean? = null, - ): SDKResponse { + include_unset: Boolean? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.get( - "/users/${path_user_id}/attribute_values", - mapOf( - "fields" to fields, - "user_attribute_ids" to user_attribute_ids, - "all_values" to all_values, - "include_unset" to include_unset, - ), - ) + return this.get("/users/${path_user_id}/attribute_values", + mapOf("fields" to fields, + "user_attribute_ids" to user_attribute_ids, + "all_values" to all_values, + "include_unset" to include_unset)) } + /** * ### Store a custom value for a user attribute in a user's account settings. * @@ -12026,13 +11803,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { fun set_user_attribute_user_value( user_id: String, user_attribute_id: String, - body: WriteUserAttributeWithValue, - ): SDKResponse { + body: WriteUserAttributeWithValue + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_user_attribute_id = encodeParam(user_attribute_id) - return this.patch("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) + return this.patch("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf(), body) } + /** * ### Delete a user attribute value from a user's account settings. * @@ -12048,13 +11826,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun delete_user_attribute_user_value( user_id: String, - user_attribute_id: String, - ): SDKResponse { + user_attribute_id: String + ) : SDKResponse { val path_user_id = encodeParam(user_id) val path_user_attribute_id = encodeParam(user_attribute_id) - return this.delete("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf()) + return this.delete("/users/${path_user_id}/attribute_values/${path_user_attribute_id}", mapOf()) } + /** * ### Change a disabled user's email addresses * @@ -12075,16 +11854,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun wipeout_user_emails( user_id: String, body: UserEmailOnly, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_id = encodeParam(user_id) - return this.post( - "/users/${path_user_id}/update_emails", - mapOf("fields" to fields), - body, - ) + return this.post("/users/${path_user_id}/update_emails", + mapOf("fields" to fields), body) } + /** * Create an embed user from an external user ID * @@ -12095,11 +11872,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * POST /users/embed_user -> ByteArray */ fun create_embed_user( - body: CreateEmbedUserRequest, - ): SDKResponse { - return this.post("/users/embed_user", mapOf(), body) + body: CreateEmbedUserRequest + ) : SDKResponse { + return this.post("/users/embed_user", mapOf(), body) } + /** * ### Create a service account with the specified information. This action is restricted to Looker admins. * @@ -12110,19 +11888,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_service_account( body: WriteServiceAccount, - fields: String? = null, - ): SDKResponse { - return this.post( - "/users/service_accounts", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/users/service_accounts", + mapOf("fields" to fields), body) } //endregion User: Manage Users //region UserAttribute: Manage User Attributes + /** * ### Get information about all user attributes. * @@ -12133,17 +11909,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_attributes( fields: String? = null, - sorts: String? = null, - ): SDKResponse { - return this.get( - "/user_attributes", - mapOf( - "fields" to fields, - "sorts" to sorts, - ), - ) + sorts: String? = null + ) : SDKResponse { + return this.get("/user_attributes", + mapOf("fields" to fields, + "sorts" to sorts)) } + /** * ### Create a new user attribute * @@ -12163,15 +11936,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun create_user_attribute( body: WriteUserAttribute, - fields: String? = null, - ): SDKResponse { - return this.post( - "/user_attributes", - mapOf("fields" to fields), - body, - ) + fields: String? = null + ) : SDKResponse { + return this.post("/user_attributes", + mapOf("fields" to fields), body) } + /** * ### Get information about a user attribute. * @@ -12182,15 +11953,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun user_attribute( user_attribute_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.get( - "/user_attributes/${path_user_attribute_id}", - mapOf("fields" to fields), - ) + return this.get("/user_attributes/${path_user_attribute_id}", + mapOf("fields" to fields)) } + /** * ### Update a user attribute definition. * @@ -12203,16 +11973,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { @JvmOverloads fun update_user_attribute( user_attribute_id: String, body: WriteUserAttribute, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.patch( - "/user_attributes/${path_user_attribute_id}", - mapOf("fields" to fields), - body, - ) + return this.patch("/user_attributes/${path_user_attribute_id}", + mapOf("fields" to fields), body) } + /** * ### Delete a user attribute (admin only). * @@ -12221,12 +11989,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * DELETE /user_attributes/{user_attribute_id} -> ByteArray */ fun delete_user_attribute( - user_attribute_id: String, - ): SDKResponse { + user_attribute_id: String + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.delete("/user_attributes/${path_user_attribute_id}", mapOf()) + return this.delete("/user_attributes/${path_user_attribute_id}", mapOf()) } + /** * ### Returns all values of a user attribute defined by user groups, in precedence order. * @@ -12243,15 +12012,14 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ @JvmOverloads fun all_user_attribute_group_values( user_attribute_id: String, - fields: String? = null, - ): SDKResponse { + fields: String? = null + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.get( - "/user_attributes/${path_user_attribute_id}/group_values", - mapOf("fields" to fields), - ) + return this.get("/user_attributes/${path_user_attribute_id}/group_values", + mapOf("fields" to fields)) } + /** * ### Define values for a user attribute across a set of groups, in priority order. * @@ -12281,16 +12049,17 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { */ fun set_user_attribute_group_values( user_attribute_id: String, - body: Array, - ): SDKResponse { + body: Array + ) : SDKResponse { val path_user_attribute_id = encodeParam(user_attribute_id) - return this.post("/user_attributes/${path_user_attribute_id}/group_values", mapOf(), body) + return this.post("/user_attributes/${path_user_attribute_id}/group_values", mapOf(), body) } //endregion UserAttribute: Manage User Attributes //region Workspace: Manage Workspaces + /** * ### Get All Workspaces * @@ -12298,10 +12067,13 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * * GET /workspaces -> ByteArray */ - fun all_workspaces(): SDKResponse { - return this.get("/workspaces", mapOf()) + fun all_workspaces( + + ) : SDKResponse { + return this.get("/workspaces", mapOf()) } + /** * ### Get A Workspace * @@ -12338,11 +12110,12 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * GET /workspaces/{workspace_id} -> ByteArray */ fun workspace( - workspace_id: String, - ): SDKResponse { + workspace_id: String + ) : SDKResponse { val path_workspace_id = encodeParam(workspace_id) - return this.get("/workspaces/${path_workspace_id}", mapOf()) + return this.get("/workspaces/${path_workspace_id}", mapOf()) } //endregion Workspace: Manage Workspaces -} + +} \ No newline at end of file diff --git a/packages/sdk-codegen/src/csharp.gen.spec.ts b/packages/sdk-codegen/src/csharp.gen.spec.ts index 95bfc357e..22a787da5 100644 --- a/packages/sdk-codegen/src/csharp.gen.spec.ts +++ b/packages/sdk-codegen/src/csharp.gen.spec.ts @@ -211,6 +211,13 @@ public async Task> old_login( }`; expect(actual).toEqual(expected); }); + + it('maps binary type to string', () => { + const type = apiTestModel.types.binary; + expect(type).toBeDefined(); + const mapped = gen.typeMap(type); + expect(mapped.name).toEqual('string'); + }); }); describe('methods', () => { diff --git a/packages/sdk-codegen/src/csharp.gen.ts b/packages/sdk-codegen/src/csharp.gen.ts index 35d197642..3c4642f7e 100644 --- a/packages/sdk-codegen/src/csharp.gen.ts +++ b/packages/sdk-codegen/src/csharp.gen.ts @@ -454,21 +454,27 @@ ${indent}${this.reserve(value.toString())}`; const csTypes: Record = { any: { default: this.nullStr, name: 'object', optional }, + binary: { default: quotes, name: 'string', optional }, boolean: { default: mt, name: 'bool', optional }, byte: { default: mt, name: 'byte', optional }, date: { default: mt, name: 'DateTime', optional }, datetime: { default: mt, name: 'DateTime', optional }, double: { default: mt, name: 'double', optional }, + email: { default: quotes, name: 'string', optional }, float: { default: mt, name: 'float', optional }, + hostname: { default: quotes, name: 'string', optional }, int32: { default: mt, name: 'int', optional }, int64: { default: mt, name: 'long', optional }, integer: { default: mt, name: 'int', optional }, + ipv4: { default: quotes, name: 'string', optional }, + ipv6: { default: quotes, name: 'string', optional }, number: { default: mt, name: 'double', optional }, object: { default: this.nullStr, name: 'object', optional }, password: { default: quotes, name: 'Password', optional }, string: { default: quotes, name: 'string', optional }, uri: { default: quotes, name: 'Url', optional }, url: { default: quotes, name: 'Url', optional }, + uuid: { default: quotes, name: 'string', optional }, void: { default: mt, name: 'void' }, }; diff --git a/packages/sdk-codegen/src/go.gen.spec.ts b/packages/sdk-codegen/src/go.gen.spec.ts index 79c60fe6f..870b68239 100644 --- a/packages/sdk-codegen/src/go.gen.spec.ts +++ b/packages/sdk-codegen/src/go.gen.spec.ts @@ -128,6 +128,12 @@ type HyphenType struct { gen.noComment = false; expect(actual).toEqual(expected); }); + it('maps binary type to string', () => { + const type = apiTestModel.types.binary; + expect(type).toBeDefined(); + const mapped = gen.typeMap(type); + expect(mapped.name).toEqual('string'); + }); }); describe('methods', () => { diff --git a/packages/sdk-codegen/src/go.gen.ts b/packages/sdk-codegen/src/go.gen.ts index 2b93aa13b..f76dfff03 100644 --- a/packages/sdk-codegen/src/go.gen.ts +++ b/packages/sdk-codegen/src/go.gen.ts @@ -442,21 +442,27 @@ ${goImport} const mt = this.nullStr; const ktTypes: Record = { any: { default: mt, name: 'interface{}' }, + binary: { default: mt, name: 'string' }, boolean: { default: mt, name: 'bool' }, byte: { default: mt, name: 'byte' }, date: { default: '', name: 'time.Time' }, datetime: { default: '', name: 'time.Time' }, double: { default: mt, name: 'float64' }, + email: { default: mt, name: 'string' }, float: { default: mt, name: 'float32' }, + hostname: { default: mt, name: 'string' }, int32: { default: mt, name: 'int32' }, int64: { default: mt, name: 'int64' }, integer: { default: mt, name: 'int' }, + ipv4: { default: mt, name: 'string' }, + ipv6: { default: mt, name: 'string' }, number: { default: mt, name: 'float64' }, object: { default: mt, name: 'interface{}' }, password: { default: mt, name: 'string' }, string: { default: mt, name: 'string' }, uri: { default: mt, name: 'url.URL' }, url: { default: mt, name: 'url.URL' }, + uuid: { default: mt, name: 'string' }, void: { default: mt, name: 'Void' }, // todo: check how to handle Void }; diff --git a/packages/sdk-codegen/src/kotlin.gen.spec.ts b/packages/sdk-codegen/src/kotlin.gen.spec.ts index e09246558..2f80c4f5b 100644 --- a/packages/sdk-codegen/src/kotlin.gen.spec.ts +++ b/packages/sdk-codegen/src/kotlin.gen.spec.ts @@ -98,6 +98,13 @@ data class HyphenType ( ) : Serializable`; expect(actual).toEqual(expected); }); + + it('maps binary type to String', () => { + const type = apiTestModel.types.binary; + expect(type).toBeDefined(); + const mapped = gen.typeMap(type); + expect(mapped.name).toEqual('String'); + }); }); it('deprecated method with deprecated params', () => { diff --git a/packages/sdk-codegen/src/kotlin.gen.ts b/packages/sdk-codegen/src/kotlin.gen.ts index 2a6139b71..683d15a4e 100644 --- a/packages/sdk-codegen/src/kotlin.gen.ts +++ b/packages/sdk-codegen/src/kotlin.gen.ts @@ -553,21 +553,27 @@ ${props.join(this.propDelimiter)} const asString: CodeAssignment = (_, v) => `"${v}"`; const ktTypes: Record = { any: { default: mt, name: 'Any' }, + binary: { default: mt, name: 'String', asVal: asString }, boolean: { default: mt, name: 'Boolean' }, byte: { default: mt, name: 'binary' }, date: { default: mt, name: 'Date' }, datetime: { default: mt, name: 'Date' }, double: { default: mt, name: 'Double' }, + email: { default: mt, name: 'String', asVal: asString }, float: { default: mt, name: 'Float' }, + hostname: { default: mt, name: 'String', asVal: asString }, int32: { default: mt, name: 'Int' }, int64: { default: mt, name: 'Long' }, integer: { default: mt, name: 'Int' }, + ipv4: { default: mt, name: 'String', asVal: asString }, + ipv6: { default: mt, name: 'String', asVal: asString }, number: { default: mt, name: 'Double' }, object: { default: mt, name: 'Any' }, password: { default: mt, name: 'Password', asVal: asString }, string: { default: mt, name: 'String', asVal: asString }, uri: { default: mt, name: 'UriString', asVal: asString }, url: { default: mt, name: 'UrlString', asVal: asString }, + uuid: { default: mt, name: 'String', asVal: asString }, void: { default: mt, name: 'Void', asVal: (_i, _v: any) => 'String' }, }; diff --git a/packages/sdk-codegen/src/python.gen.spec.ts b/packages/sdk-codegen/src/python.gen.spec.ts index 072a81394..88ae0ba20 100644 --- a/packages/sdk-codegen/src/python.gen.spec.ts +++ b/packages/sdk-codegen/src/python.gen.spec.ts @@ -911,6 +911,13 @@ class MergeFields(model.Model): self.field_name = field_name self.source_field_name = source_field_name`); }); + + it('maps binary type to str', () => { + const type = apiTestModel.types.binary; + expect(type).toBeDefined(); + const mapped = gen.typeMapMethods(type); + expect(mapped.name).toEqual('str'); + }); }); describe('makeTheCall', () => { diff --git a/packages/sdk-codegen/src/python.gen.ts b/packages/sdk-codegen/src/python.gen.ts index 97e0883eb..5b082d444 100644 --- a/packages/sdk-codegen/src/python.gen.ts +++ b/packages/sdk-codegen/src/python.gen.ts @@ -537,20 +537,27 @@ ${this.hooks.join('\n')} const asString: CodeAssignment = (_, v) => `"${v}"`; const pythonTypes: Record = { any: { default: this.nullStr, name: 'Any' }, + binary: { default: this.nullStr, name: 'str', asVal: asString }, boolean: { default: this.nullStr, name: 'bool' }, byte: { default: this.nullStr, name: 'bytes' }, date: { default: this.nullStr, name: 'datetime.datetime' }, datetime: { default: this.nullStr, name: 'datetime.datetime' }, double: { default: this.nullStr, name: 'float' }, + email: { default: this.nullStr, name: 'str', asVal: asString }, float: { default: this.nullStr, name: 'float' }, + hostname: { default: this.nullStr, name: 'str', asVal: asString }, int32: { default: this.nullStr, name: 'int' }, int64: { default: this.nullStr, name: 'int' }, integer: { default: this.nullStr, name: 'int' }, + ipv4: { default: this.nullStr, name: 'str', asVal: asString }, + ipv6: { default: this.nullStr, name: 'str', asVal: asString }, number: { default: this.nullStr, name: 'float' }, password: { default: this.nullStr, name: 'str', asVal: asString }, string: { default: this.nullStr, name: 'str', asVal: asString }, object: { default: this.nullStr, name: 'str', asVal: asString }, uri: { default: this.nullStr, name: 'str', asVal: asString }, + url: { default: this.nullStr, name: 'str', asVal: asString }, + uuid: { default: this.nullStr, name: 'str', asVal: asString }, void: { default: this.nullStr, name: 'None' }, }; diff --git a/packages/sdk-codegen/src/swift.gen.spec.ts b/packages/sdk-codegen/src/swift.gen.spec.ts index 4ad7da61f..75587dc43 100644 --- a/packages/sdk-codegen/src/swift.gen.spec.ts +++ b/packages/sdk-codegen/src/swift.gen.spec.ts @@ -104,6 +104,13 @@ public enum PermissionType: String, Codable { gen.noComment = false; expect(actual).toEqual(expected); }); + + it('maps binary type to String', () => { + const type = apiTestModel.types.binary; + expect(type).toBeDefined(); + const mapped = gen.typeMap(type); + expect(mapped.name).toEqual('String'); + }); }); describe('special handling', () => { diff --git a/packages/sdk-codegen/src/swift.gen.ts b/packages/sdk-codegen/src/swift.gen.ts index 419cd4e4e..03134ec8f 100644 --- a/packages/sdk-codegen/src/swift.gen.ts +++ b/packages/sdk-codegen/src/swift.gen.ts @@ -807,21 +807,27 @@ ${indent}return result`; Group: { default: '', name: `${ns}Group` }, Locale: { default: '', name: `${ns}Locale` }, any: { default: this.nullStr, name: 'AnyCodable' }, + binary: { default: this.nullStr, name: 'String' }, boolean: { default: this.nullStr, name: 'Bool' }, byte: { default: this.nullStr, name: 'binary' }, date: { default: this.nullStr, name: 'Date' }, datetime: { default: this.nullStr, name: 'Date' }, double: { default: this.nullStr, name: 'Double' }, + email: { default: this.nullStr, name: 'String' }, float: { default: this.nullStr, name: 'Float' }, + hostname: { default: this.nullStr, name: 'String' }, int32: { default: this.nullStr, name: 'Int32' }, int64: { default: this.nullStr, name: 'Int64' }, integer: { default: this.nullStr, name: 'Int' }, + ipv4: { default: this.nullStr, name: 'String' }, + ipv6: { default: this.nullStr, name: 'String' }, number: { default: this.nullStr, name: 'Double' }, object: { default: this.nullStr, name: 'Any' }, password: { default: this.nullStr, name: 'Password' }, string: { default: this.nullStr, name: 'String' }, uri: { default: this.nullStr, name: 'URI' }, url: { default: this.nullStr, name: 'URL' }, + uuid: { default: this.nullStr, name: 'String' }, void: { default: '', name: 'Voidable' }, }; diff --git a/python/looker_sdk/__init__.py b/python/looker_sdk/__init__.py index f1c3ed83b..26828426e 100644 --- a/python/looker_sdk/__init__.py +++ b/python/looker_sdk/__init__.py @@ -45,6 +45,7 @@ def _settings( env_prefix=constants.environment_prefix, ) + def init40( config_file: str = "looker.ini", section: Optional[str] = None, diff --git a/python/looker_sdk/error.py b/python/looker_sdk/error.py index b4d773939..b4d6a6c44 100644 --- a/python/looker_sdk/error.py +++ b/python/looker_sdk/error.py @@ -99,7 +99,7 @@ class ErrorDocHelper: ERROR_CODES_URL: str = "https://static-a.cdn.looker.app/errorcodes/" lookup_dict: Dict[str, Dict[str, str]] = {} RE_PATTERN: str = ( - r'(https://docs\.looker\.com/r/err/|https://cloud\.google\.com/looker/docs/r/err/)(.*)/(\d{3})(.*)' + r"(https://docs\.looker\.com/r/err/|https://cloud\.google\.com/looker/docs/r/err/)(.*)/(\d{3})(.*)" ) pattern = re.compile(RE_PATTERN, flags=re.IGNORECASE) diff --git a/python/looker_sdk/rtl/__init__.py b/python/looker_sdk/rtl/__init__.py index 1c731c089..4e0ffd00a 100644 --- a/python/looker_sdk/rtl/__init__.py +++ b/python/looker_sdk/rtl/__init__.py @@ -19,4 +19,3 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. - diff --git a/python/looker_sdk/rtl/api_methods.py b/python/looker_sdk/rtl/api_methods.py index 875b56c0d..a9cc51016 100644 --- a/python/looker_sdk/rtl/api_methods.py +++ b/python/looker_sdk/rtl/api_methods.py @@ -20,8 +20,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -"""Functionality for making authenticated API calls -""" +"""Functionality for making authenticated API calls""" + import datetime import re import urllib.parse @@ -34,7 +34,6 @@ from looker_sdk.rtl import transport from looker_sdk.rtl import auth_session - TBody = Optional[ Union[ str, @@ -90,11 +89,11 @@ def _return(self, response: transport.Response, structure: TStructure) -> TRetur try: sdk_error = self.deserialize(data=value, structure=error.SDKError) # type: ignore helper = error.ErrorDocHelper() - (sdk_error.error_doc_url, sdk_error.error_doc) = ( - helper.parse_and_lookup(sdk_error.documentation_url) + sdk_error.error_doc_url, sdk_error.error_doc = helper.parse_and_lookup( + sdk_error.documentation_url ) for e in sdk_error.errors: - (e.error_doc_url, e.error_doc) = helper.parse_and_lookup( + e.error_doc_url, e.error_doc = helper.parse_and_lookup( e.documentation_url ) except serialize.DeserializeError: @@ -158,7 +157,9 @@ def get( return self._return(response, structure) def _get_serialized( - self, body: TBody, transport_options: Optional[transport.TransportOptions] = None + self, + body: TBody, + transport_options: Optional[transport.TransportOptions] = None, ) -> Optional[bytes]: serialized: Optional[bytes] if isinstance(body, str): @@ -194,7 +195,9 @@ def post( transport_options = {} if "headers" not in transport_options: transport_options["headers"] = {} - transport_options["headers"]["Content-Type"] = "application/x-www-form-urlencoded" + transport_options["headers"][ + "Content-Type" + ] = "application/x-www-form-urlencoded" serialized = self._get_serialized(body, transport_options) response = self.transport.request( transport.HttpMethod.POST, @@ -221,7 +224,9 @@ def patch( transport_options = {} if "headers" not in transport_options: transport_options["headers"] = {} - transport_options["headers"]["Content-Type"] = "application/x-www-form-urlencoded" + transport_options["headers"][ + "Content-Type" + ] = "application/x-www-form-urlencoded" serialized = self._get_serialized(body, transport_options) response = self.transport.request( transport.HttpMethod.PATCH, @@ -248,7 +253,9 @@ def put( transport_options = {} if "headers" not in transport_options: transport_options["headers"] = {} - transport_options["headers"]["Content-Type"] = "application/x-www-form-urlencoded" + transport_options["headers"][ + "Content-Type" + ] = "application/x-www-form-urlencoded" serialized = self._get_serialized(body, transport_options) response = self.transport.request( transport.HttpMethod.PUT, diff --git a/python/looker_sdk/rtl/api_settings.py b/python/looker_sdk/rtl/api_settings.py index 878c7a642..1ac0026ae 100644 --- a/python/looker_sdk/rtl/api_settings.py +++ b/python/looker_sdk/rtl/api_settings.py @@ -23,6 +23,7 @@ """Load settings from .ini file and create an ApiSettings object with the settings as attributes """ + import configparser as cp import os import sys @@ -49,8 +50,7 @@ class SettingsConfig(TypedDict, total=False): class PApiSettings(transport.PTransportSettings, Protocol): - def read_config(self) -> SettingsConfig: - ... + def read_config(self) -> SettingsConfig: ... _DEFAULT_INIS = ["looker.ini", "../looker.ini"] @@ -141,9 +141,9 @@ def _override_settings( self, data: SettingsConfig, overrides: Dict[str, str] ) -> SettingsConfig: # https://github.com/python/mypy/issues/6262 - for setting in SettingsConfig.__annotations__.keys(): # type: ignore + for setting in SettingsConfig.__annotations__.keys(): # type: ignore if setting in overrides: - data[setting] = overrides[setting] # type: ignore + data[setting] = overrides[setting] # type: ignore return data def _override_from_env(self) -> Dict[str, str]: @@ -171,8 +171,7 @@ def _override_from_env(self) -> Dict[str, str]: return overrides def _clean_input(self, data: SettingsConfig) -> SettingsConfig: - """Remove surrounding quotes and discard empty strings. - """ + """Remove surrounding quotes and discard empty strings.""" cleaned = {} for setting, value in data.items(): if setting in self.deprecated_settings: diff --git a/python/looker_sdk/rtl/auth_session.py b/python/looker_sdk/rtl/auth_session.py index 53dd1ce4d..2da9d0552 100644 --- a/python/looker_sdk/rtl/auth_session.py +++ b/python/looker_sdk/rtl/auth_session.py @@ -20,8 +20,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -"""AuthSession to provide automatic authentication -""" +"""AuthSession to provide automatic authentication""" + import hashlib import secrets from typing import cast, Dict, Optional, Union diff --git a/python/looker_sdk/rtl/auth_token.py b/python/looker_sdk/rtl/auth_token.py index f3b707b9e..7e6d97e2f 100644 --- a/python/looker_sdk/rtl/auth_token.py +++ b/python/looker_sdk/rtl/auth_token.py @@ -20,8 +20,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -"""AuthToken -""" +"""AuthToken""" + from typing import Optional, Type, Union import datetime @@ -66,7 +66,8 @@ class AuthToken: """Used to instantiate or check expiry of an AccessToken object""" def __init__( - self, token: Optional[AccessToken] = None, + self, + token: Optional[AccessToken] = None, ): self.lag_time = 10 self.access_token: str = "" diff --git a/python/looker_sdk/rtl/hooks.py b/python/looker_sdk/rtl/hooks.py index 474fcc8b4..8788fb78f 100644 --- a/python/looker_sdk/rtl/hooks.py +++ b/python/looker_sdk/rtl/hooks.py @@ -76,7 +76,6 @@ def datetime_structure_hook( return datetime.datetime.strptime(d, DATETIME_FMT) - def datetime_unstructure_hook(dt): return dt.strftime(DATETIME_FMT) diff --git a/python/looker_sdk/rtl/model.py b/python/looker_sdk/rtl/model.py index 7983ccc1c..5b136df6c 100644 --- a/python/looker_sdk/rtl/model.py +++ b/python/looker_sdk/rtl/model.py @@ -20,8 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -"""Base model for all generated models -""" +"""Base model for all generated models""" import collections import datetime @@ -41,7 +40,7 @@ from typing import _ForwardRef as ForwardRef # type: ignore -EXPLICIT_NULL = cast(Any, "EXPLICIT_NULL") # type:ignore +EXPLICIT_NULL = cast(Any, "EXPLICIT_NULL") # type: ignore class Model: @@ -230,6 +229,6 @@ def __str__(self): f"{self.suffix}" ) + class URLSearchParams(dict): pass - diff --git a/python/looker_sdk/rtl/requests_transport.py b/python/looker_sdk/rtl/requests_transport.py index 03667d84a..6f1a20fea 100644 --- a/python/looker_sdk/rtl/requests_transport.py +++ b/python/looker_sdk/rtl/requests_transport.py @@ -20,8 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -"""Transport implementation using requests package. -""" +"""Transport implementation using requests package.""" import logging from typing import cast, Callable, Dict, MutableMapping, Optional diff --git a/python/looker_sdk/rtl/serialize.py b/python/looker_sdk/rtl/serialize.py index c8600a24b..684c72497 100644 --- a/python/looker_sdk/rtl/serialize.py +++ b/python/looker_sdk/rtl/serialize.py @@ -20,8 +20,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -"""Deserialize API response into models -""" +"""Deserialize API response into models""" + import datetime import enum import functools @@ -80,7 +80,7 @@ def deserialize( def serialize(*, api_model: TModelOrSequence, converter: cattr.Converter) -> bytes: """Translate api_model into formdata encoded json bytes""" data = converter.unstructure(api_model) # type: ignore - return json.dumps(data,default=lambda o: o.__dict__).encode("utf-8") # type: ignore + return json.dumps(data, default=lambda o: o.__dict__).encode("utf-8") # type: ignore def forward_ref_structure_hook(context, converter, data, forward_ref): @@ -110,6 +110,7 @@ def translate_keys_structure_hook(converter, data, model_type): ret = converter.structure_attrs_fromdict(new_data, model_type) return ret + converter40 = cattr.Converter() deserialize40 = functools.partial(deserialize, converter=converter40) serialize40 = functools.partial(serialize, converter=converter40) diff --git a/python/looker_sdk/rtl/transport.py b/python/looker_sdk/rtl/transport.py index ad5162c64..4ccc36d75 100644 --- a/python/looker_sdk/rtl/transport.py +++ b/python/looker_sdk/rtl/transport.py @@ -20,8 +20,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -"""Types and abstract base class for transport implementations. -""" +"""Types and abstract base class for transport implementations.""" + import abc import enum import re diff --git a/python/looker_sdk/sdk/api40/methods.py b/python/looker_sdk/sdk/api40/methods.py index 5a018216c..6f4de4c37 100644 --- a/python/looker_sdk/sdk/api40/methods.py +++ b/python/looker_sdk/sdk/api40/methods.py @@ -5747,7 +5747,7 @@ def delete_dashboard( # # Returns the image content for a dashboard element. # - # GET /dashboards/{dashboard_id}/images/{image_slug} -> Union[mdls.binary, bytes] + # GET /dashboards/{dashboard_id}/images/{image_slug} -> Union[str, bytes] def get_dashboard_image( self, # Id of dashboard @@ -5755,15 +5755,15 @@ def get_dashboard_image( # Slug of image image_slug: str, transport_options: Optional[transport.TransportOptions] = None, - ) -> Union[mdls.binary, bytes]: + ) -> Union[str, bytes]: """Get Dashboard Image""" dashboard_id = self.encode_path_param(dashboard_id) image_slug = self.encode_path_param(image_slug) response = cast( - Union[mdls.binary, bytes], + Union[str, bytes], self.get( path=f"/dashboards/{dashboard_id}/images/{image_slug}", - structure=Union[mdls.binary, bytes], # type: ignore + structure=Union[str, bytes], # type: ignore transport_options=transport_options, ), ) diff --git a/python/tests/integration/__init__.py b/python/tests/integration/__init__.py index c1bd13233..925426fa6 100644 --- a/python/tests/integration/__init__.py +++ b/python/tests/integration/__init__.py @@ -1,2 +1 @@ -"""I exist so that mypy.ini "[mypy-tests.*]" config works. -""" +"""I exist so that mypy.ini "[mypy-tests.*]" config works.""" diff --git a/python/tests/integration/test_methods.py b/python/tests/integration/test_methods.py index e1272bc80..f98d008cf 100644 --- a/python/tests/integration/test_methods.py +++ b/python/tests/integration/test_methods.py @@ -302,7 +302,7 @@ def test_it_creates_and_runs_query( assert isinstance(query, ml.Query) assert query.id assert isinstance(query.id, str) - assert query.id != '0' + assert query.id != "0" sql = sdk.run_query(query.id, "sql") assert "SELECT" in sql @@ -649,38 +649,40 @@ def get_query_id( query_id = None return query_id + @pytest.mark.skip(reason="TODO: This breaks CI right now") def test_validate_theme(sdk: mtds.Looker40SDK): - + valid_theme_response = sdk.validate_theme( - body = ml.WriteTheme( - name = 'valid_theme', - settings = ml.ThemeSettings( - show_filters_bar = False, - show_title = False, - tile_shadow = False, - font_family = 'Arial', - ) + body=ml.WriteTheme( + name="valid_theme", + settings=ml.ThemeSettings( + show_filters_bar=False, + show_title=False, + tile_shadow=False, + font_family="Arial", + ), ) ) assert valid_theme_response == "" - + try: sdk.validate_theme( - body = ml.WriteTheme( - settings = ml.ThemeSettings( - show_filters_bar = False, - show_title = False, - tile_shadow = False, - font_family = 'Arial;', + body=ml.WriteTheme( + settings=ml.ThemeSettings( + show_filters_bar=False, + show_title=False, + tile_shadow=False, + font_family="Arial;", ) ) ) - except Exception as e: + except Exception as e: assert e.message is not None assert e.message != "" assert len(e.errors) == 3 + def test_conversational_analytics(sdk: mtds.Looker40SDK): """Test conversational analytics flow: create agent, conversation, chat, and cleanup.""" agent_id = None @@ -694,25 +696,27 @@ def test_conversational_analytics(sdk: mtds.Looker40SDK): name="Temp SDK Test Agent", category="conversation", description="Temporary agent created for SDK integration tests", - sources=[ml.Source(model="thelook",explore="products")] + sources=[ml.Source(model="thelook", explore="products")], ) ) except error.SDKError as e: if "not found" in e.message.lower() or "unsupported" in e.message.lower(): - pytest.skip(f"Conversational Analytics (Agents) is not enabled on this Looker instance: {e.message}") + pytest.skip( + f"Conversational Analytics (Agents) is not enabled on this Looker instance: {e.message}" + ) raise assert isinstance(agent, ml.Agent) assert isinstance(agent.id, str) agent_id = agent.id print(f"✅ Created agent: {agent_id}") - # 2. Create a Conversation for this agent + # 2. Create a Conversation for this agent print("Creating conversation...") conv = sdk.create_conversation( body=ml.WriteConversation( agent_id=agent_id, name="SDK Integration Test Conversation", - category="conversation" + category="conversation", ) ) assert isinstance(conv, ml.Conversation) @@ -724,16 +728,16 @@ def test_conversational_analytics(sdk: mtds.Looker40SDK): print("Sending chat message...") chat_req = ml.ConversationalAnalyticsChatRequest( conversation_id=conv_id, - user_message="Hello, this is an automated integration test." + user_message="Hello, this is an automated integration test.", ) chat_res = sdk.conversational_analytics_chat(body=chat_req) - + # Verify we got a list of chat messages back assert isinstance(chat_res, list) assert len(chat_res) > 0 assert isinstance(chat_res[0], ml.ChatMessage) print(f"✅ Successfully chatted. Received {len(chat_res)} response parts.") - + finally: # Cleanup (runs even if assertions fail) print("Cleaning up...") @@ -742,7 +746,9 @@ def test_conversational_analytics(sdk: mtds.Looker40SDK): sdk.delete_conversation(conv_id) print(f"✅ Deleted conversation {conv_id}") except Exception as e: - print(f"⚠️ Cleanup warning: Failed to delete conversation {conv_id}: {e}") + print( + f"⚠️ Cleanup warning: Failed to delete conversation {conv_id}: {e}" + ) if agent_id: try: sdk.delete_agent(agent_id) diff --git a/python/tests/rtl/__init__.py b/python/tests/rtl/__init__.py index c1bd13233..925426fa6 100644 --- a/python/tests/rtl/__init__.py +++ b/python/tests/rtl/__init__.py @@ -1,2 +1 @@ -"""I exist so that mypy.ini "[mypy-tests.*]" config works. -""" +"""I exist so that mypy.ini "[mypy-tests.*]" config works.""" diff --git a/python/tests/rtl/test_api_settings.py b/python/tests/rtl/test_api_settings.py index 12a4140f0..635a23eb6 100644 --- a/python/tests/rtl/test_api_settings.py +++ b/python/tests/rtl/test_api_settings.py @@ -36,8 +36,7 @@ def config_file(monkeypatch, tmpdir_factory): monkeypatch.delenv("LOOKERSDK_CLIENT_ID", raising=False) monkeypatch.delenv("LOOKERSDK_CLIENT_SECRET", raising=False) filename = tmpdir_factory.mktemp("settings").join("looker.ini") - filename.write( - """ + filename.write(""" [Looker] # Base URL for API. Do not include /api/* in the url base_url=https://host1.looker.com:19999 @@ -66,8 +65,7 @@ def config_file(monkeypatch, tmpdir_factory): [QUOTED_CONFIG_VARS] base_url="https://host4.looker.com:19999" verify_ssl='false' -""" - ) +""") return filename @@ -193,7 +191,8 @@ def test_configure_with_no_file(monkeypatch): monkeypatch.setenv("LOOKERSDK_CLIENT_SECRET", "secret123") settings = api_settings.ApiSettings( - filename="", env_prefix="LOOKERSDK", + filename="", + env_prefix="LOOKERSDK", ) # explicitly setting config_file to falsey assert settings.base_url == "https://host1.looker.com:19999" data = vars(settings) diff --git a/python/tests/rtl/test_auth_session.py b/python/tests/rtl/test_auth_session.py index 84907fcf6..e8fd915c6 100644 --- a/python/tests/rtl/test_auth_session.py +++ b/python/tests/rtl/test_auth_session.py @@ -38,8 +38,7 @@ def config_file(tmpdir_factory, monkeypatch): for setting in ["BASE_URL", "CLIENT_ID", "CLIENT_SECRET"]: monkeypatch.delenv(f"LOOKERSDK_{setting}", raising=False) filename = tmpdir_factory.mktemp("settings").join("looker.ini") - filename.write( - """ + filename.write(""" [Looker] # Base URL for API. Do not include /api/* in the url base_url=https://host1.looker.com:19999 @@ -59,8 +58,7 @@ def config_file(tmpdir_factory, monkeypatch): base_url=https://host1.looker.com:19999 client_id= client_secret= - """ - ) + """) return filename diff --git a/python/tests/rtl/test_requests_transport.py b/python/tests/rtl/test_requests_transport.py index cfab0c3b3..538bfb762 100644 --- a/python/tests/rtl/test_requests_transport.py +++ b/python/tests/rtl/test_requests_transport.py @@ -32,8 +32,7 @@ @attr.s(auto_attribs=True) class Response: - """Fake requests.Response - """ + """Fake requests.Response""" ok: bool content: bytes @@ -41,8 +40,7 @@ class Response: class Session: - """Fake requests.Session - """ + """Fake requests.Session""" def __init__(self, ret_val, error=False): self.headers = {} @@ -50,8 +48,7 @@ def __init__(self, ret_val, error=False): self.error = error def request(self, method, url, auth, params, data, headers, timeout): - """Fake request.Session.request - """ + """Fake request.Session.request""" if self.error: raise IOError((54, "Connection reset by peer")) return self.ret_val @@ -59,8 +56,7 @@ def request(self, method, url, auth, params, data, headers, timeout): @attr.s(auto_attribs=True, kw_only=True) class TransportSettings: - """Fake TransportSettings - """ + """Fake TransportSettings""" base_url: str = "" verify_ssl: bool = True @@ -78,8 +74,7 @@ def settings(): def test_configure(settings): - """Test configuration creates instance. - """ + """Test configuration creates instance.""" test = requests_transport.RequestsTransport.configure(settings) assert isinstance(test, requests_transport.RequestsTransport) @@ -117,8 +112,7 @@ def test_request_ok( expected_response_mode: transport.ResponseMode, expected_encoding: str, ): - """Test basic successful round trip - """ + """Test basic successful round trip""" value = b"yay!" ret_val = Response( ok=True, content=value, headers=requests.structures.CaseInsensitiveDict(headers) @@ -142,8 +136,7 @@ def test_request_not_ok( expected_response_mode: transport.ResponseMode, expected_encoding: str, ): - """Test API error response - """ + """Test API error response""" value = b"Some API error" ret_val = Response( ok=False, @@ -161,8 +154,7 @@ def test_request_not_ok( def test_request_error(settings): - """Test network error response - """ + """Test network error response""" session = cast(requests.Session, Session(None, True)) test = requests_transport.RequestsTransport(settings, session) resp = test.request(transport.HttpMethod.GET, "/some/path") diff --git a/python/tests/rtl/test_serialize.py b/python/tests/rtl/test_serialize.py index f4f6a395b..007d2f0fb 100644 --- a/python/tests/rtl/test_serialize.py +++ b/python/tests/rtl/test_serialize.py @@ -710,6 +710,7 @@ def test_serialize_partial(): ).encode("utf-8") assert sr.serialize(api_model=model, converter=converter) == expected + @pytest.mark.skip(reason="TODO: This breaks CI right now") def test_serialize_explict_null(): """Send json null for model field EXPLICIT_NULL values.""" diff --git a/python/tests/rtl/test_transport.py b/python/tests/rtl/test_transport.py index 13089460c..86132c62e 100644 --- a/python/tests/rtl/test_transport.py +++ b/python/tests/rtl/test_transport.py @@ -29,6 +29,7 @@ def test_string_mode(string_content_types): for content_type in string_content_types: assert transport.response_mode(content_type) == transport.ResponseMode.STRING + def test_binary_mode(binary_content_types): for content_type in binary_content_types: assert transport.response_mode(content_type) == transport.ResponseMode.BINARY diff --git a/spec/Looker.4.0.json b/spec/Looker.4.0.json index 926eac373..da8a3bd11 100644 --- a/spec/Looker.4.0.json +++ b/spec/Looker.4.0.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "version": "4.0.26.18", - "x-looker-release-version": "26.18.1", + "x-looker-release-version": "26.18.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": { diff --git a/spec/Looker.4.0.oas.json b/spec/Looker.4.0.oas.json index 4e1ddfb98..e14198a32 100644 --- a/spec/Looker.4.0.oas.json +++ b/spec/Looker.4.0.oas.json @@ -2,7 +2,7 @@ "openapi": "3.0.0", "info": { "version": "4.0.26.18", - "x-looker-release-version": "26.18.1", + "x-looker-release-version": "26.18.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": { diff --git a/swift/looker/sdk/methods.swift b/swift/looker/sdk/methods.swift index ac4f8b7b9..cf212a31d 100644 --- a/swift/looker/sdk/methods.swift +++ b/swift/looker/sdk/methods.swift @@ -5182,7 +5182,7 @@ open class LookerSDK: APIMethods { * * Returns the image content for a dashboard element. * - * GET /dashboards/{dashboard_id}/images/{image_slug} -> binary + * GET /dashboards/{dashboard_id}/images/{image_slug} -> String * * **Note**: Binary content may be returned by this method. */ @@ -5196,10 +5196,10 @@ open class LookerSDK: APIMethods { */ _ image_slug: String, options: ITransportSettings? = nil - ) -> SDKResponse { + ) -> SDKResponse { let path_dashboard_id = encodeParam(dashboard_id) let path_image_slug = encodeParam(image_slug) - let result: SDKResponse = self.get("/dashboards/\(path_dashboard_id)/images/\(path_image_slug)", nil, nil, options) + let result: SDKResponse = self.get("/dashboards/\(path_dashboard_id)/images/\(path_image_slug)", nil, nil, options) return result } diff --git a/swift/looker/sdk/streams.swift b/swift/looker/sdk/streams.swift index a3e715f2c..dae692f69 100644 --- a/swift/looker/sdk/streams.swift +++ b/swift/looker/sdk/streams.swift @@ -5180,7 +5180,7 @@ open class LookerSDKStream: APIMethods { * * Returns the image content for a dashboard element. * - * GET /dashboards/{dashboard_id}/images/{image_slug} -> binary + * GET /dashboards/{dashboard_id}/images/{image_slug} -> String * * **Note**: Binary content may be returned by this method. */ From 5683e09b22de896101026f6897449be0ee72ab41 Mon Sep 17 00:00:00 2001 From: Mike DeAngelo Date: Mon, 5 Oct 2026 21:36:51 +0000 Subject: [PATCH 4/6] chore: more zizmor fixes --- .github/workflows/apix-ci.yml | 5 ++--- .github/workflows/codegen-ci.yml | 11 ++++++----- .github/workflows/fix-npm.yml | 2 ++ .github/workflows/go-ci.yml | 2 +- .github/workflows/lerna-publish.yml | 9 +++++++-- .github/workflows/python-ci.yml | 2 +- .github/workflows/python-publish.yml | 6 ++++-- .github/workflows/release-metrics.yml | 3 +++ .github/workflows/release-please.yml | 2 ++ .github/workflows/required-checks-hack-ci.yml | 3 ++- .github/workflows/tssdk-ci.yml | 10 +++++++--- 11 files changed, 37 insertions(+), 18 deletions(-) diff --git a/.github/workflows/apix-ci.yml b/.github/workflows/apix-ci.yml index 6667e5696..b2b478b97 100644 --- a/.github/workflows/apix-ci.yml +++ b/.github/workflows/apix-ci.yml @@ -26,15 +26,14 @@ on: workflow_dispatch: -permissions: - checks: write - env: TS_JUNIT_OUTPUT_DIR: results/apix jobs: unit: name: Unit - ${{ matrix.os }} / Node ${{ matrix.node-version }} + permissions: + checks: write env: JEST_JUNIT_OUTPUT_DIR: results/apix JEST_JUNIT_OUTPUT_NAME: ${{ matrix.os }}.apix${{ matrix.node-version }}.xml diff --git a/.github/workflows/codegen-ci.yml b/.github/workflows/codegen-ci.yml index 7c33cb90d..525727bc4 100644 --- a/.github/workflows/codegen-ci.yml +++ b/.github/workflows/codegen-ci.yml @@ -22,9 +22,6 @@ on: workflow_dispatch: -permissions: - checks: write - env: LOOKERSDK_BASE_URL: https://localhost:20000 LOOKERSDK_VERIFY_SSL: false @@ -33,6 +30,8 @@ env: jobs: unit: + permissions: + checks: write env: JEST_JUNIT_OUTPUT_DIR: results/sdk-codegen JEST_JUNIT_OUTPUT_NAME: ubuntu-latest.sdk-codegen15x.xml @@ -70,10 +69,12 @@ jobs: # TODO: can we cache some layers of the image for faster download? # we probably don't want to cache the final image for IP security... run: | - docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} + docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${PRIMARY_LOOKER_VERSION} # set $LOOKER_OPTS to --no-ssl if we want to turn off ssl - docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} + docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${PRIMARY_LOOKER_VERSION} docker logs -f looker-sdk-codegen-ci --until=30s & + env: + PRIMARY_LOOKER_VERSION: ${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: diff --git a/.github/workflows/fix-npm.yml b/.github/workflows/fix-npm.yml index 666d57224..11f2ac48b 100644 --- a/.github/workflows/fix-npm.yml +++ b/.github/workflows/fix-npm.yml @@ -3,6 +3,8 @@ name: Fix NPM info on: workflow_dispatch: +permissions: {} + jobs: fix: diff --git a/.github/workflows/go-ci.yml b/.github/workflows/go-ci.yml index 469c4ec81..8e74ee3b5 100644 --- a/.github/workflows/go-ci.yml +++ b/.github/workflows/go-ci.yml @@ -15,7 +15,7 @@ on: workflow_dispatch: permissions: - checks: write + contents: read env: LOOKERSDK_BASE_URL: https://localhost:20000 diff --git a/.github/workflows/lerna-publish.yml b/.github/workflows/lerna-publish.yml index 16ae38310..b0be33a3c 100644 --- a/.github/workflows/lerna-publish.yml +++ b/.github/workflows/lerna-publish.yml @@ -12,6 +12,8 @@ on: jobs: publish: + permissions: + contents: read if: > (github.event.inputs) || (startsWith(github.event.release.tag_name, 'sdk-codegen-all') && @@ -46,14 +48,17 @@ jobs: - name: Pull and run Looker docker image run: | - docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} - docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} + docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${PRIMARY_LOOKER_VERSION} + docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${PRIMARY_LOOKER_VERSION} docker logs -f looker-sdk-codegen-ci --until=30s & + env: + PRIMARY_LOOKER_VERSION: ${{ fromJson(vars.PRIMARY_LOOKER_VERSION)[0] }} - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 22.x registry-url: https://wombat-dressing-room.appspot.com + package-manager-cache: false - name: Install dependencies and build run: | diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index ec966e286..4c4c1658f 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -24,7 +24,7 @@ env: TOX_JUNIT_OUTPUT_DIR: results permissions: - checks: write + contents: read jobs: typecheck: diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 1ea224895..3d0e63c72 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -16,6 +16,8 @@ defaults: jobs: publish: + permissions: + contents: read if: > (github.event.inputs) || (startsWith(github.event.release.tag_name, 'looker_sdk') && @@ -37,8 +39,8 @@ jobs: pip install wheel python setup.py sdist bdist_wheel - - uses: pypa/gh-action-pypi-publish@54b39fb9371c0b3a6f9f14bb8a67394defc7a806 # v1.4.1 + - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 with: user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} + password: ${{ secrets.PYPI_API_TOKEN }} # zizmor: ignore[use-trusted-publishing] packages_dir: python/dist/ diff --git a/.github/workflows/release-metrics.yml b/.github/workflows/release-metrics.yml index 511871f70..342ff7160 100644 --- a/.github/workflows/release-metrics.yml +++ b/.github/workflows/release-metrics.yml @@ -2,6 +2,9 @@ name: Send publish metrics to bigquery on: release: types: published + +permissions: {} + jobs: publish: runs-on: ubuntu-latest diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 0a0efb55a..5b6aea70e 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -7,6 +7,8 @@ on: jobs: release-please: runs-on: ubuntu-latest + permissions: + contents: read steps: - uses: google-github-actions/release-please-action@c078ea33917ab8cfa5300e48f4b7e6b16606aede # v3.7.8 with: diff --git a/.github/workflows/required-checks-hack-ci.yml b/.github/workflows/required-checks-hack-ci.yml index b4e6eb119..56c95ba5a 100644 --- a/.github/workflows/required-checks-hack-ci.yml +++ b/.github/workflows/required-checks-hack-ci.yml @@ -92,7 +92,7 @@ jobs: - name: Debug info run: | - echo "${{ toJSON(steps.filter.outputs) }}" + echo "${STEPS_FILTER_OUTPUTS}" echo "apix: ${STEPS_FILTER_OUTPUTS_APIX}" echo "codegen: ${STEPS_FILTER_OUTPUTS_CODEGEN}" echo "hackathon: ${STEPS_FILTER_OUTPUTS_HACKATHON}" @@ -101,6 +101,7 @@ jobs: echo "tssdk: ${STEPS_FILTER_OUTPUTS_TSSDK}" echo "gosdk: ${STEPS_FILTER_OUTPUTS_GOSDK}" env: + STEPS_FILTER_OUTPUTS: ${{ toJSON(steps.filter.outputs) }} STEPS_FILTER_OUTPUTS_APIX: ${{ steps.filter.outputs.apix }} STEPS_FILTER_OUTPUTS_CODEGEN: ${{ steps.filter.outputs.codegen }} STEPS_FILTER_OUTPUTS_HACKATHON: ${{ steps.filter.outputs.hackathon }} diff --git a/.github/workflows/tssdk-ci.yml b/.github/workflows/tssdk-ci.yml index 4e4550d23..7034d1299 100644 --- a/.github/workflows/tssdk-ci.yml +++ b/.github/workflows/tssdk-ci.yml @@ -34,11 +34,13 @@ env: TS_JUNIT_OUTPUT_DIR: results/tssdk permissions: - checks: write + contents: read jobs: unit: name: Unit - ${{ matrix.os }} / Node ${{ matrix.node-version }} + permissions: + checks: write env: JEST_JUNIT_OUTPUT_DIR: results/tssdk JEST_JUNIT_OUTPUT_NAME: ${{ matrix.os }}.tssdkrtl${{ matrix.node-version }}.xml @@ -156,10 +158,12 @@ jobs: # TODO: can we cache some layers of the image for faster download? # we probably don't want to cache the final image for IP security... run: | - docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ matrix.looker }} + docker pull --quiet us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${MATRIX_LOOKER} # set $LOOKER_OPTS to --no-ssl if we want to turn off ssl - docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${{ matrix.looker }} + docker run --name looker-sdk-codegen-ci -d -p 10000:9999 -p 20000:19999 us-west1-docker.pkg.dev/cloud-looker-sdk-codegen-cicd/looker/${MATRIX_LOOKER} docker logs -f looker-sdk-codegen-ci --until=30s & + env: + MATRIX_LOOKER: ${{ matrix.looker }} - name: Install Node ${{ matrix.node-version }} uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 From fd929ca29f544659ee7a863fe4549526159d5237 Mon Sep 17 00:00:00 2001 From: Mike DeAngelo Date: Mon, 5 Oct 2026 22:35:57 +0000 Subject: [PATCH 5/6] fix python cattrs.cols --- python/looker_sdk/rtl/serialize.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/python/looker_sdk/rtl/serialize.py b/python/looker_sdk/rtl/serialize.py index 684c72497..e57cdf9a4 100644 --- a/python/looker_sdk/rtl/serialize.py +++ b/python/looker_sdk/rtl/serialize.py @@ -37,7 +37,12 @@ ) import cattr -from cattrs.cols import is_sequence, list_structure_factory + +try: + from cattrs.cols import is_sequence, list_structure_factory +except ImportError: + is_sequence = None # type: ignore + list_structure_factory = None # type: ignore from looker_sdk.rtl import model, hooks @@ -68,7 +73,10 @@ def deserialize( except json.JSONDecodeError as ex: raise DeserializeError(f"Bad json {ex}") try: - converter.register_structure_hook_factory(is_sequence, list_structure_factory) + if is_sequence is not None and list_structure_factory is not None: + converter.register_structure_hook_factory( + is_sequence, list_structure_factory + ) response: TDeserializeReturn = converter.structure( # type: ignore data, structure ) From f10faa254cbba6b8b31102957b5628732cae4cd1 Mon Sep 17 00:00:00 2001 From: Mike DeAngelo Date: Tue, 6 Oct 2026 16:43:39 +0000 Subject: [PATCH 6/6] fix for error resolving WriteCredentialsEmail --- python/looker_sdk/rtl/hooks.py | 3 +++ python/tests/rtl/test_serialize.py | 31 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/python/looker_sdk/rtl/hooks.py b/python/looker_sdk/rtl/hooks.py index 8788fb78f..b3f3fbd1d 100644 --- a/python/looker_sdk/rtl/hooks.py +++ b/python/looker_sdk/rtl/hooks.py @@ -26,6 +26,8 @@ import sys from typing import Type +import attr + def unstructure_hook(converter, api_model): """cattr unstructure hook @@ -35,6 +37,7 @@ def unstructure_hook(converter, api_model): EXPLICIT_NULL fields to None so that we only send null in the json for fields the caller set EXPLICIT_NULL on. """ + attr.resolve_types(api_model.__class__) data = converter.unstructure_attrs_asdict(api_model) for key, value in data.copy().items(): if value is None: diff --git a/python/tests/rtl/test_serialize.py b/python/tests/rtl/test_serialize.py index 007d2f0fb..6c40f6a74 100644 --- a/python/tests/rtl/test_serialize.py +++ b/python/tests/rtl/test_serialize.py @@ -769,3 +769,34 @@ def test_safe_enum_deserialization(): sr.deserialize(data=json.dumps(data), structure=Model, converter=converter) == model ) + + +def test_serialize_forward_ref_unresolved_model(): + @attr.s(auto_attribs=True, init=False) + class UnresolvedModel(ml.Model): + list_enum1: Optional[Sequence["Enum1"]] = None + opt_model_no_refs1: Optional["ModelNoRefs1"] = None + name: Optional[str] = None + + def __init__( + self, + *, + list_enum1: Optional[Sequence["Enum1"]] = None, + opt_model_no_refs1: Optional["ModelNoRefs1"] = None, + name: Optional[str] = None, + ): + self.list_enum1 = list_enum1 + self.opt_model_no_refs1 = opt_model_no_refs1 + self.name = name + + model = UnresolvedModel( + list_enum1=[Enum1.entry1], + name="my-name", + ) + expected = json.dumps( + { + "list_enum1": ["entry1"], + "name": "my-name", + } + ).encode("utf-8") + assert sr.serialize40(api_model=model) == expected