diff --git a/docs/static/resources/openapi.json b/docs/static/resources/openapi.json index 9c360c71e436576df6c76d3d494d46d3c02941e1..bb8858fb6ccf888a0cf9061676b52e23ab43e710 100644 --- a/docs/static/resources/openapi.json +++ b/docs/static/resources/openapi.json @@ -635,37 +635,6 @@ }, "type": "object" }, - "AppleHealthResponseSchema": { - "properties": { - "cache_message": { - "description": "Human readable status message for the cache connection", - "type": "string" - }, - "cache_status": { - "description": "The status of the cache", - "enum": [ - "NA", - "HEALTHY", - "ERROR" - ], - "type": "string" - }, - "metastore_message": { - "description": "Human readable status message for the metastore connection", - "type": "string" - }, - "metastore_status": { - "description": "The status of the metastore", - "enum": [ - "NA", - "HEALTHY", - "ERROR" - ], - "type": "string" - } - }, - "type": "object" - }, "AvailableDomainsSchema": { "properties": { "domains": { @@ -677,132 +646,6 @@ }, "type": "object" }, - "CSVMetadataUploadFilePostSchema": { - "properties": { - "delimiter": { - "description": "The delimiter of the CSV file", - "type": "string" - }, - "file": { - "description": "The file to upload", - "format": "binary", - "type": "string" - }, - "header_row": { - "description": "Row containing the headers to use as column names(0 is first line of data). Leave empty if there is no header row.", - "type": "integer" - } - }, - "required": [ - "file" - ], - "type": "object" - }, - "CSVUploadPostSchema": { - "properties": { - "already_exists": { - "default": "fail", - "description": "What to do if the table already exists accepts: fail, replace, append", - "enum": [ - "fail", - "replace", - "append" - ], - "type": "string" - }, - "column_data_types": { - "description": "A dictionary with column names and their data types if you need to change the defaults. Example: {'user_id':'int'}. Check Python Pandas library for supported data types", - "type": "string" - }, - "column_dates": { - "description": "A list of column names that should be parsed as dates. Example: date,timestamp", - "items": { - "type": "string" - }, - "type": "array" - }, - "columns_read": { - "description": "A List of the column names that should be read", - "items": { - "type": "string" - }, - "type": "array" - }, - "dataframe_index": { - "description": "Write dataframe index as a column.", - "type": "boolean" - }, - "day_first": { - "description": "DD/MM format dates, international and European format", - "type": "boolean" - }, - "decimal_character": { - "description": "Character to recognize as decimal point. Default is '.'", - "type": "string" - }, - "delimiter": { - "description": "The delimiter of the CSV file", - "type": "string" - }, - "file": { - "description": "The CSV file to upload", - "format": "text/csv", - "type": "string" - }, - "header_row": { - "description": "Row containing the headers to use as column names(0 is first line of data). Leave empty if there is no header row.", - "type": "integer" - }, - "index_column": { - "description": "Column to use as the row labels of the dataframe. Leave empty if no index column", - "type": "string" - }, - "index_label": { - "description": "Index label for index column.", - "type": "string" - }, - "null_values": { - "description": "A list of strings that should be treated as null. Examples: '' for empty strings, 'None', 'N/A',Warning: Hive database supports only a single value", - "items": { - "type": "string" - }, - "type": "array" - }, - "rows_to_read": { - "description": "Number of rows to read from the file. If None, reads all rows.", - "minimum": 1, - "nullable": true, - "type": "integer" - }, - "schema": { - "description": "The schema to upload the data file to.", - "type": "string" - }, - "skip_blank_lines": { - "description": "Skip blank lines in the CSV file.", - "type": "boolean" - }, - "skip_initial_space": { - "description": "Skip spaces after delimiter.", - "type": "boolean" - }, - "skip_rows": { - "description": "Number of rows to skip at start of file.", - "type": "integer" - }, - "table_name": { - "description": "The name of the table to be created/appended", - "maxLength": 10000, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "file", - "table_name" - ], - "type": "object" - }, "CacheInvalidationRequestSchema": { "properties": { "datasource_uids": { @@ -879,6 +722,14 @@ "image_url": { "description": "The url to fetch the screenshot", "type": "string" + }, + "task_status": { + "description": "The status of the async screenshot", + "type": "string" + }, + "task_updated_at": { + "description": "The timestamp of the last change in status", + "type": "string" } }, "type": "object" @@ -1898,7 +1749,7 @@ "type": "boolean" }, "owners": { - "$ref": "#/components/schemas/ChartDataRestApi.get.AppleUser" + "$ref": "#/components/schemas/ChartDataRestApi.get.User" }, "params": { "nullable": true, @@ -1930,26 +1781,6 @@ }, "type": "object" }, - "ChartDataRestApi.get.AppleUser": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": [ - "first_name", - "last_name" - ], - "type": "object" - }, "ChartDataRestApi.get.Dashboard": { "properties": { "dashboard_title": { @@ -1988,6 +1819,26 @@ }, "type": "object" }, + "ChartDataRestApi.get.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "ChartDataRestApi.get_list": { "properties": { "cache_timeout": { @@ -2069,10 +1920,10 @@ "type": "string" }, "last_saved_by": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.AppleUser" + "$ref": "#/components/schemas/ChartDataRestApi.get_list.User2" }, "owners": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.AppleUser1" + "$ref": "#/components/schemas/ChartDataRestApi.get_list.User3" }, "params": { "nullable": true, @@ -2098,52 +1949,17 @@ "url": { "readOnly": true }, - "viz_type": { - "maxLength": 250, + "uuid": { + "format": "uuid", "nullable": true, "type": "string" - } - }, - "type": "object" - }, - "ChartDataRestApi.get_list.AppleUser": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": [ - "first_name", - "last_name" - ], - "type": "object" - }, - "ChartDataRestApi.get_list.AppleUser1": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" }, - "last_name": { - "maxLength": 64, + "viz_type": { + "maxLength": 250, + "nullable": true, "type": "string" } }, - "required": [ - "first_name", - "last_name" - ], "type": "object" }, "ChartDataRestApi.get_list.Dashboard": { @@ -2236,6 +2052,46 @@ ], "type": "object" }, + "ChartDataRestApi.get_list.User2": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "ChartDataRestApi.get_list.User3": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "ChartDataRestApi.post": { "properties": { "cache_timeout": { @@ -2718,7 +2574,7 @@ "type": "boolean" }, "owners": { - "$ref": "#/components/schemas/ChartRestApi.get.AppleUser" + "$ref": "#/components/schemas/ChartRestApi.get.User" }, "params": { "nullable": true, @@ -2750,31 +2606,11 @@ }, "type": "object" }, - "ChartRestApi.get.AppleUser": { + "ChartRestApi.get.Dashboard": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": [ - "first_name", - "last_name" - ], - "type": "object" - }, - "ChartRestApi.get.Dashboard": { - "properties": { - "dashboard_title": { - "maxLength": 500, - "nullable": true, + "dashboard_title": { + "maxLength": 500, + "nullable": true, "type": "string" }, "id": { @@ -2808,6 +2644,26 @@ }, "type": "object" }, + "ChartRestApi.get.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "ChartRestApi.get_list": { "properties": { "cache_timeout": { @@ -2889,10 +2745,10 @@ "type": "string" }, "last_saved_by": { - "$ref": "#/components/schemas/ChartRestApi.get_list.AppleUser" + "$ref": "#/components/schemas/ChartRestApi.get_list.User2" }, "owners": { - "$ref": "#/components/schemas/ChartRestApi.get_list.AppleUser1" + "$ref": "#/components/schemas/ChartRestApi.get_list.User3" }, "params": { "nullable": true, @@ -2918,52 +2774,17 @@ "url": { "readOnly": true }, - "viz_type": { - "maxLength": 250, + "uuid": { + "format": "uuid", "nullable": true, "type": "string" - } - }, - "type": "object" - }, - "ChartRestApi.get_list.AppleUser": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": [ - "first_name", - "last_name" - ], - "type": "object" - }, - "ChartRestApi.get_list.AppleUser1": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" }, - "last_name": { - "maxLength": 64, + "viz_type": { + "maxLength": 250, + "nullable": true, "type": "string" } }, - "required": [ - "first_name", - "last_name" - ], "type": "object" }, "ChartRestApi.get_list.Dashboard": { @@ -3056,6 +2877,46 @@ ], "type": "object" }, + "ChartRestApi.get_list.User2": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "ChartRestApi.get_list.User3": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "ChartRestApi.post": { "properties": { "cache_timeout": { @@ -3265,68 +3126,6 @@ }, "type": "object" }, - "ColumnarMetadataUploadFilePostSchema": { - "properties": { - "file": { - "description": "The file to upload", - "format": "binary", - "type": "string" - } - }, - "required": [ - "file" - ], - "type": "object" - }, - "ColumnarUploadPostSchema": { - "properties": { - "already_exists": { - "default": "fail", - "description": "What to do if the table already exists accepts: fail, replace, append", - "enum": [ - "fail", - "replace", - "append" - ], - "type": "string" - }, - "columns_read": { - "description": "A List of the column names that should be read", - "items": { - "type": "string" - }, - "type": "array" - }, - "dataframe_index": { - "description": "Write dataframe index as a column.", - "type": "boolean" - }, - "file": { - "description": "The Columnar file to upload", - "format": "binary", - "type": "string" - }, - "index_label": { - "description": "Index label for index column.", - "type": "string" - }, - "schema": { - "description": "The schema to upload the data file to.", - "type": "string" - }, - "table_name": { - "description": "The name of the table to be created/appended", - "maxLength": 10000, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "file", - "table_name" - ], - "type": "object" - }, "CssTemplateRestApi.get": { "properties": { "changed_by": { @@ -3505,6 +3304,14 @@ "image_url": { "description": "The url to fetch the screenshot", "type": "string" + }, + "task_status": { + "description": "The status of the async screenshot", + "type": "string" + }, + "task_updated_at": { + "description": "The timestamp of the last change in status", + "type": "string" } }, "type": "object" @@ -3766,6 +3573,7 @@ "type": "array" }, "thumbnail_url": { + "nullable": true, "type": "string" }, "url": { @@ -3842,10 +3650,6 @@ "created_on_delta_humanized": { "readOnly": true }, - "css": { - "nullable": true, - "type": "string" - }, "dashboard_title": { "maxLength": 500, "nullable": true, @@ -3857,16 +3661,8 @@ "is_managed_externally": { "type": "boolean" }, - "json_metadata": { - "nullable": true, - "type": "string" - }, "owners": { - "$ref": "#/components/schemas/DashboardRestApi.get_list.AppleUser" - }, - "position_json": { - "nullable": true, - "type": "string" + "$ref": "#/components/schemas/DashboardRestApi.get_list.User2" }, "published": { "nullable": true, @@ -3891,28 +3687,13 @@ }, "url": { "readOnly": true - } - }, - "type": "object" - }, - "DashboardRestApi.get_list.AppleUser": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" }, - "last_name": { - "maxLength": 64, + "uuid": { + "format": "uuid", + "nullable": true, "type": "string" } }, - "required": [ - "first_name", - "last_name" - ], "type": "object" }, "DashboardRestApi.get_list.Role": { @@ -3991,6 +3772,26 @@ ], "type": "object" }, + "DashboardRestApi.get_list.User2": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "DashboardRestApi.post": { "properties": { "certification_details": { @@ -5525,7 +5326,7 @@ "type": "string" }, "changed_by": { - "$ref": "#/components/schemas/DatasetRestApi.get.User1" + "$ref": "#/components/schemas/DatasetRestApi.get.User2" }, "changed_on": { "format": "date-time", @@ -5542,7 +5343,7 @@ "$ref": "#/components/schemas/DatasetRestApi.get.TableColumn" }, "created_by": { - "$ref": "#/components/schemas/DatasetRestApi.get.User" + "$ref": "#/components/schemas/DatasetRestApi.get.User1" }, "created_on": { "format": "date-time", @@ -5581,6 +5382,9 @@ "nullable": true, "type": "boolean" }, + "folders": { + "nullable": true + }, "granularity_sqla": { "readOnly": true }, @@ -5620,7 +5424,7 @@ "readOnly": true }, "owners": { - "$ref": "#/components/schemas/DatasetRestApi.get.AppleUser" + "$ref": "#/components/schemas/DatasetRestApi.get.User" }, "schema": { "maxLength": 255, @@ -5663,36 +5467,16 @@ ], "type": "object" }, - "DatasetRestApi.get.AppleUser": { + "DatasetRestApi.get.Database": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": [ - "first_name", - "last_name" - ], - "type": "object" - }, - "DatasetRestApi.get.Database": { - "properties": { - "allow_multi_catalog": { - "readOnly": true - }, - "backend": { - "readOnly": true - }, - "database_name": { - "maxLength": 250, + "allow_multi_catalog": { + "readOnly": true + }, + "backend": { + "readOnly": true + }, + "database_name": { + "maxLength": 250, "type": "string" }, "id": { @@ -5717,9 +5501,7 @@ "type": "string" }, "currency": { - "maxLength": 128, - "nullable": true, - "type": "string" + "nullable": true }, "d3format": { "maxLength": 128, @@ -5749,6 +5531,11 @@ "nullable": true, "type": "string" }, + "uuid": { + "format": "uuid", + "nullable": true, + "type": "string" + }, "verbose_name": { "maxLength": 1024, "nullable": true, @@ -5851,6 +5638,9 @@ "maxLength": 64, "type": "string" }, + "id": { + "type": "integer" + }, "last_name": { "maxLength": 64, "type": "string" @@ -5879,6 +5669,23 @@ ], "type": "object" }, + "DatasetRestApi.get.User2": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "DatasetRestApi.get_list": { "properties": { "catalog": { @@ -5926,7 +5733,7 @@ "readOnly": true }, "owners": { - "$ref": "#/components/schemas/DatasetRestApi.get_list.AppleUser" + "$ref": "#/components/schemas/DatasetRestApi.get_list.User1" }, "schema": { "maxLength": 255, @@ -5940,6 +5747,11 @@ "table_name": { "maxLength": 250, "type": "string" + }, + "uuid": { + "format": "uuid", + "nullable": true, + "type": "string" } }, "required": [ @@ -5948,42 +5760,42 @@ ], "type": "object" }, - "DatasetRestApi.get_list.AppleUser": { + "DatasetRestApi.get_list.Database": { "properties": { - "first_name": { - "maxLength": 64, + "database_name": { + "maxLength": 250, "type": "string" }, "id": { "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" } }, "required": [ - "first_name", - "last_name" + "database_name" ], "type": "object" }, - "DatasetRestApi.get_list.Database": { + "DatasetRestApi.get_list.User": { "properties": { - "database_name": { - "maxLength": 250, + "first_name": { + "maxLength": 64, "type": "string" }, "id": { "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" } }, "required": [ - "database_name" + "first_name", + "last_name" ], "type": "object" }, - "DatasetRestApi.get_list.User": { + "DatasetRestApi.get_list.User1": { "properties": { "first_name": { "maxLength": 64, @@ -6109,6 +5921,12 @@ "nullable": true, "type": "boolean" }, + "folders": { + "items": { + "$ref": "#/components/schemas/Folder" + }, + "type": "array" + }, "is_managed_externally": { "nullable": true, "type": "boolean" @@ -6350,112 +6168,6 @@ ], "type": "object" }, - "ExcelMetadataUploadFilePostSchema": { - "properties": { - "file": { - "description": "The file to upload", - "format": "binary", - "type": "string" - }, - "header_row": { - "description": "Row containing the headers to use as column names(0 is first line of data). Leave empty if there is no header row.", - "type": "integer" - } - }, - "required": [ - "file" - ], - "type": "object" - }, - "ExcelUploadPostSchema": { - "properties": { - "already_exists": { - "default": "fail", - "description": "What to do if the table already exists accepts: fail, replace, append", - "enum": [ - "fail", - "replace", - "append" - ], - "type": "string" - }, - "column_dates": { - "description": "A list of column names that should be parsed as dates. Example: date,timestamp", - "items": { - "type": "string" - }, - "type": "array" - }, - "columns_read": { - "description": "A List of the column names that should be read", - "items": { - "type": "string" - }, - "type": "array" - }, - "dataframe_index": { - "description": "Write dataframe index as a column.", - "type": "boolean" - }, - "decimal_character": { - "description": "Character to recognize as decimal point. Default is '.'", - "type": "string" - }, - "file": { - "description": "The Excel file to upload", - "format": "binary", - "type": "string" - }, - "header_row": { - "description": "Row containing the headers to use as column names(0 is first line of data). Leave empty if there is no header row.", - "type": "integer" - }, - "index_column": { - "description": "Column to use as the row labels of the dataframe. Leave empty if no index column", - "type": "string" - }, - "index_label": { - "description": "Index label for index column.", - "type": "string" - }, - "null_values": { - "description": "A list of strings that should be treated as null. Examples: '' for empty strings, 'None', 'N/A',Warning: Hive database supports only a single value", - "items": { - "type": "string" - }, - "type": "array" - }, - "rows_to_read": { - "description": "Number of rows to read from the file. If None, reads all rows.", - "minimum": 1, - "nullable": true, - "type": "integer" - }, - "schema": { - "description": "The schema to upload the data file to.", - "type": "string" - }, - "sheet_name": { - "description": "Strings used for sheet names (default is the first sheet).", - "type": "string" - }, - "skip_rows": { - "description": "Number of rows to skip at start of file.", - "type": "integer" - }, - "table_name": { - "description": "The name of the table to be created/appended", - "maxLength": 10000, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "file", - "table_name" - ], - "type": "object" - }, "ExecutePayloadSchema": { "properties": { "catalog": { @@ -6563,6 +6275,44 @@ ], "type": "object" }, + "Folder": { + "properties": { + "children": { + "items": { + "$ref": "#/components/schemas/Folder" + }, + "nullable": true, + "type": "array" + }, + "description": { + "maxLength": 1000, + "minLength": 0, + "nullable": true, + "type": "string" + }, + "name": { + "maxLength": 250, + "minLength": 1, + "type": "string" + }, + "type": { + "enum": [ + "metric", + "column", + "folder" + ], + "type": "string" + }, + "uuid": { + "format": "uuid", + "type": "string" + } + }, + "required": [ + "uuid" + ], + "type": "object" + }, "FormDataPostSchema": { "properties": { "chart_id": { @@ -6708,176 +6458,56 @@ ], "type": "object" }, - "IASLoginTokenRequestSchema": { + "ImportV1Database": { "properties": { - "access_token": { - "description": "IAS Access token. Can be requested by adding `token` to the `responseTypes`.", + "allow_csv_upload": { + "type": "boolean" + }, + "allow_ctas": { + "type": "boolean" + }, + "allow_cvas": { + "type": "boolean" + }, + "allow_dml": { + "type": "boolean" + }, + "allow_run_async": { + "type": "boolean" + }, + "cache_timeout": { "nullable": true, + "type": "integer" + }, + "database_name": { "type": "string" }, - "client_id": { - "description": "IAS client id. Only needed if `refresh_token` is provided.", + "encrypted_extra": { "nullable": true, "type": "string" }, - "client_secret": { - "description": "IAS client secret. Only needed if `refresh_token` and `client_id` is provided.", + "expose_in_sqllab": { + "type": "boolean" + }, + "external_url": { "nullable": true, "type": "string" }, - "id_token": { - "description": "IAS ID token. Can be requested by adding `id_token` to the `responseTypes`. The following scopes should be added:`iam:ds:groups`, `corpds:ds:username`, `corpds:ds:firstName`, `corpds:ds:lastName`, `corpds:ds:email`, `corpds:ds:uidNumber`, `iam:ds:explicitgroups`.", - "type": "string" + "extra": { + "$ref": "#/components/schemas/ImportV1DatabaseExtra" + }, + "impersonate_user": { + "type": "boolean" }, - "refresh_token": { - "description": "IAS refresh token. This can be requested by adding `offline` to `scopes`. To be able to refresh the token, the IAS `client_id` and `client_secret` need to be added, as the same client needs to be used for refreshing as logging in.", + "is_managed_externally": { + "nullable": true, + "type": "boolean" + }, + "password": { "nullable": true, - "type": "string" - } - }, - "required": [ - "id_token" - ], - "type": "object" - }, - "IASLoginTokenResponseSchema": { - "properties": { - "access_token": { - "description": "Access that can be used access the Superset API", "type": "string" }, - "refresh_token": { - "description": "Refresh token that can be used to refresh the `access_token`", - "type": "string" - } - }, - "required": [ - "access_token" - ], - "type": "object" - }, - "IASProfileResponse": { - "properties": { - "client_id": { - "description": "The client id", - "type": "string" - }, - "profile": { - "description": "The IAS profile", - "type": "string" - }, - "scope": { - "description": "The scope of the client", - "type": "string" - } - }, - "required": [ - "client_id", - "profile" - ], - "type": "object" - }, - "IASProfilesResponseSchema": { - "properties": { - "result": { - "description": "A list of all available IAS profiles", - "items": { - "$ref": "#/components/schemas/IASProfileResponse" - }, - "type": "array" - } - }, - "type": "object" - }, - "IASTokenResponse": { - "properties": { - "access_token": { - "description": "The access token", - "type": "string" - }, - "has_client_credentials": { - "description": "Are the original client credentials available or not", - "type": "boolean" - }, - "has_refresh_token": { - "description": "Is there a refresh token available or not", - "type": "boolean" - }, - "ias_profile": { - "description": "The IAS profile", - "type": "string" - }, - "id_token": { - "description": "The id token", - "type": "string" - } - }, - "required": [ - "has_client_credentials", - "has_refresh_token", - "ias_profile", - "id_token" - ], - "type": "object" - }, - "IASTokensResponseSchema": { - "properties": { - "result": { - "description": "A list of all requested tokens", - "items": { - "$ref": "#/components/schemas/IASTokenResponse" - }, - "type": "array" - } - }, - "type": "object" - }, - "ImportV1Database": { - "properties": { - "allow_csv_upload": { - "type": "boolean" - }, - "allow_ctas": { - "type": "boolean" - }, - "allow_cvas": { - "type": "boolean" - }, - "allow_dml": { - "type": "boolean" - }, - "allow_run_async": { - "type": "boolean" - }, - "cache_timeout": { - "nullable": true, - "type": "integer" - }, - "database_name": { - "type": "string" - }, - "expose_in_sqllab": { - "type": "boolean" - }, - "external_url": { - "nullable": true, - "type": "string" - }, - "extra": { - "$ref": "#/components/schemas/ImportV1DatabaseExtra" - }, - "impersonate_user": { - "type": "boolean" - }, - "is_managed_externally": { - "nullable": true, - "type": "boolean" - }, - "password": { - "nullable": true, - "type": "string" - }, - "sqlalchemy_uri": { + "sqlalchemy_uri": { "type": "string" }, "ssh_tunnel": { @@ -6938,6 +6568,10 @@ "additionalProperties": {}, "type": "object" }, + "schema_options": { + "additionalProperties": {}, + "type": "object" + }, "schemas_allowed_for_csv_upload": { "items": { "type": "string" @@ -6951,446 +6585,298 @@ }, "type": "object" }, - "LakehouseCatalog": { + "LogRestApi.get": { "properties": { - "database_id": { - "description": "The numerical id of the database", + "action": { + "maxLength": 512, + "nullable": true, + "type": "string" + }, + "dashboard_id": { + "nullable": true, "type": "integer" }, - "database_name": { - "description": "The name of the database", + "dttm": { + "format": "date-time", + "nullable": true, "type": "string" }, - "id": { - "description": "The numerical id of the catalog", + "duration_ms": { + "nullable": true, "type": "integer" }, - "name": { - "description": "The name of the catalog", + "json": { + "nullable": true, "type": "string" }, - "sqlalchemy_uri": { - "description": "The SQLAlchemy URI", + "referrer": { + "maxLength": 1024, + "nullable": true, + "type": "string" + }, + "slice_id": { + "nullable": true, + "type": "integer" + }, + "user": { + "$ref": "#/components/schemas/LogRestApi.get.User" + }, + "user_id": { + "nullable": true, + "type": "integer" + } + }, + "type": "object" + }, + "LogRestApi.get.User": { + "properties": { + "username": { + "maxLength": 64, "type": "string" } }, + "required": [ + "username" + ], "type": "object" }, - "LakehouseConnectRequestSchema": { + "LogRestApi.get_list": { "properties": { - "catalogs": { - "description": "A list of catalogs to connect to. If empty or undefined, connect all available catalogs.", - "example": [ - "my_catalog" - ], - "items": { - "type": "string" - }, + "action": { + "maxLength": 512, "nullable": true, - "type": "array" + "type": "string" }, - "database_names": { - "description": "Custom catalog-database name mappings. If undefined, the default naming convention will be used", - "example": { - "my_catalog": "my_database" - }, + "dashboard_id": { "nullable": true, - "type": "object" - }, - "dry_run": { - "description": "Should the task be executed in dry run mode. Useful for testing.", - "example": false, - "type": "boolean" + "type": "integer" }, - "engine_type": { - "description": "The type of the engine (only trino is currently supported)", - "enum": [ - "trino" - ], - "example": "trino", + "dttm": { + "format": "date-time", + "nullable": true, "type": "string" }, - "engine_url": { - "description": "The URL to the engine", - "example": "https://myengine.corp.apple.com", - "type": "string" + "duration_ms": { + "nullable": true, + "type": "integer" }, - "environment": { - "description": "Prod or Int", - "enum": [ - "int", - "prod" - ], - "example": "int", + "json": { + "nullable": true, "type": "string" }, - "name": { - "description": "The name of the Lakehouse (subject to change over time). If left undefined, use lakehouse id", - "example": "My Lakehouse", + "referrer": { + "maxLength": 1024, "nullable": true, "type": "string" }, - "superset_url": { - "description": "The URL of the Superset instance connecting to", - "example": "http://localhost:8088", + "slice_id": { + "nullable": true, + "type": "integer" + }, + "user": { + "$ref": "#/components/schemas/LogRestApi.get_list.User" + }, + "user_id": { + "nullable": true, + "type": "integer" + } + }, + "type": "object" + }, + "LogRestApi.get_list.User": { + "properties": { + "username": { + "maxLength": 64, "type": "string" } }, "required": [ - "engine_type", - "engine_url", - "environment", - "superset_url" + "username" ], "type": "object" }, - "LakehouseConnectResponseSchema": { + "LogRestApi.post": { "properties": { - "task_id": { - "description": "The id of the connection task", - "type": "string" + "id": { + "type": "integer" } }, "type": "object" }, - "LakehouseConnectResultResponseSchema": { + "LogRestApi.put": { "properties": { - "existing_catalogs": { - "description": "A list of connected catalogs before the connect operation", - "items": { - "description": "Catalogs", - "items": { - "$ref": "#/components/schemas/LakehouseCatalog" - }, - "type": "array" - }, - "type": "array" + "action": { + "maxLength": 512, + "nullable": true, + "type": "string" }, - "lakehouse": { - "allOf": [ - { - "$ref": "#/components/schemas/LakehouseGetResponseSchema" - } - ], - "description": "The connected Lakehouse", - "nullable": true + "dttm": { + "format": "date-time", + "nullable": true, + "type": "string" }, - "message": { - "description": "A message to provide additional context on what has happened", + "json": { + "nullable": true, "type": "string" }, - "new_catalogs": { - "description": "A list of newly connected catalogs after the connect operation", - "items": { - "description": "Catalogs", - "items": { - "$ref": "#/components/schemas/LakehouseCatalog" - }, - "type": "array" - }, - "type": "array" + "user": { + "nullable": true + } + }, + "type": "object" + }, + "PermissionApi.get": { + "properties": { + "id": { + "type": "integer" }, - "status": { - "description": "The status of the task", - "enum": [ - "scheduled", - "running", - "completed", - "failed", - "reconnect_failed", - "cancelled" - ], + "name": { + "maxLength": 100, "type": "string" } }, "required": [ - "lakehouse" + "name" ], "type": "object" }, - "LakehouseConnectStatusResponseSchema": { + "PermissionApi.get_list": { "properties": { - "message": { - "description": "A message to provide additional context on what has happened", - "type": "string" + "id": { + "type": "integer" }, - "status": { - "description": "The status of the task", - "enum": [ - "scheduled", - "running", - "completed", - "failed", - "reconnect_failed", - "cancelled" - ], - "type": "string" - } - }, - "type": "object" - }, - "LakehouseDatasetListResponseSchema": { - "properties": { "name": { - "description": "The name of the dataset", - "type": "string" - }, - "schema": { - "description": "The schema", - "nullable": true, - "type": "string" - }, - "sql": { - "description": "The virtual dataset query", + "maxLength": 100, "type": "string" } }, "required": [ - "name", - "sql" + "name" ], "type": "object" }, - "LakehouseDatasetRequestSchema": { + "PermissionApi.post": { "properties": { - "catalog": { - "description": "The catalog. If left empty, uses an arbitrary connected catalog.", - "nullable": true, - "type": "string" - }, - "lakehouse_id": { - "description": "Deprecated, not used for anything", - "type": "string" - }, "name": { - "description": "The name of the dataset to be created", - "type": "string" - }, - "overwrite": { - "default": false, - "description": "Should the virtual dataset be overwritten if it already exists", - "type": "boolean" - }, - "schema": { - "description": "The schema", - "nullable": true, - "type": "string" - }, - "sql": { - "description": "The virtual dataset query", + "maxLength": 100, "type": "string" } }, "required": [ - "name", - "sql" + "name" ], "type": "object" }, - "LakehouseDatasetResponseSchema": { + "PermissionApi.put": { "properties": { - "url": { - "description": "The url for exploring the virtual dataset", + "name": { + "maxLength": 100, "type": "string" } }, "required": [ - "url" + "name" ], "type": "object" }, - "LakehouseDisconnectResponseSchema": { + "PermissionViewMenuApi.get": { "properties": { - "lakehouse": { - "allOf": [ - { - "$ref": "#/components/schemas/LakehouseGetResponseSchema" - } - ], - "description": "A list of disconnected lakehouses" + "id": { + "type": "integer" + }, + "permission": { + "$ref": "#/components/schemas/PermissionViewMenuApi.get.Permission" + }, + "view_menu": { + "$ref": "#/components/schemas/PermissionViewMenuApi.get.ViewMenu" } }, "type": "object" }, - "LakehouseGetListResponseSchema": { + "PermissionViewMenuApi.get.Permission": { "properties": { - "lakehouses": { - "description": "A list of connected lakehouses", - "items": { - "$ref": "#/components/schemas/LakehouseGetResponseSchema" - }, - "type": "array" + "name": { + "maxLength": 100, + "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "LakehouseGetResponseSchema": { + "PermissionViewMenuApi.get.ViewMenu": { "properties": { - "catalogs": { - "description": "A list of connected catalogs", - "items": { - "description": "Catalogs", - "items": { - "$ref": "#/components/schemas/LakehouseCatalog" - }, - "type": "array" - }, - "type": "array" - }, - "engine_url": { - "description": "The URL uf the engine", - "type": "string" - }, - "id": { - "description": "The unique id of the Lakehouse", - "type": "string" - }, "name": { - "type": "string" - }, - "superset_url": { - "description": "The URL uf the Superset instance", + "maxLength": 250, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "LogRestApi.get": { + "PermissionViewMenuApi.get_list": { "properties": { - "action": { - "maxLength": 512, - "nullable": true, - "type": "string" - }, - "dashboard_id": { - "nullable": true, - "type": "integer" - }, - "dttm": { - "format": "date-time", - "nullable": true, - "type": "string" - }, - "duration_ms": { - "nullable": true, - "type": "integer" - }, - "json": { - "nullable": true, - "type": "string" - }, - "referrer": { - "maxLength": 1024, - "nullable": true, - "type": "string" - }, - "slice_id": { - "nullable": true, + "id": { "type": "integer" }, - "user": { - "$ref": "#/components/schemas/LogRestApi.get.AppleUser" + "permission": { + "$ref": "#/components/schemas/PermissionViewMenuApi.get_list.Permission" }, - "user_id": { - "nullable": true, - "type": "integer" + "view_menu": { + "$ref": "#/components/schemas/PermissionViewMenuApi.get_list.ViewMenu" } }, "type": "object" }, - "LogRestApi.get.AppleUser": { + "PermissionViewMenuApi.get_list.Permission": { "properties": { - "username": { - "maxLength": 64, + "name": { + "maxLength": 100, "type": "string" } }, "required": [ - "username" + "name" ], "type": "object" }, - "LogRestApi.get_list": { - "properties": { - "action": { - "maxLength": 512, - "nullable": true, - "type": "string" - }, - "dashboard_id": { - "nullable": true, - "type": "integer" - }, - "dttm": { - "format": "date-time", - "nullable": true, - "type": "string" - }, - "duration_ms": { - "nullable": true, - "type": "integer" - }, - "json": { - "nullable": true, - "type": "string" - }, - "referrer": { - "maxLength": 1024, - "nullable": true, - "type": "string" - }, - "slice_id": { - "nullable": true, - "type": "integer" - }, - "user": { - "$ref": "#/components/schemas/LogRestApi.get_list.AppleUser" - }, - "user_id": { - "nullable": true, - "type": "integer" - } - }, - "type": "object" - }, - "LogRestApi.get_list.AppleUser": { + "PermissionViewMenuApi.get_list.ViewMenu": { "properties": { - "username": { - "maxLength": 64, + "name": { + "maxLength": 250, "type": "string" } }, "required": [ - "username" + "name" ], "type": "object" }, - "LogRestApi.post": { + "PermissionViewMenuApi.post": { "properties": { - "id": { + "permission_id": { + "nullable": true, + "type": "integer" + }, + "view_menu_id": { + "nullable": true, "type": "integer" } }, "type": "object" }, - "LogRestApi.put": { + "PermissionViewMenuApi.put": { "properties": { - "action": { - "maxLength": 512, - "nullable": true, - "type": "string" - }, - "dttm": { - "format": "date-time", + "permission_id": { "nullable": true, - "type": "string" + "type": "integer" }, - "json": { + "view_menu_id": { "nullable": true, - "type": "string" - }, - "user": { - "nullable": true + "type": "integer" } }, "type": "object" @@ -8239,7 +7725,7 @@ "type": "string" }, "owners": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get.AppleUser" + "$ref": "#/components/schemas/ReportScheduleRestApi.get.User" }, "recipients": { "$ref": "#/components/schemas/ReportScheduleRestApi.get.ReportRecipients" @@ -8283,26 +7769,6 @@ ], "type": "object" }, - "ReportScheduleRestApi.get.AppleUser": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": [ - "first_name", - "last_name" - ], - "type": "object" - }, "ReportScheduleRestApi.get.Dashboard": { "properties": { "dashboard_title": { @@ -8368,6 +7834,26 @@ }, "type": "object" }, + "ReportScheduleRestApi.get.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "ReportScheduleRestApi.get_list": { "properties": { "active": { @@ -8438,7 +7924,7 @@ "type": "string" }, "owners": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.AppleUser" + "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User2" }, "recipients": { "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.ReportRecipients" @@ -8460,26 +7946,6 @@ ], "type": "object" }, - "ReportScheduleRestApi.get_list.AppleUser": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": [ - "first_name", - "last_name" - ], - "type": "object" - }, "ReportScheduleRestApi.get_list.ReportRecipients": { "properties": { "id": { @@ -8529,13 +7995,33 @@ ], "type": "object" }, - "ReportScheduleRestApi.post": { + "ReportScheduleRestApi.get_list.User2": { "properties": { - "active": { - "type": "boolean" + "first_name": { + "maxLength": 64, + "type": "string" }, - "chart": { - "nullable": true, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "ReportScheduleRestApi.post": { + "properties": { + "active": { + "type": "boolean" + }, + "chart": { + "nullable": true, "type": "integer" }, "context_markdown": { @@ -10046,6 +9532,73 @@ ], "type": "object" }, + "RolePermissionListSchema": { + "properties": { + "id": { + "type": "integer" + }, + "permission_name": { + "type": "string" + }, + "view_menu_name": { + "type": "string" + } + }, + "type": "object" + }, + "RolePermissionPostSchema": { + "properties": { + "permission_view_menu_ids": { + "description": "List of permission view menu id", + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "required": [ + "permission_view_menu_ids" + ], + "type": "object" + }, + "RoleResponseSchema": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "permission_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "type": "object" + }, + "RoleUserPutSchema": { + "properties": { + "user_ids": { + "description": "List of user ids", + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "required": [ + "user_ids" + ], + "type": "object" + }, "Roles": { "properties": { "id": { @@ -10068,6 +9621,26 @@ }, "type": "object" }, + "RolesResponseSchema": { + "properties": { + "count": { + "type": "integer" + }, + "ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "result": { + "items": { + "$ref": "#/components/schemas/RoleResponseSchema" + }, + "type": "array" + } + }, + "type": "object" + }, "SQLLabBootstrapSchema": { "properties": { "active_tab": { @@ -10531,1185 +10104,2080 @@ }, "type": "object" }, - "StopQuerySchema": { - "properties": { - "client_id": { - "type": "string" - } - }, - "type": "object" - }, - "Tab": { - "properties": { - "children": { - "items": { - "$ref": "#/components/schemas/Tab" - }, - "type": "array" - }, - "parents": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "type": "object" - }, - "TabState": { + "SqlLabPermalinkSchema": { "properties": { - "active": { - "type": "boolean" - }, "autorun": { "type": "boolean" }, - "database_id": { - "type": "integer" - }, - "extra_json": { - "type": "object" - }, - "hide_left_bar": { - "type": "boolean" - }, - "id": { - "type": "string" - }, - "label": { + "catalog": { + "description": "The catalog name of the query", + "nullable": true, "type": "string" }, - "latest_query": { - "$ref": "#/components/schemas/QueryResult" - }, - "query_limit": { + "dbId": { + "description": "The id of the database", "type": "integer" }, - "saved_query": { - "nullable": true, - "type": "object" + "name": { + "description": "The label of the editor tab", + "type": "string" }, "schema": { + "description": "The schema name of the query", + "nullable": true, "type": "string" }, "sql": { + "description": "SQL query text", "type": "string" }, - "table_schemas": { - "items": { - "$ref": "#/components/schemas/Table" - }, - "type": "array" - }, - "user_id": { - "type": "integer" + "templateParams": { + "description": "stringfied JSON string for template parameters", + "nullable": true, + "type": "string" } }, + "required": [ + "dbId", + "name", + "sql" + ], "type": "object" }, - "Table": { + "StopQuerySchema": { "properties": { - "database_id": { - "type": "integer" - }, - "description": { + "client_id": { "type": "string" - }, - "expanded": { - "type": "boolean" - }, + } + }, + "type": "object" + }, + "SupersetRoleApi.get": { + "properties": { "id": { "type": "integer" }, - "schema": { + "name": { + "maxLength": 64, "type": "string" - }, - "tab_state_id": { + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "SupersetRoleApi.get_list": { + "properties": { + "id": { "type": "integer" }, - "table": { + "name": { + "maxLength": 64, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TableExtraMetadataResponseSchema": { + "SupersetRoleApi.post": { "properties": { - "clustering": { - "type": "object" - }, - "metadata": { - "type": "object" - }, - "partitions": { - "type": "object" + "name": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TableMetadataColumnsResponse": { + "SupersetRoleApi.put": { "properties": { - "duplicates_constraint": { - "type": "string" - }, - "keys": { - "description": "", - "items": { - "type": "string" - }, - "type": "array" - }, - "longType": { - "description": "The actual backend long type for the column", - "type": "string" - }, "name": { - "description": "The column name", - "type": "string" - }, - "type": { - "description": "The column type", + "maxLength": 64, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TableMetadataForeignKeysIndexesResponse": { + "SupersetUserApi.get": { "properties": { - "column_names": { - "items": { - "description": "A list of column names that compose the foreign key or index", - "type": "string" - }, - "type": "array" + "active": { + "nullable": true, + "type": "boolean" }, - "name": { - "description": "The name of the foreign key or index", - "type": "string" + "changed_by": { + "$ref": "#/components/schemas/SupersetUserApi.get.User1" }, - "options": { - "$ref": "#/components/schemas/TableMetadataOptionsResponse" + "changed_on": { + "format": "date-time", + "nullable": true, + "type": "string" }, - "referred_columns": { - "items": { - "type": "string" - }, - "type": "array" + "created_by": { + "$ref": "#/components/schemas/SupersetUserApi.get.User" }, - "referred_schema": { + "created_on": { + "format": "date-time", + "nullable": true, "type": "string" }, - "referred_table": { + "email": { + "maxLength": 320, "type": "string" }, - "type": { + "fail_login_count": { + "nullable": true, + "type": "integer" + }, + "first_name": { + "maxLength": 64, "type": "string" - } - }, - "type": "object" - }, - "TableMetadataOptionsResponse": { - "properties": { - "deferrable": { - "type": "boolean" }, - "initially": { - "type": "boolean" + "id": { + "type": "integer" }, - "match": { - "type": "boolean" + "last_login": { + "format": "date-time", + "nullable": true, + "type": "string" }, - "ondelete": { - "type": "boolean" + "last_name": { + "maxLength": 64, + "type": "string" }, - "onupdate": { - "type": "boolean" - } - }, - "type": "object" - }, - "TableMetadataPrimaryKeyResponse": { - "properties": { - "column_names": { - "items": { - "description": "A list of column names that compose the primary key", - "type": "string" - }, - "type": "array" + "login_count": { + "nullable": true, + "type": "integer" }, - "name": { - "description": "The primary key index name", - "type": "string" + "roles": { + "$ref": "#/components/schemas/SupersetUserApi.get.Role" }, - "type": { + "username": { + "maxLength": 64, "type": "string" } }, + "required": [ + "email", + "first_name", + "last_name", + "username" + ], "type": "object" }, - "TableMetadataResponseSchema": { + "SupersetUserApi.get.Role": { "properties": { - "columns": { - "description": "A list of columns and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataColumnsResponse" - }, - "type": "array" - }, - "foreignKeys": { - "description": "A list of foreign keys and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" - }, - "type": "array" - }, - "indexes": { - "description": "A list of indexes and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" - }, - "type": "array" + "id": { + "type": "integer" }, "name": { - "description": "The name of the table", - "type": "string" - }, - "primaryKey": { - "allOf": [ - { - "$ref": "#/components/schemas/TableMetadataPrimaryKeyResponse" - } - ], - "description": "Primary keys metadata" - }, - "selectStar": { - "description": "SQL select star", + "maxLength": 64, "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "Tables": { + "SupersetUserApi.get.User": { "properties": { "id": { "type": "integer" - }, - "schema": { - "type": "string" - }, - "table_name": { - "type": "string" } }, "type": "object" }, - "TabsPayloadSchema": { + "SupersetUserApi.get.User1": { "properties": { - "all_tabs": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "tab_tree": { - "items": { - "$ref": "#/components/schemas/Tab" - }, - "type": "array" + "id": { + "type": "integer" } }, "type": "object" }, - "Tag": { + "SupersetUserApi.get_list": { "properties": { - "id": { + "active": { + "nullable": true, + "type": "boolean" + }, + "changed_by": { + "$ref": "#/components/schemas/SupersetUserApi.get_list.User1" + }, + "changed_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "created_by": { + "$ref": "#/components/schemas/SupersetUserApi.get_list.User" + }, + "created_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "email": { + "maxLength": 320, + "type": "string" + }, + "fail_login_count": { + "nullable": true, "type": "integer" }, - "name": { + "first_name": { + "maxLength": 64, "type": "string" }, - "type": { - "enum": [ - 1, - 2, - 3, - 4 - ] - } - }, - "type": "object" - }, - "TagGetResponseSchema": { - "properties": { "id": { "type": "integer" }, - "name": { + "last_login": { + "format": "date-time", + "nullable": true, "type": "string" }, - "type": { + "last_name": { + "maxLength": 64, "type": "string" - } - }, - "type": "object" - }, - "TagObject": { - "properties": { - "description": { + }, + "login_count": { "nullable": true, - "type": "string" + "type": "integer" }, - "name": { - "minLength": 1, - "type": "string" + "roles": { + "$ref": "#/components/schemas/SupersetUserApi.get_list.Role" }, - "objects_to_tag": { - "description": "Objects to tag", - "items": {}, - "type": "array" + "username": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "email", + "first_name", + "last_name", + "username" + ], "type": "object" }, - "TagPostBulkResponseObject": { + "SupersetUserApi.get_list.Role": { "properties": { - "objects_skipped": { - "description": "Objects to tag", - "items": {}, - "type": "array" + "id": { + "type": "integer" }, - "objects_tagged": { - "description": "Objects to tag", - "items": {}, - "type": "array" + "name": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "name" + ], "type": "object" }, - "TagPostBulkResponseSchema": { + "SupersetUserApi.get_list.User": { "properties": { - "result": { - "$ref": "#/components/schemas/TagPostBulkResponseObject" + "id": { + "type": "integer" } }, "type": "object" }, - "TagPostBulkSchema": { + "SupersetUserApi.get_list.User1": { "properties": { - "tags": { - "items": { - "$ref": "#/components/schemas/TagObject" - }, - "type": "array" + "id": { + "type": "integer" } }, "type": "object" }, - "TagRestApi.get": { + "SupersetUserApi.post": { "properties": { - "changed_by": { - "$ref": "#/components/schemas/TagRestApi.get.User" + "active": { + "description": "Is user active?It's not a good policy to remove a user, just make it inactive", + "type": "boolean" }, - "changed_on_delta_humanized": { - "readOnly": true + "email": { + "description": "The user's email", + "type": "string" }, - "created_by": { - "$ref": "#/components/schemas/TagRestApi.get.User1" + "first_name": { + "description": "The user's first name", + "type": "string" }, - "created_on_delta_humanized": { - "readOnly": true + "last_name": { + "description": "The user's last name", + "type": "string" }, - "description": { - "nullable": true, + "password": { + "description": "The user's password for authentication", "type": "string" }, - "id": { - "type": "integer" + "roles": { + "description": "The user's roles", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" }, - "name": { + "username": { + "description": "The user's username", "maxLength": 250, - "nullable": true, + "minLength": 1, "type": "string" - }, - "type": { - "enum": [ - 1, - 2, - 3, - 4 - ] } }, + "required": [ + "email", + "first_name", + "last_name", + "password", + "roles", + "username" + ], "type": "object" }, - "TagRestApi.get.User": { + "SupersetUserApi.put": { "properties": { + "active": { + "description": "Is user active?It's not a good policy to remove a user, just make it inactive", + "type": "boolean" + }, + "email": { + "description": "The user's email", + "type": "string" + }, "first_name": { - "maxLength": 64, + "description": "The user's first name", "type": "string" }, "last_name": { - "maxLength": 64, + "description": "The user's last name", + "type": "string" + }, + "password": { + "description": "The user's password for authentication", + "type": "string" + }, + "roles": { + "description": "The user's roles", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "username": { + "description": "The user's username", + "maxLength": 250, + "minLength": 1, "type": "string" } }, - "required": [ - "first_name", - "last_name" - ], "type": "object" }, - "TagRestApi.get.User1": { + "Tab": { "properties": { - "active": { - "nullable": true, - "type": "boolean" + "children": { + "items": { + "$ref": "#/components/schemas/Tab" + }, + "type": "array" }, - "changed_on": { - "format": "date-time", - "nullable": true, - "type": "string" + "parents": { + "items": { + "type": "string" + }, + "type": "array" }, - "created_on": { - "format": "date-time", - "nullable": true, + "title": { "type": "string" }, - "email": { - "maxLength": 320, + "value": { "type": "string" + } + }, + "type": "object" + }, + "TabState": { + "properties": { + "active": { + "type": "boolean" }, - "fail_login_count": { - "nullable": true, + "autorun": { + "type": "boolean" + }, + "database_id": { "type": "integer" }, - "first_name": { - "maxLength": 64, - "type": "string" + "extra_json": { + "type": "object" }, - "id": { - "type": "integer" + "hide_left_bar": { + "type": "boolean" }, - "last_login": { - "format": "date-time", - "nullable": true, + "id": { "type": "string" }, - "last_name": { - "maxLength": 64, + "label": { "type": "string" }, - "login_count": { - "nullable": true, + "latest_query": { + "$ref": "#/components/schemas/QueryResult" + }, + "query_limit": { "type": "integer" }, - "password": { - "maxLength": 256, + "saved_query": { "nullable": true, + "type": "object" + }, + "schema": { "type": "string" }, - "username": { - "maxLength": 64, + "sql": { "type": "string" + }, + "table_schemas": { + "items": { + "$ref": "#/components/schemas/Table" + }, + "type": "array" + }, + "user_id": { + "type": "integer" } }, - "required": [ - "email", - "first_name", - "last_name", - "username" - ], "type": "object" }, - "TagRestApi.get_list": { + "Table": { "properties": { - "changed_by": { - "$ref": "#/components/schemas/TagRestApi.get_list.User" - }, - "changed_on_delta_humanized": { - "readOnly": true - }, - "created_by": { - "$ref": "#/components/schemas/TagRestApi.get_list.User1" - }, - "created_on_delta_humanized": { - "readOnly": true + "database_id": { + "type": "integer" }, "description": { - "nullable": true, "type": "string" }, + "expanded": { + "type": "boolean" + }, "id": { "type": "integer" }, - "name": { - "maxLength": 250, - "nullable": true, + "schema": { "type": "string" }, - "type": { - "enum": [ - 1, - 2, - 3, - 4 - ] - } - }, - "type": "object" - }, - "TagRestApi.get_list.User": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "tab_state_id": { + "type": "integer" }, - "last_name": { - "maxLength": 64, + "table": { "type": "string" } }, - "required": [ - "first_name", - "last_name" - ], "type": "object" }, - "TagRestApi.get_list.User1": { + "TableExtraMetadataResponseSchema": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "clustering": { + "type": "object" }, - "last_name": { - "maxLength": 64, - "type": "string" + "metadata": { + "type": "object" + }, + "partitions": { + "type": "object" } }, - "required": [ - "first_name", - "last_name" - ], "type": "object" }, - "TagRestApi.post": { + "TableMetadataColumnsResponse": { "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "minLength": 1, + "duplicates_constraint": { "type": "string" }, - "objects_to_tag": { - "description": "Objects to tag", - "items": {}, + "keys": { + "description": "", + "items": { + "type": "string" + }, "type": "array" - } - }, - "type": "object" - }, - "TagRestApi.put": { - "properties": { - "description": { - "nullable": true, + }, + "longType": { + "description": "The actual backend long type for the column", "type": "string" }, "name": { - "minLength": 1, + "description": "The column name", "type": "string" }, - "objects_to_tag": { - "description": "Objects to tag", - "items": {}, - "type": "array" + "type": { + "description": "The column type", + "type": "string" } }, "type": "object" }, - "TaggedObjectEntityResponseSchema": { + "TableMetadataForeignKeysIndexesResponse": { "properties": { - "changed_on": { - "format": "date-time", - "type": "string" - }, - "created_by": { - "$ref": "#/components/schemas/User" - }, - "creator": { - "type": "string" - }, - "id": { - "type": "integer" + "column_names": { + "items": { + "description": "A list of column names that compose the foreign key or index", + "type": "string" + }, + "type": "array" }, "name": { + "description": "The name of the foreign key or index", "type": "string" }, - "owners": { - "items": { - "$ref": "#/components/schemas/User1" - }, - "type": "array" + "options": { + "$ref": "#/components/schemas/TableMetadataOptionsResponse" }, - "tags": { + "referred_columns": { "items": { - "$ref": "#/components/schemas/TagGetResponseSchema" + "type": "string" }, "type": "array" }, - "type": { + "referred_schema": { "type": "string" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "TemporaryCachePostSchema": { - "properties": { - "value": { - "description": "Any type of JSON supported text.", + "referred_table": { "type": "string" - } - }, - "required": [ - "value" - ], - "type": "object" - }, - "TemporaryCachePutSchema": { - "properties": { - "value": { - "description": "Any type of JSON supported text.", + }, + "type": { "type": "string" } }, - "required": [ - "value" - ], "type": "object" }, - "UploadFileMetadata": { + "TableMetadataOptionsResponse": { "properties": { - "items": { - "items": { - "$ref": "#/components/schemas/UploadFileMetadataItem" - }, - "type": "array" + "deferrable": { + "type": "boolean" + }, + "initially": { + "type": "boolean" + }, + "match": { + "type": "boolean" + }, + "ondelete": { + "type": "boolean" + }, + "onupdate": { + "type": "boolean" } }, "type": "object" }, - "UploadFileMetadataItem": { + "TableMetadataPrimaryKeyResponse": { "properties": { "column_names": { - "description": "A list of columns names in the sheet", "items": { + "description": "A list of column names that compose the primary key", "type": "string" }, "type": "array" }, - "sheet_name": { - "description": "The name of the sheet", + "name": { + "description": "The primary key index name", + "type": "string" + }, + "type": { "type": "string" } }, "type": "object" }, - "User": { + "TableMetadataResponseSchema": { "properties": { - "first_name": { + "columns": { + "description": "A list of columns and their metadata", + "items": { + "$ref": "#/components/schemas/TableMetadataColumnsResponse" + }, + "type": "array" + }, + "foreignKeys": { + "description": "A list of foreign keys and their metadata", + "items": { + "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" + }, + "type": "array" + }, + "indexes": { + "description": "A list of indexes and their metadata", + "items": { + "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" + }, + "type": "array" + }, + "name": { + "description": "The name of the table", "type": "string" }, - "id": { - "type": "integer" + "primaryKey": { + "allOf": [ + { + "$ref": "#/components/schemas/TableMetadataPrimaryKeyResponse" + } + ], + "description": "Primary keys metadata" }, - "last_name": { + "selectStar": { + "description": "SQL select star", "type": "string" } }, "type": "object" }, - "User1": { + "Tables": { "properties": { - "first_name": { - "type": "string" - }, "id": { "type": "integer" }, - "last_name": { + "schema": { "type": "string" }, - "username": { + "table_name": { "type": "string" } }, "type": "object" }, - "User2": { + "TabsPayloadSchema": { "properties": { - "first_name": { - "type": "string" - }, - "last_name": { - "type": "string" + "all_tabs": { + "additionalProperties": { + "type": "string" + }, + "type": "object" }, - "username": { - "type": "string" + "tab_tree": { + "items": { + "$ref": "#/components/schemas/Tab" + }, + "type": "array" } }, "type": "object" }, - "UserResponseSchema": { + "Tag": { "properties": { - "email": { - "type": "string" + "id": { + "type": "integer" }, - "first_name": { + "name": { "type": "string" }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] + } + }, + "type": "object" + }, + "TagGetResponseSchema": { + "properties": { "id": { "type": "integer" }, - "is_active": { - "type": "boolean" - }, - "is_anonymous": { - "type": "boolean" - }, - "last_name": { + "name": { "type": "string" }, - "username": { + "type": { "type": "string" } }, "type": "object" }, - "ValidateSQLRequest": { + "TagObject": { "properties": { - "catalog": { - "nullable": true, - "type": "string" - }, - "schema": { + "description": { "nullable": true, "type": "string" }, - "sql": { - "description": "SQL statement to validate", + "name": { + "minLength": 1, "type": "string" }, - "template_params": { - "nullable": true, - "type": "object" + "objects_to_tag": { + "description": "Objects to tag", + "items": {}, + "type": "array" } }, - "required": [ - "sql" - ], "type": "object" }, - "ValidateSQLResponse": { + "TagPostBulkResponseObject": { "properties": { - "end_column": { - "type": "integer" - }, - "line_number": { - "type": "integer" - }, - "message": { - "type": "string" + "objects_skipped": { + "description": "Objects to tag", + "items": {}, + "type": "array" }, - "start_column": { - "type": "integer" + "objects_tagged": { + "description": "Objects to tag", + "items": {}, + "type": "array" } }, "type": "object" }, - "ValidatorConfigJSON": { + "TagPostBulkResponseSchema": { "properties": { - "op": { - "description": "The operation to compare with a threshold to apply to the SQL output\n", - "enum": [ - "<", - "<=", - ">", - ">=", - "==", - "!=" - ], - "type": "string" - }, - "threshold": { - "type": "number" + "result": { + "$ref": "#/components/schemas/TagPostBulkResponseObject" } }, "type": "object" }, - "advanced_data_type_convert_schema": { + "TagPostBulkSchema": { "properties": { - "type": { - "default": "port", - "type": "string" - }, - "values": { + "tags": { "items": { - "default": "http" + "$ref": "#/components/schemas/TagObject" }, - "minItems": 1, "type": "array" } }, - "required": [ - "type", - "values" - ], "type": "object" }, - "database_catalogs_query_schema": { + "TagRestApi.get": { "properties": { - "force": { - "type": "boolean" + "changed_by": { + "$ref": "#/components/schemas/TagRestApi.get.User" + }, + "changed_on_delta_humanized": { + "readOnly": true + }, + "created_by": { + "$ref": "#/components/schemas/TagRestApi.get.User1" + }, + "created_on_delta_humanized": { + "readOnly": true + }, + "description": { + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "maxLength": 250, + "nullable": true, + "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, "type": "object" }, - "database_schemas_query_schema": { + "TagRestApi.get.User": { "properties": { - "catalog": { + "first_name": { + "maxLength": 64, "type": "string" }, - "force": { - "type": "boolean" + "last_name": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "database_tables_query_schema": { + "TagRestApi.get.User1": { "properties": { - "catalog_name": { + "active": { + "nullable": true, + "type": "boolean" + }, + "changed_on": { + "format": "date-time", + "nullable": true, "type": "string" }, - "force": { - "type": "boolean" + "created_on": { + "format": "date-time", + "nullable": true, + "type": "string" }, - "schema_name": { + "email": { + "maxLength": 320, + "type": "string" + }, + "fail_login_count": { + "nullable": true, + "type": "integer" + }, + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_login": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "last_name": { + "maxLength": 64, + "type": "string" + }, + "login_count": { + "nullable": true, + "type": "integer" + }, + "password": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "username": { + "maxLength": 64, "type": "string" } }, "required": [ - "schema_name" + "email", + "first_name", + "last_name", + "username" ], "type": "object" }, - "delete_tags_schema": { - "items": { - "type": "string" - }, - "type": "array" - }, - "get_delete_ids_schema": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "get_export_ids_schema": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "get_fav_star_ids_schema": { - "items": { - "type": "integer" - }, - "type": "array" - }, - "get_info_schema": { + "TagRestApi.get_list": { "properties": { - "add_columns": { - "additionalProperties": { - "properties": { - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "object" + "changed_by": { + "$ref": "#/components/schemas/TagRestApi.get_list.User" }, - "edit_columns": { - "additionalProperties": { - "properties": { - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "object" + "changed_on_delta_humanized": { + "readOnly": true }, - "keys": { - "items": { - "enum": [ - "add_columns", - "edit_columns", - "filters", - "permissions", - "add_title", - "edit_title", - "none" - ], - "type": "string" - }, - "type": "array" + "created_by": { + "$ref": "#/components/schemas/TagRestApi.get_list.User1" + }, + "created_on_delta_humanized": { + "readOnly": true + }, + "description": { + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "maxLength": 250, + "nullable": true, + "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, "type": "object" }, - "get_item_schema": { + "TagRestApi.get_list.User": { "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" + "first_name": { + "maxLength": 64, + "type": "string" }, - "keys": { - "items": { - "enum": [ - "show_columns", - "description_columns", - "label_columns", - "show_title", - "none" - ], - "type": "string" - }, - "type": "array" + "last_name": { + "maxLength": 64, + "type": "string" } }, + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "get_list_schema": { + "TagRestApi.get_list.User1": { "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" + "first_name": { + "maxLength": 64, + "type": "string" }, - "filters": { - "items": { - "properties": { - "col": { - "type": "string" - }, - "opr": { - "type": "string" - }, - "value": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "array" - } - ] - } - }, - "required": [ - "col", - "opr", - "value" - ], - "type": "object" - }, - "type": "array" + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "TagRestApi.post": { + "properties": { + "description": { + "nullable": true, + "type": "string" }, - "keys": { - "items": { - "enum": [ - "list_columns", - "order_columns", - "label_columns", - "description_columns", - "list_title", - "none" - ], - "type": "string" - }, + "name": { + "minLength": 1, + "type": "string" + }, + "objects_to_tag": { + "description": "Objects to tag", + "items": {}, "type": "array" + } + }, + "type": "object" + }, + "TagRestApi.put": { + "properties": { + "description": { + "nullable": true, + "type": "string" }, - "order_column": { + "name": { + "minLength": 1, "type": "string" }, - "order_direction": { - "enum": [ - "asc", - "desc" - ], + "objects_to_tag": { + "description": "Objects to tag", + "items": {}, + "type": "array" + } + }, + "type": "object" + }, + "TaggedObjectEntityResponseSchema": { + "properties": { + "changed_on": { + "format": "date-time", "type": "string" }, - "page": { - "type": "integer" + "created_by": { + "$ref": "#/components/schemas/User" }, - "page_size": { + "creator": { + "type": "string" + }, + "id": { "type": "integer" }, - "select_columns": { + "name": { + "type": "string" + }, + "owners": { "items": { - "type": "string" + "$ref": "#/components/schemas/User1" + }, + "type": "array" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/TagGetResponseSchema" }, "type": "array" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" } }, "type": "object" }, - "get_recent_activity_schema": { + "TemporaryCachePostSchema": { "properties": { - "actions": { + "value": { + "description": "Any type of JSON supported text.", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "TemporaryCachePutSchema": { + "properties": { + "value": { + "description": "Any type of JSON supported text.", + "type": "string" + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "UploadFileMetadata": { + "properties": { + "items": { "items": { - "type": "string" + "$ref": "#/components/schemas/UploadFileMetadataItem" }, "type": "array" - }, - "distinct": { - "type": "boolean" - }, - "page": { - "type": "number" - }, - "page_size": { - "type": "number" } }, "type": "object" }, - "get_related_schema": { + "UploadFileMetadataItem": { "properties": { - "filter": { - "type": "string" - }, - "include_ids": { + "column_names": { + "description": "A list of columns names in the sheet", "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "sheet_name": { + "description": "The name of the sheet", + "type": "string" } }, "type": "object" }, - "queries_get_updated_since_schema": { + "UploadFileMetadataPostSchema": { "properties": { - "last_updated_ms": { - "type": "number" + "delimiter": { + "description": "The character used to separate values in the CSV file (e.g., a comma, semicolon, or tab).", + "type": "string" + }, + "file": { + "description": "The file to upload", + "format": "binary", + "type": "string" + }, + "header_row": { + "description": "Row containing the headers to use as column names(0 is first line of data). Leave empty if there is no header row.", + "type": "integer" + }, + "type": { + "description": "File type to upload", + "enum": [ + "csv", + "excel", + "columnar" + ] } }, "required": [ - "last_updated_ms" + "file", + "type" ], "type": "object" }, - "screenshot_query_schema": { + "UploadPostSchema": { "properties": { - "force": { + "already_exists": { + "default": "fail", + "description": "What to do if the table already exists accepts: fail, replace, append", + "enum": [ + "fail", + "replace", + "append" + ], + "type": "string" + }, + "column_data_types": { + "description": "[CSV only] A dictionary with column names and their data types if you need to change the defaults. Example: {'user_id':'int'}. Check Python Pandas library for supported data types", + "type": "string" + }, + "column_dates": { + "description": "[CSV and Excel only] A list of column names that should be parsed as dates. Example: date,timestamp", + "items": { + "type": "string" + }, + "type": "array" + }, + "columns_read": { + "description": "A List of the column names that should be read", + "items": { + "type": "string" + }, + "type": "array" + }, + "dataframe_index": { + "description": "Write dataframe index as a column.", "type": "boolean" }, - "thumb_size": { + "day_first": { + "description": "[CSV only] DD/MM format dates, international and European format", + "type": "boolean" + }, + "decimal_character": { + "description": "[CSV and Excel only] Character to recognize as decimal point. Default is '.'", + "type": "string" + }, + "delimiter": { + "description": "[CSV only] The character used to separate values in the CSV file (e.g., a comma, semicolon, or tab).", + "type": "string" + }, + "file": { + "description": "The file to upload", + "format": "text/csv", + "type": "string" + }, + "header_row": { + "description": "[CSV and Excel only] Row containing the headers to use as column names (0 is first line of data). Leave empty if there is no header row.", + "type": "integer" + }, + "index_column": { + "description": "[CSV and Excel only] Column to use as the row labels of the dataframe. Leave empty if no index column", + "type": "string" + }, + "index_label": { + "description": "Index label for index column.", + "type": "string" + }, + "null_values": { + "description": "[CSV and Excel only] A list of strings that should be treated as null. Examples: '' for empty strings, 'None', 'N/A', Warning: Hive database supports only a single value", "items": { - "type": "integer" + "type": "string" }, "type": "array" }, - "window_size": { - "items": { - "type": "integer" + "rows_to_read": { + "description": "[CSV and Excel only] Number of rows to read from the file. If None, reads all rows.", + "minimum": 1, + "nullable": true, + "type": "integer" + }, + "schema": { + "description": "The schema to upload the data file to.", + "type": "string" + }, + "sheet_name": { + "description": "[Excel only]] Strings used for sheet names (default is the first sheet).", + "type": "string" + }, + "skip_blank_lines": { + "description": "[CSV only] Skip blank lines in the CSV file.", + "type": "boolean" + }, + "skip_initial_space": { + "description": "[CSV only] Skip spaces after delimiter.", + "type": "boolean" + }, + "skip_rows": { + "description": "[CSV and Excel only] Number of rows to skip at start of file.", + "type": "integer" + }, + "table_name": { + "description": "The name of the table to be created/appended", + "maxLength": 10000, + "minLength": 1, + "type": "string" + }, + "type": { + "description": "File type to upload", + "enum": [ + "csv", + "excel", + "columnar" + ] + } + }, + "required": [ + "file", + "table_name", + "type" + ], + "type": "object" + }, + "User": { + "properties": { + "first_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "type": "string" + } + }, + "type": "object" + }, + "User1": { + "properties": { + "first_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "User2": { + "properties": { + "first_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "UserResponseSchema": { + "properties": { + "email": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_active": { + "type": "boolean" + }, + "is_anonymous": { + "type": "boolean" + }, + "last_name": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "ValidateSQLRequest": { + "properties": { + "catalog": { + "nullable": true, + "type": "string" + }, + "schema": { + "nullable": true, + "type": "string" + }, + "sql": { + "description": "SQL statement to validate", + "type": "string" + }, + "template_params": { + "nullable": true, + "type": "object" + } + }, + "required": [ + "sql" + ], + "type": "object" + }, + "ValidateSQLResponse": { + "properties": { + "end_column": { + "type": "integer" + }, + "line_number": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "start_column": { + "type": "integer" + } + }, + "type": "object" + }, + "ValidatorConfigJSON": { + "properties": { + "op": { + "description": "The operation to compare with a threshold to apply to the SQL output\n", + "enum": [ + "<", + "<=", + ">", + ">=", + "==", + "!=" + ], + "type": "string" + }, + "threshold": { + "type": "number" + } + }, + "type": "object" + }, + "ViewMenuApi.get": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "maxLength": 250, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "ViewMenuApi.get_list": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "maxLength": 250, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "ViewMenuApi.post": { + "properties": { + "name": { + "maxLength": 250, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "ViewMenuApi.put": { + "properties": { + "name": { + "maxLength": 250, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "advanced_data_type_convert_schema": { + "properties": { + "type": { + "default": "port", + "type": "string" + }, + "values": { + "items": { + "default": "http" + }, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "type", + "values" + ], + "type": "object" + }, + "database_catalogs_query_schema": { + "properties": { + "force": { + "type": "boolean" + } + }, + "type": "object" + }, + "database_schemas_query_schema": { + "properties": { + "catalog": { + "type": "string" + }, + "force": { + "type": "boolean" + }, + "upload_allowed": { + "type": "boolean" + } + }, + "type": "object" + }, + "database_tables_query_schema": { + "properties": { + "catalog_name": { + "type": "string" + }, + "force": { + "type": "boolean" + }, + "schema_name": { + "type": "string" + } + }, + "required": [ + "schema_name" + ], + "type": "object" + }, + "delete_tags_schema": { + "items": { + "type": "string" + }, + "type": "array" + }, + "get_delete_ids_schema": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "get_export_ids_schema": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "get_fav_star_ids_schema": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "get_info_schema": { + "properties": { + "add_columns": { + "additionalProperties": { + "properties": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "object" + }, + "edit_columns": { + "additionalProperties": { + "properties": { + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "object" + }, + "keys": { + "items": { + "enum": [ + "add_columns", + "edit_columns", + "filters", + "permissions", + "add_title", + "edit_title", + "none" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "get_item_schema": { + "properties": { + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "keys": { + "items": { + "enum": [ + "show_columns", + "description_columns", + "label_columns", + "show_title", + "none" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "get_list_schema": { + "properties": { + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "filters": { + "items": { + "properties": { + "col": { + "type": "string" + }, + "opr": { + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "array" + } + ] + } + }, + "required": [ + "col", + "opr", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "keys": { + "items": { + "enum": [ + "list_columns", + "order_columns", + "label_columns", + "description_columns", + "list_title", + "none" + ], + "type": "string" + }, + "type": "array" + }, + "order_column": { + "type": "string" + }, + "order_direction": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "select_columns": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "get_recent_activity_schema": { + "properties": { + "actions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "distinct": { + "type": "boolean" + }, + "page": { + "type": "number" + }, + "page_size": { + "type": "number" + } + }, + "type": "object" + }, + "get_related_schema": { + "properties": { + "filter": { + "type": "string" + }, + "include_ids": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + } + }, + "type": "object" + }, + "queries_get_updated_since_schema": { + "properties": { + "last_updated_ms": { + "type": "number" + } + }, + "required": [ + "last_updated_ms" + ], + "type": "object" + }, + "screenshot_query_schema": { + "properties": { + "force": { + "type": "boolean" + }, + "thumb_size": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "window_size": { + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "type": "object" + }, + "sql_lab_get_results_schema": { + "properties": { + "key": { + "type": "string" + } + }, + "required": [ + "key" + ], + "type": "object" + }, + "thumbnail_query_schema": { + "properties": { + "force": { + "type": "boolean" + } + }, + "type": "object" + } + }, + "securitySchemes": { + "jwt": { + "bearerFormat": "JWT", + "scheme": "bearer", + "type": "http" + }, + "jwt_refresh": { + "bearerFormat": "JWT", + "scheme": "bearer", + "type": "http" + } + } + }, + "info": { + "description": "Superset", + "title": "Superset", + "version": "v1" + }, + "openapi": "3.0.2", + "paths": { + "/api/v1/advanced_data_type/convert": { + "get": { + "description": "Returns an AdvancedDataTypeResponse object populated with the passed in args.", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/advanced_data_type_convert_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AdvancedDataTypeSchema" + } + } + }, + "description": "AdvancedDataTypeResponse object has been returned." + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Return an AdvancedDataTypeResponse", + "tags": [ + "Advanced Data Type" + ] + } + }, + "/api/v1/advanced_data_type/types": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "a successful return of the available advanced data types has taken place." + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Return a list of available advanced data types", + "tags": [ + "Advanced Data Type" + ] + } + }, + "/api/v1/annotation_layer/": { + "delete": { + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "CSS templates bulk delete" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Delete multiple annotation layers in a bulk operation", + "tags": [ + "Annotation Layers" + ] + }, + "get": { + "description": "Gets a list of annotation layers, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Items from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get a list of annotation layers", + "tags": [ + "Annotation Layers" + ] + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + } + } + }, + "description": "Annotation Layer schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + } + }, + "type": "object" + } + } }, - "type": "array" + "description": "Annotation added" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "sql_lab_get_results_schema": { - "properties": { - "key": { - "type": "string" + "security": [ + { + "jwt": [] } - }, - "required": [ - "key" ], - "type": "object" - }, - "thumbnail_query_schema": { - "properties": { - "force": { - "type": "boolean" - } - }, - "type": "object" + "summary": "Create an annotation layer", + "tags": [ + "Annotation Layers" + ] } }, - "securitySchemes": { - "jwt": { - "bearerFormat": "JWT", - "scheme": "bearer", - "type": "http" - }, - "jwt_refresh": { - "bearerFormat": "JWT", - "scheme": "bearer", - "type": "http" - } - } - }, - "info": { - "description": "Superset", - "title": "Superset", - "version": "v1" - }, - "openapi": "3.0.2", - "paths": { - "/api/v1/advanced_data_type/convert": { + "/api/v1/annotation_layer/_info": { "get": { - "description": "Returns an AdvancedDataTypeResponse object populated with the passed in args.", + "description": "Get metadata information about this API resource", "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/advanced_data_type_convert_schema" + "$ref": "#/components/schemas/get_info_schema" } } }, @@ -11722,11 +12190,47 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdvancedDataTypeSchema" + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "AdvancedDataTypeResponse object has been returned." + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -11734,11 +12238,8 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -11749,39 +12250,52 @@ "jwt": [] } ], - "summary": "Return an AdvancedDataTypeResponse", + "summary": "Get metadata information about this API resource", "tags": [ - "Advanced Data Type" + "Annotation Layers" ] } }, - "/api/v1/advanced_data_type/types": { + "/api/v1/annotation_layer/related/{column_name}": { "get": { + "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "a successful return of the available advanced data types has taken place." + "description": "Related column data" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -11794,25 +12308,23 @@ "jwt": [] } ], - "summary": "Return a list of available advanced data types", + "summary": "Get related fields data", "tags": [ - "Advanced Data Type" + "Annotation Layers" ] } }, - "/api/v1/annotation_layer/": { + "/api/v1/annotation_layer/{pk}": { "delete": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -11829,10 +12341,7 @@ } } }, - "description": "CSS templates bulk delete" - }, - "401": { - "$ref": "#/components/responses/401" + "description": "Item deleted" }, "404": { "$ref": "#/components/responses/404" @@ -11849,19 +12358,27 @@ "jwt": [] } ], - "summary": "Delete multiple annotation layers in a bulk operation", + "summary": "Delete annotation layer", "tags": [ "Annotation Layers" ] }, "get": { - "description": "Gets a list of annotation layers, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Get an item model", "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_list_schema" + "$ref": "#/components/schemas/get_item_schema" } } }, @@ -11875,10 +12392,6 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, "description_columns": { "properties": { "column_name": { @@ -11889,12 +12402,9 @@ }, "type": "object" }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" + "id": { + "description": "The item id", + "type": "string" }, "label_columns": { "properties": { @@ -11906,38 +12416,27 @@ }, "type": "object" }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" + "result": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.get" }, - "order_columns": { - "description": "A list of allowed columns to sort", + "show_columns": { + "description": "A list of columns", "items": { "type": "string" }, "type": "array" }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.get_list" - }, - "type": "array" + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" } }, "type": "object" } } }, - "description": "Items from Model" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -11945,6 +12444,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -11957,25 +12459,36 @@ "jwt": [] } ], - "summary": "Get a list of annotation layers", + "summary": "Get an annotation layer", "tags": [ "Annotation Layers" ] }, - "post": { + "put": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + "$ref": "#/components/schemas/AnnotationLayerRestApi.put" } } }, - "description": "Annotation Layer schema", + "description": "Annotation schema", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { @@ -11984,14 +12497,14 @@ "type": "number" }, "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + "$ref": "#/components/schemas/AnnotationLayerRestApi.put" } }, "type": "object" } } }, - "description": "Annotation added" + "description": "Annotation changed" }, "400": { "$ref": "#/components/responses/400" @@ -12011,21 +12524,29 @@ "jwt": [] } ], - "summary": "Create an annotation layer", + "summary": "Update an annotation layer", "tags": [ "Annotation Layers" ] } }, - "/api/v1/annotation_layer/_info": { - "get": { - "description": "Get metadata information about this API resource", + "/api/v1/annotation_layer/{pk}/annotation/": { + "delete": { "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_info_schema" + "$ref": "#/components/schemas/get_delete_ids_schema" } } }, @@ -12039,53 +12560,22 @@ "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Item from Model" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Annotations bulk delete" }, "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -12098,28 +12588,28 @@ "jwt": [] } ], - "summary": "Get metadata information about this API resource", + "summary": "Bulk delete annotation layers", "tags": [ "Annotation Layers" ] - } - }, - "/api/v1/annotation_layer/related/{column_name}": { + }, "get": { + "description": "Gets a list of annotation layers, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { + "description": "The annotation layer id for this annotation", "in": "path", - "name": "column_name", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_related_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -12132,11 +12622,96 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "ids": { + "description": "A list of annotation ids", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/AnnotationRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Related column data" + "description": "Items from Annotations" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get a list of annotation layers", + "tags": [ + "Annotation Layers" + ] + }, + "post": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnnotationRestApi.post" + } + } + }, + "description": "Annotation schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationRestApi.post" + } + }, + "type": "object" + } + } + }, + "description": "Annotation added" }, "400": { "$ref": "#/components/responses/400" @@ -12156,13 +12731,13 @@ "jwt": [] } ], - "summary": "Get related fields data", + "summary": "Create an annotation layer", "tags": [ "Annotation Layers" ] } }, - "/api/v1/annotation_layer/{pk}": { + "/api/v1/annotation_layer/{pk}/annotation/{annotation_id}": { "delete": { "parameters": [ { @@ -12173,6 +12748,15 @@ "schema": { "type": "integer" } + }, + { + "description": "The annotation pk for this annotation", + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -12212,9 +12796,9 @@ ] }, "get": { - "description": "Get an item model", "parameters": [ { + "description": "The annotation layer pk for this annotation", "in": "path", "name": "pk", "required": true, @@ -12222,6 +12806,15 @@ "type": "integer" } }, + { + "description": "The annotation pk", + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "type": "integer" + } + }, { "content": { "application/json": { @@ -12240,44 +12833,12 @@ "application/json": { "schema": { "properties": { - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, "id": { "description": "The item id", "type": "string" }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.get" - }, - "show_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "show_title": { - "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", - "type": "string" + "result": { + "$ref": "#/components/schemas/AnnotationRestApi.get" } }, "type": "object" @@ -12322,13 +12883,22 @@ "schema": { "type": "integer" } + }, + { + "description": "The annotation pk for this annotation", + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "type": "integer" + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.put" + "$ref": "#/components/schemas/AnnotationRestApi.put" } } }, @@ -12345,7 +12915,7 @@ "type": "number" }, "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.put" + "$ref": "#/components/schemas/AnnotationRestApi.put" } }, "type": "object" @@ -12378,30 +12948,81 @@ ] } }, - "/api/v1/annotation_layer/{pk}/annotation/": { - "delete": { - "parameters": [ - { - "description": "The annotation layer pk for this annotation", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { + "/api/v1/assets/export/": { + "get": { + "description": "Gets a ZIP file with all the Superset assets (databases, datasets, charts, dashboards, saved queries) as YAML files.", + "responses": { + "200": { "content": { - "application/json": { + "application/zip": { "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" + "format": "binary", + "type": "string" } } }, - "in": "query", - "name": "q" + "description": "ZIP file" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] } ], + "summary": "Export all assets", + "tags": [ + "Import/export" + ] + } + }, + "/api/v1/assets/import/": { + "post": { + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "properties": { + "bundle": { + "description": "upload file (ZIP or JSON)", + "format": "binary", + "type": "string" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "sparse": { + "description": "allow sparse update of resources", + "type": "boolean" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "required": true + }, "responses": { "200": { "content": { @@ -12416,14 +13037,14 @@ } } }, - "description": "Annotations bulk delete" + "description": "Assets import result" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -12436,33 +13057,23 @@ "jwt": [] } ], - "summary": "Bulk delete annotation layers", + "summary": "Import multiple assets", "tags": [ - "Annotation Layers" + "Import/export" ] - }, + } + }, + "/api/v1/async_event/": { "get": { - "description": "Gets a list of annotation layers, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Reads off of the Redis events stream, using the user's JWT token and optional query params for last event received.", "parameters": [ { - "description": "The annotation layer id for this annotation", - "in": "path", - "name": "pk", - "required": true, + "description": "Last ID received by the client", + "in": "query", + "name": "last_id", "schema": { - "type": "integer" + "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -12471,21 +13082,35 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "ids": { - "description": "A list of annotation ids", - "items": { - "type": "string" - }, - "type": "array" - }, "result": { - "description": "The result from the get list query", "items": { - "$ref": "#/components/schemas/AnnotationRestApi.get_list" + "properties": { + "channel_id": { + "type": "string" + }, + "errors": { + "items": { + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "job_id": { + "type": "string" + }, + "result_url": { + "type": "string" + }, + "status": { + "type": "string" + }, + "user_id": { + "type": "integer" + } + }, + "type": "object" }, "type": "array" } @@ -12494,17 +13119,11 @@ } } }, - "description": "Items from Annotations" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Async event results" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -12514,62 +13133,69 @@ "jwt": [] } ], - "summary": "Get a list of annotation layers", + "summary": "Read off of the Redis events stream", "tags": [ - "Annotation Layers" + "AsyncEventsRestApi" ] - }, - "post": { - "parameters": [ - { - "description": "The annotation layer pk for this annotation", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AnnotationRestApi.post" - } - } - }, - "description": "Annotation schema", - "required": true - }, + } + }, + "/api/v1/available_domains/": { + "get": { "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/AnnotationRestApi.post" + "$ref": "#/components/schemas/AvailableDomainsSchema" } }, "type": "object" } } }, - "description": "Annotation added" + "description": "a list of available domains" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get all available domains", + "tags": [ + "Available Domains" + ] + } + }, + "/api/v1/cachekey/invalidate": { + "post": { + "description": "Takes a list of datasources, finds and invalidates the associated cache records and removes the database records.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CacheInvalidationRequestSchema" + } + } + }, + "description": "A list of datasources uuid or the tuples of database and datasource names", + "required": true + }, + "responses": { + "201": { + "description": "cache was successfully invalidated" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -12579,32 +13205,25 @@ "jwt": [] } ], - "summary": "Create an annotation layer", + "summary": "Invalidate cache records and remove the database records", "tags": [ - "Annotation Layers" + "CacheRestApi" ] } }, - "/api/v1/annotation_layer/{pk}/annotation/{annotation_id}": { + "/api/v1/chart/": { "delete": { "parameters": [ { - "description": "The annotation layer pk for this annotation", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The annotation pk for this annotation", - "in": "path", - "name": "annotation_id", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -12621,7 +13240,13 @@ } } }, - "description": "Item deleted" + "description": "Charts bulk delete" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "404": { "$ref": "#/components/responses/404" @@ -12638,36 +13263,19 @@ "jwt": [] } ], - "summary": "Delete annotation layer", + "summary": "Bulk delete charts", "tags": [ - "Annotation Layers" + "Charts" ] }, "get": { + "description": "Gets a list of charts, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ - { - "description": "The annotation layer pk for this annotation", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The annotation pk", - "in": "path", - "name": "annotation_id", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_item_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -12681,19 +13289,69 @@ "application/json": { "schema": { "properties": { - "id": { - "description": "The item id", + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", "type": "string" }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, "result": { - "$ref": "#/components/schemas/AnnotationRestApi.get" + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/ChartRestApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -12701,9 +13359,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -12716,45 +13371,25 @@ "jwt": [] } ], - "summary": "Get an annotation layer", + "summary": "Get a list of charts", "tags": [ - "Annotation Layers" + "Charts" ] }, - "put": { - "parameters": [ - { - "description": "The annotation layer pk for this annotation", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The annotation pk for this annotation", - "in": "path", - "name": "annotation_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AnnotationRestApi.put" + "$ref": "#/components/schemas/ChartRestApi.post" } } }, - "description": "Annotation schema", + "description": "Chart schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { @@ -12763,14 +13398,104 @@ "type": "number" }, "result": { - "$ref": "#/components/schemas/AnnotationRestApi.put" + "$ref": "#/components/schemas/ChartRestApi.post" + } + }, + "type": "object" + } + } + }, + "description": "Chart added" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Create a new chart", + "tags": [ + "Charts" + ] + } + }, + "/api/v1/chart/_info": { + "get": { + "description": "Get metadata information about this API resource", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Annotation changed" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -12778,8 +13503,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -12790,66 +13515,53 @@ "jwt": [] } ], - "summary": "Update an annotation layer", + "summary": "Get metadata information about this API resource", "tags": [ - "Annotation Layers" + "Charts" ] } }, - "/api/v1/apple/health": { - "get": { - "description": "Endpoint for checking the health status of the metastore and cache", + "/api/v1/chart/data": { + "post": { + "description": "Takes a query context constructed in the client and returns payload data response for the given query.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartDataQueryContextSchema" + } + } + }, + "description": "A query context consists of a datasource from which to fetch data and one or many query objects.", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AppleHealthResponseSchema" + "$ref": "#/components/schemas/ChartDataResponseSchema" } } }, - "description": "The" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" + "description": "Query result" }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "summary": "Get the health status of the metastore and cache", - "tags": [ - "Apple" - ] - } - }, - "/api/v1/assets/export/": { - "get": { - "description": "Gets a ZIP file with all the Superset assets (databases, datasets, charts, dashboards, saved queries) as YAML files.", - "responses": { - "200": { + "202": { "content": { - "application/zip": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" } } }, - "description": "ZIP file" + "description": "Async job details" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -12859,62 +13571,35 @@ "jwt": [] } ], - "summary": "Export all assets", + "summary": "Return payload data response for the given query", "tags": [ - "Import/export" + "Charts" ] } }, - "/api/v1/assets/import/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "bundle": { - "description": "upload file (ZIP or JSON)", - "format": "binary", - "type": "string" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" - } + "/api/v1/chart/data/{cache_key}": { + "get": { + "description": "Takes a query context cache key and returns payload data response for the given query.", + "parameters": [ + { + "in": "path", + "name": "cache_key", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/ChartDataResponseSchema" } } }, - "description": "Assets import result" + "description": "Query result" }, "400": { "$ref": "#/components/responses/400" @@ -12922,6 +13607,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -12934,73 +13622,48 @@ "jwt": [] } ], - "summary": "Import multiple assets", + "summary": "Return payload data response for the given query", "tags": [ - "Import/export" + "Charts" ] } }, - "/api/v1/async_event/": { + "/api/v1/chart/export/": { "get": { - "description": "Reads off of the Redis events stream, using the user's JWT token and optional query params for last event received.", "parameters": [ { - "description": "Last ID received by the client", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_export_ids_schema" + } + } + }, "in": "query", - "name": "last_id", - "schema": { - "type": "string" - } + "name": "q" } ], "responses": { "200": { "content": { - "application/json": { + "application/zip": { "schema": { - "properties": { - "result": { - "items": { - "properties": { - "channel_id": { - "type": "string" - }, - "errors": { - "items": { - "type": "object" - }, - "type": "array" - }, - "id": { - "type": "string" - }, - "job_id": { - "type": "string" - }, - "result_url": { - "type": "string" - }, - "status": { - "type": "string" - }, - "user_id": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" + "format": "binary", + "type": "string" } } }, - "description": "Async event results" + "description": "A zip file with chart(s), dataset(s) and database(s) as YAML" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "500": { "$ref": "#/components/responses/500" } @@ -13010,35 +13673,49 @@ "jwt": [] } ], - "summary": "Read off of the Redis events stream", + "summary": "Download multiple charts as YAML files", "tags": [ - "AsyncEventsRestApi" + "Charts" ] } }, - "/api/v1/available_domains/": { + "/api/v1/chart/favorite_status/": { "get": { + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_fav_star_ids_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/AvailableDomainsSchema" - } - }, - "type": "object" + "$ref": "#/components/schemas/GetFavStarIdsSchema" } } }, - "description": "a list of available domains" + "description": "None" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -13046,33 +13723,76 @@ "jwt": [] } ], - "summary": "Get all available domains", + "summary": "Check favorited charts for current user", "tags": [ - "Available Domains" + "Charts" ] } }, - "/api/v1/cachekey/invalidate": { + "/api/v1/chart/import/": { "post": { - "description": "Takes a list of datasources, finds and invalidates the associated cache records and removes the database records.", "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/CacheInvalidationRequestSchema" + "properties": { + "formData": { + "description": "upload file (ZIP)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing charts?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + } + }, + "type": "object" } } }, - "description": "A list of datasources uuid or the tuples of database and datasource names", "required": true }, "responses": { - "201": { - "description": "cache was successfully invalidated" + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Chart import result" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -13082,20 +13802,29 @@ "jwt": [] } ], - "summary": "Invalidate cache records and remove the database records", + "summary": "Import chart(s) with associated datasets and databases", "tags": [ - "CacheRestApi" + "Charts" ] } }, - "/api/v1/chart/": { - "delete": { + "/api/v1/chart/related/{column_name}": { + "get": { + "description": "Get a list of all possible owners for a chart. Use `owners` has the `column_name` parameter", "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" + "$ref": "#/components/schemas/get_related_schema" } } }, @@ -13108,29 +13837,21 @@ "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Charts bulk delete" + "description": "Related column data" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -13140,104 +13861,42 @@ "jwt": [] } ], - "summary": "Bulk delete charts", + "summary": "Get related fields data", "tags": [ "Charts" ] - }, - "get": { - "description": "Gets a list of charts, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } + } + }, + "/api/v1/chart/warm_up_cache": { + "put": { + "description": "Warms up the cache for the chart. Note for slices a force refresh occurs. In terms of the `extra_filters` these can be obtained from records in the JSON encoded `logs.json` column associated with the `explore_json` action.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartCacheWarmUpRequestSchema" } - }, - "in": "query", - "name": "q" - } - ], + } + }, + "description": "Identifies the chart to warm up cache for, and any additional dashboard or filter context to use.", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/ChartRestApi.get_list" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/ChartCacheWarmUpResponseSchema" } } }, - "description": "Items from Model" + "description": "Each chart's warmup status" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -13248,44 +13907,39 @@ "jwt": [] } ], - "summary": "Get a list of charts", + "summary": "Warm up the cache for the chart", "tags": [ "Charts" ] - }, - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartRestApi.post" - } + } + }, + "/api/v1/chart/{pk}": { + "delete": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "description": "Chart schema", - "required": true - }, + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/ChartRestApi.post" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Chart added" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart delete" }, "401": { "$ref": "#/components/responses/401" @@ -13293,6 +13947,9 @@ "403": { "$ref": "#/components/responses/403" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -13305,21 +13962,27 @@ "jwt": [] } ], - "summary": "Create a new chart", + "summary": "Delete a chart", "tags": [ "Charts" ] - } - }, - "/api/v1/chart/_info": { + }, "get": { - "description": "Get metadata information about this API resource", + "description": "Get an item model", "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_info_schema" + "$ref": "#/components/schemas/get_item_schema" } } }, @@ -13333,39 +13996,44 @@ "application/json": { "schema": { "properties": { - "add_columns": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, "type": "object" }, - "edit_columns": { - "type": "object" + "id": { + "description": "The item id", + "type": "string" }, - "filters": { + "label_columns": { "properties": { "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" } }, "type": "object" }, - "permissions": { - "description": "The user permissions for this API resource", + "result": { + "$ref": "#/components/schemas/ChartRestApi.get" + }, + "show_columns": { + "description": "A list of columns", "items": { "type": "string" }, "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" } }, "type": "object" @@ -13380,6 +14048,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -13392,24 +14063,31 @@ "jwt": [] } ], - "summary": "Get metadata information about this API resource", + "summary": "Get a chart detail information", "tags": [ "Charts" ] - } - }, - "/api/v1/chart/data": { - "post": { - "description": "Takes a query context constructed in the client and returns payload data response for the given query.", + }, + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataQueryContextSchema" + "$ref": "#/components/schemas/ChartRestApi.put" } } }, - "description": "A query context consists of a datasource from which to fetch data and one or many query objects.", + "description": "Chart schema", "required": true }, "responses": { @@ -13417,21 +14095,19 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataResponseSchema" - } - } - }, - "description": "Query result" - }, - "202": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/ChartRestApi.put" + } + }, + "type": "object" } } }, - "description": "Async job details" + "description": "Chart changed" }, "400": { "$ref": "#/components/responses/400" @@ -13439,6 +14115,15 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -13448,23 +14133,33 @@ "jwt": [] } ], - "summary": "Return payload data response for the given query", + "summary": "Update a chart", "tags": [ "Charts" ] } }, - "/api/v1/chart/data/{cache_key}": { + "/api/v1/chart/{pk}/cache_screenshot/": { "get": { - "description": "Takes a query context cache key and returns payload data response for the given query.", "parameters": [ { "in": "path", - "name": "cache_key", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/screenshot_query_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -13472,11 +14167,21 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataResponseSchema" + "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" } } }, - "description": "Query result" + "description": "Chart async result" + }, + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" + } + } + }, + "description": "Chart screenshot task created" }, "400": { "$ref": "#/components/responses/400" @@ -13487,9 +14192,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -13499,38 +14201,70 @@ "jwt": [] } ], - "summary": "Return payload data response for the given query", + "summary": "Compute and cache a screenshot", "tags": [ "Charts" ] } }, - "/api/v1/chart/export/": { + "/api/v1/chart/{pk}/data/": { "get": { + "description": "Takes a chart ID and uses the query context stored when the chart was saved to return payload data response.", "parameters": [ { + "description": "The chart ID", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The format in which the data should be returned", + "in": "query", + "name": "format", + "schema": { + "type": "string" + } + }, + { + "description": "The type in which the data should be returned", + "in": "query", + "name": "type", + "schema": { + "type": "string" + } + }, + { + "description": "Should the queries be forced to load from the source", + "in": "query", + "name": "force", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" + "$ref": "#/components/schemas/ChartDataResponseSchema" } } }, - "in": "query", - "name": "q" - } - ], - "responses": { - "200": { + "description": "Query result" + }, + "202": { "content": { - "application/zip": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" } } }, - "description": "A zip file with chart(s), dataset(s) and database(s) as YAML" + "description": "Async job details" }, "400": { "$ref": "#/components/responses/400" @@ -13538,9 +14272,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -13550,25 +14281,22 @@ "jwt": [] } ], - "summary": "Download multiple charts as YAML files", + "summary": "Return payload data response for a chart", "tags": [ "Charts" ] } }, - "/api/v1/chart/favorite_status/": { - "get": { + "/api/v1/chart/{pk}/favorites/": { + "delete": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_fav_star_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -13576,14 +14304,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetFavStarIdsSchema" + "properties": { + "result": { + "type": "object" + } + }, + "type": "object" } } }, - "description": "None" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart removed from favorites" }, "401": { "$ref": "#/components/responses/401" @@ -13600,75 +14330,43 @@ "jwt": [] } ], - "summary": "Check favorited charts for current user", + "summary": "Remove the chart from the user favorite list", "tags": [ "Charts" ] - } - }, - "/api/v1/chart/import/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing charts?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" - } + }, + "post": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "required": true - }, + } + ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "type": "object" } }, "type": "object" } } }, - "description": "Chart import result" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart added to favorites" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -13679,46 +14377,43 @@ "jwt": [] } ], - "summary": "Import chart(s) with associated datasets and databases", + "summary": "Mark the chart as favorite for the current user", "tags": [ "Charts" ] } }, - "/api/v1/chart/related/{column_name}": { + "/api/v1/chart/{pk}/screenshot/{digest}/": { "get": { - "description": "Get a list of all possible owners for a chart. Use `owners` has the `column_name` parameter", "parameters": [ { "in": "path", - "name": "column_name", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { "200": { "content": { - "application/json": { + "image/*": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "format": "binary", + "type": "string" } } }, - "description": "Related column data" + "description": "Chart screenshot image" }, "400": { "$ref": "#/components/responses/400" @@ -13738,40 +14433,55 @@ "jwt": [] } ], - "summary": "Get related fields data", + "summary": "Get a computed screenshot from cache", "tags": [ "Charts" ] } }, - "/api/v1/chart/warm_up_cache": { - "put": { - "description": "Warms up the cache for the chart. Note for slices a force refresh occurs. In terms of the `extra_filters` these can be obtained from records in the JSON encoded `logs.json` column associated with the `explore_json` action.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartCacheWarmUpRequestSchema" - } + "/api/v1/chart/{pk}/thumbnail/{digest}/": { + "get": { + "description": "Compute or get already computed chart thumbnail from cache.", + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "description": "Identifies the chart to warm up cache for, and any additional dashboard or filter context to use.", - "required": true - }, + { + "description": "A hex digest that makes this chart unique", + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { - "application/json": { + "image/*": { "schema": { - "$ref": "#/components/schemas/ChartCacheWarmUpResponseSchema" + "format": "binary", + "type": "string" } } }, - "description": "Each chart's warmup status" + "description": "Chart thumbnail image" + }, + "302": { + "description": "Redirects to the current digest" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, "404": { "$ref": "#/components/responses/404" }, @@ -13784,22 +14494,25 @@ "jwt": [] } ], - "summary": "Warm up the cache for the chart", + "summary": "Get chart thumbnail", "tags": [ "Charts" ] } }, - "/api/v1/chart/{pk}": { + "/api/v1/css_template/": { "delete": { "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -13816,14 +14529,11 @@ } } }, - "description": "Chart delete" + "description": "CSS templates bulk delete" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -13839,27 +14549,19 @@ "jwt": [] } ], - "summary": "Delete a chart", + "summary": "Bulk delete CSS templates", "tags": [ - "Charts" + "CSS Templates" ] }, "get": { - "description": "Get an item model", + "description": "Gets a list of CSS templates, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_item_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -13873,6 +14575,10 @@ "application/json": { "schema": { "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, "description_columns": { "properties": { "column_name": { @@ -13883,9 +14589,12 @@ }, "type": "object" }, - "id": { - "description": "The item id", - "type": "string" + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" }, "label_columns": { "properties": { @@ -13897,27 +14606,38 @@ }, "type": "object" }, - "result": { - "$ref": "#/components/schemas/ChartRestApi.get" - }, - "show_columns": { + "list_columns": { "description": "A list of columns", "items": { "type": "string" }, "type": "array" }, - "show_title": { + "list_title": { "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/CssTemplateRestApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -13925,9 +14645,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -13940,51 +14657,41 @@ "jwt": [] } ], - "summary": "Get a chart detail information", + "summary": "Get a list of CSS templates", "tags": [ - "Charts" + "CSS Templates" ] }, - "put": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartRestApi.put" + "$ref": "#/components/schemas/CssTemplateRestApi.post" } } }, - "description": "Chart schema", + "description": "Model schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { "id": { - "type": "number" + "type": "string" }, "result": { - "$ref": "#/components/schemas/ChartRestApi.put" + "$ref": "#/components/schemas/CssTemplateRestApi.post" } }, "type": "object" } } }, - "description": "Chart changed" + "description": "Item inserted" }, "400": { "$ref": "#/components/responses/400" @@ -13992,12 +14699,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -14010,28 +14711,21 @@ "jwt": [] } ], - "summary": "Update a chart", + "summary": "Create a CSS template", "tags": [ - "Charts" + "CSS Templates" ] } }, - "/api/v1/chart/{pk}/cache_screenshot/": { + "/api/v1/css_template/_info": { "get": { + "description": "Get metadata information about this API resource", "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/screenshot_query_schema" + "$ref": "#/components/schemas/get_info_schema" } } }, @@ -14040,15 +14734,51 @@ } ], "responses": { - "202": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Chart async result" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -14056,8 +14786,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -14068,70 +14798,45 @@ "jwt": [] } ], - "summary": "Compute and cache a screenshot", + "summary": "Get metadata information about this API resource", "tags": [ - "Charts" + "CSS Templates" ] } }, - "/api/v1/chart/{pk}/data/": { + "/api/v1/css_template/related/{column_name}": { "get": { - "description": "Takes a chart ID and uses the query context stored when the chart was saved to return payload data response.", "parameters": [ { - "description": "The chart ID", "in": "path", - "name": "pk", + "name": "column_name", "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The format in which the data should be returned", - "in": "query", - "name": "format", - "schema": { - "type": "string" - } - }, - { - "description": "The type in which the data should be returned", - "in": "query", - "name": "type", "schema": { "type": "string" } }, { - "description": "Should the queries be forced to load from the source", - "in": "query", - "name": "force", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataResponseSchema" + "$ref": "#/components/schemas/get_related_schema" } } }, - "description": "Query result" - }, - "202": { + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Async job details" + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -14139,6 +14844,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "500": { "$ref": "#/components/responses/500" } @@ -14148,13 +14856,13 @@ "jwt": [] } ], - "summary": "Return payload data response for a chart", + "summary": "Get related fields data", "tags": [ - "Charts" + "CSS Templates" ] } }, - "/api/v1/chart/{pk}/favorites/": { + "/api/v1/css_template/{pk}": { "delete": { "parameters": [ { @@ -14172,22 +14880,22 @@ "application/json": { "schema": { "properties": { - "result": { - "type": "object" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Chart removed from favorites" - }, - "401": { - "$ref": "#/components/responses/401" + "description": "Item deleted" }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -14197,12 +14905,13 @@ "jwt": [] } ], - "summary": "Remove the chart from the user favorite list", + "summary": "Delete a CSS template", "tags": [ - "Charts" + "CSS Templates" ] }, - "post": { + "get": { + "description": "Get an item model", "parameters": [ { "in": "path", @@ -14211,76 +14920,70 @@ "schema": { "type": "integer" } - } - ], - "responses": { - "200": { + }, + { "content": { "application/json": { "schema": { - "properties": { - "result": { - "type": "object" - } - }, - "type": "object" + "$ref": "#/components/schemas/get_item_schema" } } }, - "description": "Chart added to favorites" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Mark the chart as favorite for the current user", - "tags": [ - "Charts" - ] - } - }, - "/api/v1/chart/{pk}/screenshot/{digest}/": { - "get": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "path", - "name": "digest", - "required": true, - "schema": { - "type": "string" - } + "in": "query", + "name": "q" } ], "responses": { "200": { "content": { - "image/*": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "properties": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "$ref": "#/components/schemas/CssTemplateRestApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" + } + }, + "type": "object" } } }, - "description": "Chart thumbnail image" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -14291,6 +14994,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -14300,15 +15006,12 @@ "jwt": [] } ], - "summary": "Get a computed screenshot from cache", + "summary": "Get a CSS template", "tags": [ - "Charts" + "CSS Templates" ] - } - }, - "/api/v1/chart/{pk}/thumbnail/{digest}/": { - "get": { - "description": "Compute or get already computed chart thumbnail from cache.", + }, + "put": { "parameters": [ { "in": "path", @@ -14317,30 +15020,34 @@ "schema": { "type": "integer" } - }, - { - "in": "path", - "name": "digest", - "required": true, - "schema": { - "type": "string" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CssTemplateRestApi.put" + } + } + }, + "description": "Model schema", + "required": true + }, "responses": { "200": { "content": { - "image/*": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "properties": { + "result": { + "$ref": "#/components/schemas/CssTemplateRestApi.put" + } + }, + "type": "object" } } }, - "description": "Chart thumbnail image" - }, - "302": { - "description": "Redirects to the current digest" + "description": "Item changed" }, "400": { "$ref": "#/components/responses/400" @@ -14351,6 +15058,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -14360,13 +15070,13 @@ "jwt": [] } ], - "summary": "Get chart thumbnail", + "summary": "Update a CSS template", "tags": [ - "Charts" + "CSS Templates" ] } }, - "/api/v1/css_template/": { + "/api/v1/dashboard/": { "delete": { "parameters": [ { @@ -14395,11 +15105,14 @@ } } }, - "description": "CSS templates bulk delete" + "description": "Dashboard bulk delete" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -14415,13 +15128,13 @@ "jwt": [] } ], - "summary": "Bulk delete CSS templates", + "summary": "Bulk delete dashboards", "tags": [ - "CSS Templates" + "Dashboards" ] }, "get": { - "description": "Gets a list of CSS templates, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Gets a list of dashboards, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { "content": { @@ -14494,7 +15207,148 @@ "result": { "description": "The result from the get list query", "items": { - "$ref": "#/components/schemas/CssTemplateRestApi.get_list" + "$ref": "#/components/schemas/DashboardRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Items from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get a list of dashboards", + "tags": [ + "Dashboards" + ] + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardRestApi.post" + } + } + }, + "description": "Dashboard schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DashboardRestApi.post" + } + }, + "type": "object" + } + } + }, + "description": "Dashboard added" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Create a new dashboard", + "tags": [ + "Dashboards" + ] + } + }, + "/api/v1/dashboard/_info": { + "get": { + "description": "Get metadata information about this API resource", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" }, "type": "array" } @@ -14503,7 +15357,110 @@ } } }, - "description": "Items from Model" + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Dashboards" + ] + } + }, + "/api/v1/dashboard/export/": { + "get": { + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_export_ids_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "description": "Dashboard export" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Download multiple dashboards as YAML files", + "tags": [ + "Dashboards" + ] + } + }, + "/api/v1/dashboard/favorite_status/": { + "get": { + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_fav_star_ids_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetFavStarIdsSchema" + } + } + }, + "description": "None" }, "400": { "$ref": "#/components/responses/400" @@ -14511,8 +15468,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -14523,41 +15480,66 @@ "jwt": [] } ], - "summary": "Get a list of CSS templates", + "summary": "Check favorited dashboards for current user", "tags": [ - "CSS Templates" + "Dashboards" ] - }, + } + }, + "/api/v1/dashboard/import/": { "post": { "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/CssTemplateRestApi.post" + "properties": { + "formData": { + "description": "upload file (ZIP or JSON)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing dashboards?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + } + }, + "type": "object" } } }, - "description": "Model schema", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { + "message": { "type": "string" - }, - "result": { - "$ref": "#/components/schemas/CssTemplateRestApi.post" } }, "type": "object" } } }, - "description": "Item inserted" + "description": "Dashboard import result" }, "400": { "$ref": "#/components/responses/400" @@ -14577,26 +15559,22 @@ "jwt": [] } ], - "summary": "Create a CSS template", + "summary": "Import dashboard(s) with associated charts/datasets/databases", "tags": [ - "CSS Templates" + "Dashboards" ] } }, - "/api/v1/css_template/_info": { + "/api/v1/dashboard/permalink/{key}": { "get": { - "description": "Get metadata information about this API resource", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "key", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -14605,46 +15583,16 @@ "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, + "state": { + "description": "The stored state", "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Returns the stored state." }, "400": { "$ref": "#/components/responses/400" @@ -14652,6 +15600,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -14664,14 +15615,15 @@ "jwt": [] } ], - "summary": "Get metadata information about this API resource", + "summary": "Get dashboard's permanent link state", "tags": [ - "CSS Templates" + "Dashboard Permanent Link" ] } }, - "/api/v1/css_template/related/{column_name}": { + "/api/v1/dashboard/related/{column_name}": { "get": { + "description": "Get a list of all possible owners for a dashboard.", "parameters": [ { "in": "path", @@ -14724,19 +15676,20 @@ ], "summary": "Get related fields data", "tags": [ - "CSS Templates" + "Dashboards" ] } }, - "/api/v1/css_template/{pk}": { - "delete": { + "/api/v1/dashboard/{id_or_slug}": { + "get": { "parameters": [ { + "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], @@ -14746,24 +15699,27 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "$ref": "#/components/schemas/DashboardGetResponseSchema" } }, "type": "object" } } }, - "description": "Item deleted" + "description": "Dashboard" }, - "404": { - "$ref": "#/components/responses/404" + "400": { + "$ref": "#/components/responses/400" }, - "422": { - "$ref": "#/components/responses/422" + "401": { + "$ref": "#/components/responses/401" }, - "500": { - "$ref": "#/components/responses/500" + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -14771,85 +15727,108 @@ "jwt": [] } ], - "summary": "Delete a CSS template", + "summary": "Get a dashboard detail information", "tags": [ - "CSS Templates" + "Dashboards" ] - }, + } + }, + "/api/v1/dashboard/{id_or_slug}/charts": { "get": { - "description": "Get an item model", "parameters": [ { "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } - }, - { + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_item_schema" + "properties": { + "result": { + "items": { + "$ref": "#/components/schemas/ChartEntityResponseSchema" + }, + "type": "array" + } + }, + "type": "object" } } }, - "in": "query", - "name": "q" + "description": "Dashboard chart definitions" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get a dashboard's chart definitions.", + "tags": [ + "Dashboards" + ] + } + }, + "/api/v1/dashboard/{id_or_slug}/copy/": { + "post": { + "parameters": [ + { + "description": "The dashboard id or slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardCopySchema" + } + } + }, + "required": true + }, "responses": { "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, + "content": { + "application/json": { + "schema": { + "properties": { "id": { - "description": "The item id", - "type": "string" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "result": { - "$ref": "#/components/schemas/CssTemplateRestApi.get" - }, - "show_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" + "type": "number" }, - "show_title": { - "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", - "type": "string" + "last_modified_time": { + "type": "number" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Id of new dashboard and last modified time" }, "400": { "$ref": "#/components/responses/400" @@ -14857,12 +15836,12 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -14872,33 +15851,26 @@ "jwt": [] } ], - "summary": "Get a CSS template", + "summary": "Create a copy of an existing dashboard", "tags": [ - "CSS Templates" + "Dashboards" ] - }, - "put": { + } + }, + "/api/v1/dashboard/{id_or_slug}/datasets": { + "get": { + "description": "Returns a list of a dashboard's datasets. Each dataset includes only the information necessary to render the dashboard's charts.", "parameters": [ { + "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CssTemplateRestApi.put" - } - } - }, - "description": "Model schema", - "required": true - }, "responses": { "200": { "content": { @@ -14906,14 +15878,17 @@ "schema": { "properties": { "result": { - "$ref": "#/components/schemas/CssTemplateRestApi.put" + "items": { + "$ref": "#/components/schemas/DashboardDatasetSchema" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Item changed" + "description": "Dashboard dataset definitions" }, "400": { "$ref": "#/components/responses/400" @@ -14921,14 +15896,11 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ @@ -14936,25 +15908,23 @@ "jwt": [] } ], - "summary": "Update a CSS template", + "summary": "Get dashboard's datasets", "tags": [ - "CSS Templates" + "Dashboards" ] } }, - "/api/v1/dashboard/": { + "/api/v1/dashboard/{id_or_slug}/embedded": { "delete": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "The dashboard id or slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -14971,20 +15941,11 @@ } } }, - "description": "Dashboard bulk delete" + "description": "Successfully removed the configuration" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -14994,105 +15955,98 @@ "jwt": [] } ], - "summary": "Bulk delete dashboards", + "summary": "Delete a dashboard's embedded configuration", "tags": [ "Dashboards" ] }, "get": { - "description": "Gets a list of dashboards, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { + "description": "The dashboard id or slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_list_schema" + "properties": { + "result": { + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + } + }, + "type": "object" } } }, - "in": "query", - "name": "q" + "description": "Result contains the embedded dashboard config" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get the dashboard's embedded configuration", + "tags": [ + "Dashboards" + ] + }, + "post": { + "parameters": [ + { + "description": "The dashboard id or slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbeddedDashboardConfig" + } + } + }, + "description": "The embedded configuration to set", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/DashboardRestApi.get_list" - }, - "type": "array" + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" } }, "type": "object" } } }, - "description": "Items from Model" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Successfully set the configuration" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -15102,51 +16056,54 @@ "jwt": [] } ], - "summary": "Get a list of dashboards", + "summary": "Set a dashboard's embedded configuration", "tags": [ "Dashboards" ] }, - "post": { + "put": { + "description": "Sets a dashboard's embedded configuration.", + "parameters": [ + { + "description": "The dashboard id or slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardRestApi.post" + "$ref": "#/components/schemas/EmbeddedDashboardConfig" } } }, - "description": "Dashboard schema", + "description": "The embedded configuration to set", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/DashboardRestApi.post" + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" } }, "type": "object" } } }, - "description": "Dashboard added" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Successfully set the configuration" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -15156,26 +16113,23 @@ "jwt": [] } ], - "summary": "Create a new dashboard", "tags": [ "Dashboards" ] } }, - "/api/v1/dashboard/_info": { + "/api/v1/dashboard/{id_or_slug}/tabs": { "get": { - "description": "Get metadata information about this API resource", + "description": "Returns a list of a dashboard's tabs and dashboard's nested tree structure for associated tabs.", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "Either the id of the dashboard, or its slug", + "in": "path", + "name": "id_or_slug", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -15184,46 +16138,18 @@ "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", + "result": { "items": { - "type": "string" + "$ref": "#/components/schemas/TabsPayloadSchema" }, - "type": "array" + "type": "object" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Dashboard tabs" }, "400": { "$ref": "#/components/responses/400" @@ -15231,11 +16157,11 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" }, - "500": { - "$ref": "#/components/responses/500" + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -15243,44 +16169,46 @@ "jwt": [] } ], - "summary": "Get metadata information about this API resource", + "summary": "Get dashboard's tabs", "tags": [ "Dashboards" ] } }, - "/api/v1/dashboard/export/": { - "get": { + "/api/v1/dashboard/{pk}": { + "delete": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { "200": { "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Dashboard export" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -15296,37 +16224,54 @@ "jwt": [] } ], - "summary": "Download multiple dashboards as YAML files", + "summary": "Delete a dashboard", "tags": [ "Dashboards" ] - } - }, - "/api/v1/dashboard/favorite_status/": { - "get": { + }, + "put": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_fav_star_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardRestApi.put" + } + } + }, + "description": "Dashboard schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetFavStarIdsSchema" + "properties": { + "id": { + "type": "number" + }, + "last_modified_time": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DashboardRestApi.put" + } + }, + "type": "object" } } }, - "description": "None" + "description": "Dashboard changed" }, "400": { "$ref": "#/components/responses/400" @@ -15334,9 +16279,15 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -15346,66 +16297,43 @@ "jwt": [] } ], - "summary": "Check favorited dashboards for current user", + "summary": "Update a dashboard", "tags": [ "Dashboards" ] } }, - "/api/v1/dashboard/import/": { + "/api/v1/dashboard/{pk}/cache_dashboard_screenshot/": { "post": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP or JSON)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing dashboards?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/DashboardScreenshotPostSchema" } } - }, - "required": true + } }, "responses": { - "200": { + "202": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/DashboardCacheScreenshotResponseSchema" } } }, - "description": "Dashboard import result" + "description": "Dashboard async result" }, "400": { "$ref": "#/components/responses/400" @@ -15413,8 +16341,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -15425,40 +16353,58 @@ "jwt": [] } ], - "summary": "Import dashboard(s) with associated charts/datasets/databases", + "summary": "Compute and cache a screenshot", "tags": [ "Dashboards" ] } }, - "/api/v1/dashboard/permalink/{key}": { - "get": { + "/api/v1/dashboard/{pk}/colors": { + "put": { "parameters": [ { "in": "path", - "name": "key", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" + } + }, + { + "in": "query", + "name": "mark_updated", + "schema": { + "description": "Whether to update the dashboard changed_on field", + "type": "boolean" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardColorsConfigUpdateSchema" + } + } + }, + "description": "Colors configuration", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "state": { - "description": "The stored state", - "type": "object" + "result": { + "type": "array" } }, "type": "object" } } }, - "description": "Returns the stored state." + "description": "Dashboard colors updated" }, "400": { "$ref": "#/components/responses/400" @@ -15466,6 +16412,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -15481,34 +16430,22 @@ "jwt": [] } ], - "summary": "Get dashboard's permanent link state", + "summary": "Update colors configuration for a dashboard.", "tags": [ - "Dashboard Permanent Link" + "Dashboards" ] } }, - "/api/v1/dashboard/related/{column_name}": { - "get": { - "description": "Get a list of all possible owners for a dashboard.", + "/api/v1/dashboard/{pk}/favorites/": { + "delete": { "parameters": [ { "in": "path", - "name": "column_name", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -15516,14 +16453,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "properties": { + "result": { + "type": "object" + } + }, + "type": "object" } } }, - "description": "Related column data" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard removed from favorites" }, "401": { "$ref": "#/components/responses/401" @@ -15540,22 +16479,19 @@ "jwt": [] } ], - "summary": "Get related fields data", + "summary": "Remove the dashboard from the user favorite list", "tags": [ "Dashboards" ] - } - }, - "/api/v1/dashboard/{id_or_slug}": { - "get": { + }, + "post": { "parameters": [ { - "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], @@ -15566,26 +16502,23 @@ "schema": { "properties": { "result": { - "$ref": "#/components/schemas/DashboardGetResponseSchema" + "type": "object" } }, "type": "object" } } }, - "description": "Dashboard" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard added to favorites" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -15593,42 +16526,158 @@ "jwt": [] } ], - "summary": "Get a dashboard detail information", + "summary": "Mark the dashboard as favorite for the current user", "tags": [ "Dashboards" ] } }, - "/api/v1/dashboard/{id_or_slug}/charts": { - "get": { + "/api/v1/dashboard/{pk}/filter_state": { + "post": { "parameters": [ { "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" + } + }, + { + "in": "query", + "name": "tab_id", + "schema": { + "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "examples": { + "numerical_range_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Numerical Range Filter", + "value": { + "extraFormData": { + "filters": [ + { + "col": "tz_offset", + "op": ">=", + "val": [ + 1000 + ] + }, + { + "col": "tz_offset", + "op": "<=", + "val": [ + 2000 + ] + } + ] + }, + "filterState": { + "label": "1000 <= x <= 2000", + "value": [ + 1000, + 2000 + ] + }, + "id": "NATIVE_FILTER_ID" + } + }, + "time_grain_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Time Grain Filter", + "value": { + "extraFormData": { + "time_grain_sqla": "P1W/1970-01-03T00:00:00Z" + }, + "filterState": { + "label": "Week ending Saturday", + "value": [ + "P1W/1970-01-03T00:00:00Z" + ] + }, + "id": "NATIVE_FILTER_ID" + } + }, + "time_range_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Time Range Filter", + "value": { + "extraFormData": { + "time_range": "DATEADD(DATETIME('2025-01-16T00:00:00'), -7, day) : 2025-01-16T00:00:00" + }, + "filterState": { + "value": "DATEADD(DATETIME('2025-01-16T00:00:00'), -7, day) : 2025-01-16T00:00:00" + }, + "id": "NATIVE_FILTER_ID" + } + }, + "timecolumn_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Time Column Filter", + "value": { + "extraFormData": { + "granularity_sqla": "order_date" + }, + "filterState": { + "value": [ + "order_date" + ] + }, + "id": "NATIVE_FILTER_ID" + } + }, + "value_filter": { + "description": "**This body should be stringified and put into the value field.**", + "summary": "Value Filter", + "value": { + "extraFormData": { + "filters": [ + { + "col": "real_name", + "op": "IN", + "val": [ + "John Doe" + ] + } + ] + }, + "filterState": { + "value": [ + "John Doe" + ] + }, + "id": "NATIVE_FILTER_ID" + } + } + }, + "schema": { + "$ref": "#/components/schemas/TemporaryCachePostSchema" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "result": { - "items": { - "$ref": "#/components/schemas/ChartEntityResponseSchema" - }, - "type": "array" + "key": { + "description": "The key to retrieve the value.", + "type": "string" } }, "type": "object" } } }, - "description": "Dashboard chart definitions" + "description": "The value was stored successfully." }, "400": { "$ref": "#/components/responses/400" @@ -15636,11 +16685,11 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" + "422": { + "$ref": "#/components/responses/422" }, - "404": { - "$ref": "#/components/responses/404" + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -15648,53 +16697,49 @@ "jwt": [] } ], - "summary": "Get a dashboard's chart definitions.", + "summary": "Create a dashboard's filter state", "tags": [ - "Dashboards" + "Dashboard Filter State" ] } }, - "/api/v1/dashboard/{id_or_slug}/copy/": { - "post": { + "/api/v1/dashboard/{pk}/filter_state/{key}": { + "delete": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The value key.", + "in": "path", + "name": "key", "required": true, "schema": { "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardCopySchema" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "last_modified_time": { - "type": "number" + "message": { + "description": "The result of the operation", + "type": "string" } }, "type": "object" } } }, - "description": "Id of new dashboard and last modified time" + "description": "Deleted the stored value." }, "400": { "$ref": "#/components/responses/400" @@ -15702,12 +16747,12 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -15717,20 +16762,24 @@ "jwt": [] } ], - "summary": "Create a copy of an existing dashboard", + "summary": "Delete a dashboard's filter state value", "tags": [ - "Dashboards" + "Dashboard Filter State" ] - } - }, - "/api/v1/dashboard/{id_or_slug}/datasets": { + }, "get": { - "description": "Returns a list of a dashboard's datasets. Each dataset includes only the information necessary to render the dashboard's charts.", "parameters": [ { - "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "id_or_slug", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "key", "required": true, "schema": { "type": "string" @@ -15743,18 +16792,16 @@ "application/json": { "schema": { "properties": { - "result": { - "items": { - "$ref": "#/components/schemas/DashboardDatasetSchema" - }, - "type": "array" + "value": { + "description": "The stored value", + "type": "string" } }, "type": "object" } } }, - "description": "Dashboard dataset definitions" + "description": "Returns the stored value." }, "400": { "$ref": "#/components/responses/400" @@ -15762,11 +16809,14 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -15774,32 +16824,55 @@ "jwt": [] } ], - "summary": "Get dashboard's datasets", + "summary": "Get a dashboard's filter state value", "tags": [ - "Dashboards" + "Dashboard Filter State" ] - } - }, - "/api/v1/dashboard/{id_or_slug}/embedded": { - "delete": { + }, + "put": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "key", "required": true, "schema": { "type": "string" } + }, + { + "in": "query", + "name": "tab_id", + "schema": { + "type": "integer" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TemporaryCachePutSchema" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { + "key": { + "description": "The key to retrieve the value.", "type": "string" } }, @@ -15807,11 +16880,20 @@ } } }, - "description": "Successfully removed the configuration" + "description": "The value was stored successfully." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -15821,23 +16903,35 @@ "jwt": [] } ], - "summary": "Delete a dashboard's embedded configuration", + "summary": "Update a dashboard's filter state value", "tags": [ - "Dashboards" + "Dashboard Filter State" ] - }, - "get": { + } + }, + "/api/v1/dashboard/{pk}/filters": { + "put": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardNativeFiltersConfigUpdateSchema" + } + } + }, + "description": "Native filters configuration", + "required": true + }, "responses": { "200": { "content": { @@ -15845,18 +16939,30 @@ "schema": { "properties": { "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + "type": "array" } }, "type": "object" } } }, - "description": "Result contains the embedded dashboard config" + "description": "Dashboard native filters updated" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -15866,17 +16972,18 @@ "jwt": [] } ], - "summary": "Get the dashboard's embedded configuration", + "summary": "Update native filters configuration for a dashboard.", "tags": [ "Dashboards" ] - }, + } + }, + "/api/v1/dashboard/{pk}/permalink": { "post": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", "required": true, "schema": { "type": "string" @@ -15886,33 +16993,149 @@ "requestBody": { "content": { "application/json": { + "examples": { + "numerical_range_filter": { + "summary": "Numerical Range Filter", + "value": { + "dataMask": { + "extraFormData": { + "filters": [ + { + "col": "tz_offset", + "op": ">=", + "val": [ + 1000 + ] + }, + { + "col": "tz_offset", + "op": "<=", + "val": [ + 2000 + ] + } + ] + }, + "filterState": { + "label": "1000 <= x <= 200", + "value": [ + 1000, + 2000 + ] + }, + "id": "NATIVE_FILTER_ID" + } + } + }, + "time_grain_filter": { + "summary": "Time Grain Filter", + "value": { + "dataMask": { + "extraFormData": { + "time_grain_sqla": "P1W/1970-01-03T00:00:00Z" + }, + "filterState": { + "label": "Week ending Saturday", + "value": [ + "P1W/1970-01-03T00:00:00Z" + ] + }, + "id": "NATIVE_FILTER_ID" + } + } + }, + "time_range_filter": { + "summary": "Time Range Filter", + "value": { + "dataMask": { + "extraFormData": { + "time_range": "DATEADD(DATETIME(\"2025-01-16T00:00:00\"), -7, day) : 2025-01-16T00:00:00" + }, + "filterState": { + "value": "DATEADD(DATETIME(\"2025-01-16T00:00:00\"), -7, day) : 2025-01-16T00:00:00" + }, + "id": "NATIVE_FILTER_ID" + } + } + }, + "timecolumn_filter": { + "summary": "Time Column Filter", + "value": { + "dataMask": { + "extraFormData": { + "granularity_sqla": "order_date" + }, + "filterState": { + "value": [ + "order_date" + ] + }, + "id": "NATIVE_FILTER_ID" + } + } + }, + "value_filter": { + "summary": "Value Filter", + "value": { + "dataMask": { + "extraFormData": { + "filters": [ + { + "col": "real_name", + "op": "IN", + "val": [ + "John Doe" + ] + } + ] + }, + "filterState": { + "value": [ + "John Doe" + ] + }, + "id": "NATIVE_FILTER_ID" + } + } + } + }, "schema": { - "$ref": "#/components/schemas/EmbeddedDashboardConfig" + "$ref": "#/components/schemas/DashboardPermalinkStateSchema" } } }, - "description": "The embedded configuration to set", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + "key": { + "description": "The key to retrieve the permanent link data.", + "type": "string" + }, + "url": { + "description": "permanent link.", + "type": "string" } }, "type": "object" } } }, - "description": "Successfully set the configuration" + "description": "The permanent link was stored successfully." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -15922,54 +17145,64 @@ "jwt": [] } ], - "summary": "Set a dashboard's embedded configuration", + "summary": "Create a new dashboard's permanent link", "tags": [ - "Dashboards" + "Dashboard Permanent Link" ] - }, - "put": { - "description": "Sets a dashboard's embedded configuration.", + } + }, + "/api/v1/dashboard/{pk}/screenshot/{digest}/": { + "get": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "digest", "required": true, "schema": { "type": "string" } + }, + { + "in": "query", + "name": "download_format", + "schema": { + "enum": [ + "png", + "pdf" + ], + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EmbeddedDashboardConfig" - } - } - }, - "description": "The embedded configuration to set", - "required": true - }, "responses": { "200": { "content": { - "application/json": { + "image/*": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" - } - }, - "type": "object" + "format": "binary", + "type": "string" } } }, - "description": "Successfully set the configuration" + "description": "Dashboard thumbnail image" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "500": { "$ref": "#/components/responses/500" } @@ -15979,19 +17212,28 @@ "jwt": [] } ], + "summary": "Get a computed screenshot from cache", "tags": [ "Dashboards" ] } }, - "/api/v1/dashboard/{id_or_slug}/tabs": { + "/api/v1/dashboard/{pk}/thumbnail/{digest}/": { "get": { - "description": "Returns a list of a dashboard's tabs and dashboard's nested tree structure for associated tabs.", + "description": "Computes async or get already computed dashboard thumbnail from cache.", "parameters": [ { - "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "id_or_slug", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "A hex digest that makes this dashboard unique", + "in": "path", + "name": "digest", "required": true, "schema": { "type": "string" @@ -16000,34 +17242,45 @@ ], "responses": { "200": { + "content": { + "image/*": { + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "description": "Dashboard thumbnail image" + }, + "202": { "content": { "application/json": { "schema": { "properties": { - "result": { - "items": { - "$ref": "#/components/schemas/TabsPayloadSchema" - }, - "type": "object" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Dashboard tabs" + "description": "Thumbnail does not exist on cache, fired async to compute" }, - "400": { - "$ref": "#/components/responses/400" + "302": { + "description": "Redirects to the current digest" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -16035,22 +17288,26 @@ "jwt": [] } ], - "summary": "Get dashboard's tabs", + "summary": "Get dashboard's thumbnail", "tags": [ "Dashboards" ] } }, - "/api/v1/dashboard/{pk}": { - "delete": { + "/api/v1/database/": { + "get": { + "description": "Gets a list of databases, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -16059,25 +17316,76 @@ "application/json": { "schema": { "properties": { - "message": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/DatabaseRestApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Dashboard deleted" + "description": "Items from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -16090,35 +17398,25 @@ "jwt": [] } ], - "summary": "Delete a dashboard", + "summary": "Get a list of databases", "tags": [ - "Dashboards" + "Database" ] }, - "put": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardRestApi.put" + "$ref": "#/components/schemas/DatabaseRestApi.post" } } }, - "description": "Dashboard schema", + "description": "Database schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { @@ -16126,18 +17424,15 @@ "id": { "type": "number" }, - "last_modified_time": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/DashboardRestApi.put" + "$ref": "#/components/schemas/DatabaseRestApi.post" } }, "type": "object" } } }, - "description": "Dashboard changed" + "description": "Database added" }, "400": { "$ref": "#/components/responses/400" @@ -16145,15 +17440,9 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -16163,43 +17452,74 @@ "jwt": [] } ], - "summary": "Update a dashboard", + "summary": "Create a new database", "tags": [ - "Dashboards" + "Database" ] } }, - "/api/v1/dashboard/{pk}/cache_dashboard_screenshot/": { - "post": { + "/api/v1/database/_info": { + "get": { + "description": "Get metadata information about this API resource", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardScreenshotPostSchema" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } } - } + }, + "in": "query", + "name": "q" } - }, + ], "responses": { - "202": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardCacheScreenshotResponseSchema" + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Dashboard async result" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -16207,8 +17527,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -16219,45 +17539,77 @@ "jwt": [] } ], - "summary": "Compute and cache a screenshot", + "summary": "Get metadata information about this API resource", "tags": [ - "Dashboards" + "Database" ] } }, - "/api/v1/dashboard/{pk}/favorites/": { - "delete": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "/api/v1/database/available/": { + "get": { "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "type": "object" - } + "items": { + "properties": { + "available_drivers": { + "description": "Installed drivers for the engine", + "items": { + "type": "string" + }, + "type": "array" + }, + "default_driver": { + "description": "Default driver for the engine", + "type": "string" + }, + "engine": { + "description": "Name of the SQLAlchemy engine", + "type": "string" + }, + "engine_information": { + "description": "Dict with public properties form the DB Engine", + "properties": { + "disable_ssh_tunneling": { + "description": "Whether the engine supports SSH Tunnels", + "type": "boolean" + }, + "supports_file_upload": { + "description": "Whether the engine supports file uploads", + "type": "boolean" + } + }, + "type": "object" + }, + "name": { + "description": "Name of the database", + "type": "string" + }, + "parameters": { + "description": "JSON schema defining the needed parameters", + "type": "object" + }, + "preferred": { + "description": "Is the database preferred?", + "type": "boolean" + }, + "sqlalchemy_uri_placeholder": { + "description": "Example placeholder for the SQLAlchemy URI", + "type": "string" + } + }, + "type": "object" }, - "type": "object" + "type": "array" } } }, - "description": "Dashboard removed from favorites" - }, - "401": { - "$ref": "#/components/responses/401" + "description": "Database names" }, - "404": { - "$ref": "#/components/responses/404" + "400": { + "$ref": "#/components/responses/400" }, "500": { "$ref": "#/components/responses/500" @@ -16268,37 +17620,38 @@ "jwt": [] } ], - "summary": "Remove the dashboard from the user favorite list", + "summary": "Get names of databases currently available", "tags": [ - "Dashboards" + "Database" ] - }, - "post": { + } + }, + "/api/v1/database/export/": { + "get": { "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_export_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { "200": { "content": { - "application/json": { + "application/zip": { "schema": { - "properties": { - "result": { - "type": "object" - } - }, - "type": "object" + "format": "binary", + "type": "string" } } }, - "description": "Dashboard added to favorites" + "description": "A zip file with database(s) and dataset(s) as YAML" }, "401": { "$ref": "#/components/responses/401" @@ -16315,49 +17668,58 @@ "jwt": [] } ], - "summary": "Mark the dashboard as favorite for the current user", + "summary": "Download database(s) and associated dataset(s) as a zip file", "tags": [ - "Dashboards" + "Database" ] } }, - "/api/v1/dashboard/{pk}/filter_state": { + "/api/v1/database/import/": { "post": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "tab_id", - "schema": { - "type": "integer" - } - } - ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/TemporaryCachePostSchema" + "properties": { + "formData": { + "description": "upload file (ZIP)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing databases?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + } + }, + "type": "object" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the value.", + "message": { "type": "string" } }, @@ -16365,7 +17727,7 @@ } } }, - "description": "The value was stored successfully." + "description": "Database import result" }, "400": { "$ref": "#/components/responses/400" @@ -16385,28 +17747,40 @@ "jwt": [] } ], - "summary": "Create a dashboard's filter state", + "summary": "Import database(s) with associated datasets", "tags": [ - "Dashboard Filter State" + "Database" ] } }, - "/api/v1/dashboard/{pk}/filter_state/{key}": { - "delete": { + "/api/v1/database/oauth2/": { + "get": { + "description": "-> Receive and store personal access tokens from OAuth for user-level authorization", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, + "in": "query", + "name": "state", "schema": { - "type": "integer" + "type": "string" } }, { - "description": "The value key.", - "in": "path", - "name": "key", - "required": true, + "in": "query", + "name": "code", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "scope", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "error", "schema": { "type": "string" } @@ -16415,32 +17789,20 @@ "responses": { "200": { "content": { - "application/json": { + "text/html": { "schema": { - "properties": { - "message": { - "description": "The result of the operation", - "type": "string" - } - }, - "type": "object" + "type": "string" } } }, - "description": "Deleted the stored value." + "description": "A dummy self-closing HTML page" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -16450,28 +17812,33 @@ "jwt": [] } ], - "summary": "Delete a dashboard's filter state value", + "summary": "Receive personal access tokens from OAuth2", "tags": [ - "Dashboard Filter State" + "Database" ] - }, + } + }, + "/api/v1/database/related/{column_name}": { "get": { "parameters": [ { "in": "path", - "name": "pk", + "name": "column_name", "required": true, "schema": { - "type": "integer" + "type": "string" } }, { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -16479,17 +17846,11 @@ "content": { "application/json": { "schema": { - "properties": { - "value": { - "description": "The stored value", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Returns the stored value." + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -16500,9 +17861,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -16512,45 +17870,23 @@ "jwt": [] } ], - "summary": "Get a dashboard's filter state value", + "summary": "Get related fields data", "tags": [ - "Dashboard Filter State" + "Database" ] - }, - "put": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "tab_id", - "schema": { - "type": "integer" - } - } - ], + } + }, + "/api/v1/database/test_connection/": { + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TemporaryCachePutSchema" + "$ref": "#/components/schemas/DatabaseTestConnectionSchema" } } }, + "description": "Database schema", "required": true }, "responses": { @@ -16559,8 +17895,7 @@ "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the value.", + "message": { "type": "string" } }, @@ -16568,17 +17903,11 @@ } } }, - "description": "The value was stored successfully." + "description": "Database Test Connection" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -16591,33 +17920,22 @@ "jwt": [] } ], - "summary": "Update a dashboard's filter state value", + "summary": "Test a database connection", "tags": [ - "Dashboard Filter State" + "Database" ] } }, - "/api/v1/dashboard/{pk}/filters": { - "put": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "/api/v1/database/upload_metadata/": { + "post": { "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DashboardNativeFiltersConfigUpdateSchema" + "$ref": "#/components/schemas/UploadFileMetadataPostSchema" } } }, - "description": "Native filters configuration", "required": true }, "responses": { @@ -16627,14 +17945,14 @@ "schema": { "properties": { "result": { - "type": "array" + "$ref": "#/components/schemas/UploadFileMetadata" } }, "type": "object" } } }, - "description": "Dashboard native filters updated" + "description": "Upload response" }, "400": { "$ref": "#/components/responses/400" @@ -16642,15 +17960,9 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -16660,46 +17972,32 @@ "jwt": [] } ], - "summary": "Update native filters configuration for a dashboard.", + "summary": "Upload a file and returns file metadata", "tags": [ - "Dashboards" + "Database" ] } }, - "/api/v1/dashboard/{pk}/permalink": { + "/api/v1/database/validate_parameters/": { "post": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "string" - } - } - ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardPermalinkStateSchema" + "$ref": "#/components/schemas/DatabaseValidateParametersSchema" } } }, + "description": "DB-specific parameters", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the permanent link data.", - "type": "string" - }, - "url": { - "description": "permanent link.", + "message": { "type": "string" } }, @@ -16707,14 +18005,11 @@ } } }, - "description": "The permanent link was stored successfully." + "description": "Database Test Connection" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, "422": { "$ref": "#/components/responses/422" }, @@ -16727,14 +18022,14 @@ "jwt": [] } ], - "summary": "Create a new dashboard's permanent link", + "summary": "Validate database connection parameters", "tags": [ - "Dashboard Permanent Link" + "Database" ] } }, - "/api/v1/dashboard/{pk}/screenshot/{digest}/": { - "get": { + "/api/v1/database/{pk}": { + "delete": { "parameters": [ { "in": "path", @@ -16743,37 +18038,36 @@ "schema": { "type": "integer" } - }, - { - "in": "path", - "name": "digest", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { "200": { "content": { - "image/*": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Dashboard thumbnail image" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Database deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -16783,81 +18077,40 @@ "jwt": [] } ], - "summary": "Get a computed screenshot from cache", + "summary": "Delete a database", "tags": [ - "Dashboards" + "Database" ] - } - }, - "/api/v1/dashboard/{pk}/thumbnail/{digest}/": { + }, "get": { - "description": "Computes async or get already computed dashboard thumbnail from cache.", "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "description": "A hex digest that makes this dashboard unique", - "in": "path", - "name": "digest", - "required": true, - "schema": { - "type": "string" - } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/thumbnail_query_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { "200": { - "content": { - "image/*": { - "schema": { - "format": "binary", - "type": "string" - } - } - }, - "description": "Dashboard thumbnail image" - }, - "202": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, "type": "object" } } }, - "description": "Thumbnail does not exist on cache, fired async to compute" + "description": "Database" }, - "302": { - "description": "Redirects to the current digest" + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -16870,97 +18123,51 @@ "jwt": [] } ], - "summary": "Get dashboard's thumbnail", + "summary": "Get a database", "tags": [ - "Dashboards" + "Database" ] - } - }, - "/api/v1/database/": { - "get": { - "description": "Gets a list of databases, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + }, + "put": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseRestApi.put" + } + } + }, + "description": "Database schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", + "id": { "type": "number" }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/DatabaseRestApi.get_list" - }, - "type": "array" + "$ref": "#/components/schemas/DatabaseRestApi.put" } }, "type": "object" } } }, - "description": "Items from Model" + "description": "Database changed" }, "400": { "$ref": "#/components/responses/400" @@ -16968,6 +18175,12 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -16980,41 +18193,46 @@ "jwt": [] } ], - "summary": "Get a list of databases", + "summary": "Change a database", "tags": [ "Database" ] - }, - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseRestApi.post" - } + } + }, + "/api/v1/database/{pk}/catalogs/": { + "get": { + "parameters": [ + { + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "description": "Database schema", - "required": true - }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/database_catalogs_query_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatabaseRestApi.post" - } - }, - "type": "object" + "$ref": "#/components/schemas/CatalogsResponseSchema" } } }, - "description": "Database added" + "description": "A List of all catalogs from the database" }, "400": { "$ref": "#/components/responses/400" @@ -17034,26 +18252,23 @@ "jwt": [] } ], - "summary": "Create a new database", + "summary": "Get all catalogs from a database", "tags": [ "Database" ] } }, - "/api/v1/database/_info": { + "/api/v1/database/{pk}/connection": { "get": { - "description": "Get metadata information about this API resource", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -17061,47 +18276,11 @@ "content": { "application/json": { "schema": { - "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatabaseConnectionSchema" } } }, - "description": "Item from Model" + "description": "Database with connection info" }, "400": { "$ref": "#/components/responses/400" @@ -17121,77 +18300,40 @@ "jwt": [] } ], - "summary": "Get metadata information about this API resource", + "summary": "Get a database connection info", "tags": [ "Database" ] } }, - "/api/v1/database/available/": { + "/api/v1/database/{pk}/function_names/": { "get": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "items": { - "properties": { - "available_drivers": { - "description": "Installed drivers for the engine", - "items": { - "type": "string" - }, - "type": "array" - }, - "default_driver": { - "description": "Default driver for the engine", - "type": "string" - }, - "engine": { - "description": "Name of the SQLAlchemy engine", - "type": "string" - }, - "engine_information": { - "description": "Dict with public properties form the DB Engine", - "properties": { - "disable_ssh_tunneling": { - "description": "Whether the engine supports SSH Tunnels", - "type": "boolean" - }, - "supports_file_upload": { - "description": "Whether the engine supports file uploads", - "type": "boolean" - } - }, - "type": "object" - }, - "name": { - "description": "Name of the database", - "type": "string" - }, - "parameters": { - "description": "JSON schema defining the needed parameters", - "type": "object" - }, - "preferred": { - "description": "Is the database preferred?", - "type": "boolean" - }, - "sqlalchemy_uri_placeholder": { - "description": "Example placeholder for the SQLAlchemy URI", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" + "$ref": "#/components/schemas/DatabaseFunctionNamesResponse" } } }, - "description": "Database names" + "description": "Query result" }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -17202,39 +18344,90 @@ "jwt": [] } ], - "summary": "Get names of databases currently available", + "summary": "Get function names supported by a database", "tags": [ "Database" ] } }, - "/api/v1/database/columnar_metadata/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/ColumnarMetadataUploadFilePostSchema" + "/api/v1/database/{pk}/related_objects/": { + "get": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseRelatedObjectsResponse" + } } + }, + "description": "Query result" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get charts and dashboards count associated to a database", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/{pk}/schemas/": { + "get": { + "parameters": [ + { + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "required": true - }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/database_schemas_query_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/UploadFileMetadata" - } - }, - "type": "object" + "$ref": "#/components/schemas/SchemasResponseSchema" } } }, - "description": "Columnar upload response" + "description": "A List of all schemas from the database" }, "400": { "$ref": "#/components/responses/400" @@ -17254,42 +18447,34 @@ "jwt": [] } ], - "summary": "Upload a Columnar file and returns file metadata", + "summary": "Get all schemas from a database", "tags": [ "Database" ] } }, - "/api/v1/database/csv_metadata/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/CSVMetadataUploadFilePostSchema" - } + "/api/v1/database/{pk}/schemas_access_for_file_upload/": { + "get": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "required": true - }, + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/UploadFileMetadata" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatabaseSchemaAccessForFileUploadResponse" } } }, - "description": "Columnar upload response" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "The list of the database schemas where to upload information" }, "401": { "$ref": "#/components/responses/401" @@ -17306,39 +18491,53 @@ "jwt": [] } ], - "summary": "Upload an CSV file and returns file metadata", + "summary": "The list of the database schemas where to upload information", "tags": [ "Database" ] } }, - "/api/v1/database/excel_metadata/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/ExcelMetadataUploadFilePostSchema" - } + "/api/v1/database/{pk}/select_star/{table_name}/": { + "get": { + "parameters": [ + { + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "required": true - }, + { + "description": "Table name", + "in": "path", + "name": "table_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Table schema", + "in": "path", + "name": "schema_name", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/UploadFileMetadata" - } - }, - "type": "object" + "$ref": "#/components/schemas/SelectStarResponseSchema" } } }, - "description": "Columnar upload response" + "description": "SQL statement for a select star for table" }, "400": { "$ref": "#/components/responses/400" @@ -17349,6 +18548,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -17358,38 +18560,56 @@ "jwt": [] } ], - "summary": "Upload an Excel file and returns file metadata", + "summary": "Get database select star for table", "tags": [ "Database" ] } }, - "/api/v1/database/export/": { + "/api/v1/database/{pk}/select_star/{table_name}/{schema_name}/": { "get": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "Table name", + "in": "path", + "name": "table_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Table schema", + "in": "path", + "name": "schema_name", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { "200": { "content": { - "application/zip": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "$ref": "#/components/schemas/SelectStarResponseSchema" } } }, - "description": "A zip file with database(s) and dataset(s) as YAML" + "description": "SQL statement for a select star for table" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -17397,6 +18617,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -17406,51 +18629,24 @@ "jwt": [] } ], - "summary": "Download database(s) and associated dataset(s) as a zip file", + "summary": "Get database select star for table", "tags": [ "Database" ] } }, - "/api/v1/database/import/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing databases?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" - } + "/api/v1/database/{pk}/ssh_tunnel/": { + "delete": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "required": true - }, + } + ], "responses": { "200": { "content": { @@ -17465,14 +18661,17 @@ } } }, - "description": "Database import result" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "SSH Tunnel deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -17485,59 +18684,47 @@ "jwt": [] } ], - "summary": "Import database(s) with associated datasets", + "summary": "Delete a SSH tunnel", "tags": [ "Database" ] } }, - "/api/v1/database/oauth2/": { - "get": { - "description": "-> Receive and store personal access tokens from OAuth for user-level authorization", + "/api/v1/database/{pk}/sync_permissions/": { + "post": { "parameters": [ { - "in": "query", - "name": "state", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "code", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "scope", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "error", + "description": "The database connection ID", + "in": "path", + "name": "pk", + "required": true, "schema": { - "type": "string" + "type": "integer" } } ], "responses": { "200": { "content": { - "text/html": { + "application/json": { "schema": { - "type": "string" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "A dummy self-closing HTML page" + "description": "Task created to sync permissions." }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, "404": { "$ref": "#/components/responses/404" }, @@ -17550,33 +18737,41 @@ "jwt": [] } ], - "summary": "Receive personal access tokens from OAuth2", + "summary": "Re-sync all permissions for a database connection", "tags": [ "Database" ] } }, - "/api/v1/database/related/{column_name}": { + "/api/v1/database/{pk}/table/{table_name}/{schema_name}/": { "get": { "parameters": [ { + "description": "The database id", "in": "path", - "name": "column_name", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "Table name", + "in": "path", + "name": "table_name", "required": true, "schema": { "type": "string" } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "Table schema", + "in": "path", + "name": "schema_name", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -17584,11 +18779,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "$ref": "#/components/schemas/TableMetadataResponseSchema" } } }, - "description": "Related column data" + "description": "Table metadata information" }, "400": { "$ref": "#/components/responses/400" @@ -17599,6 +18794,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -17608,44 +18806,64 @@ "jwt": [] } ], - "summary": "Get related fields data", + "summary": "Get database table metadata", "tags": [ "Database" ] } }, - "/api/v1/database/test_connection/": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseTestConnectionSchema" - } + "/api/v1/database/{pk}/table_extra/{table_name}/{schema_name}/": { + "get": { + "description": "Response depends on each DB engine spec normally focused on partitions.", + "parameters": [ + { + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "description": "Database schema", - "required": true - }, + { + "description": "Table name", + "in": "path", + "name": "table_name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Table schema", + "in": "path", + "name": "schema_name", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" } } }, - "description": "Database Test Connection" + "description": "Table extra metadata information" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -17658,46 +18876,67 @@ "jwt": [] } ], - "summary": "Test a database connection", + "summary": "Get table extra metadata", "tags": [ "Database" ] } }, - "/api/v1/database/validate_parameters/": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseValidateParametersSchema" - } + "/api/v1/database/{pk}/table_metadata/": { + "get": { + "description": "Metadata associated with the table (columns, indexes, etc.)", + "parameters": [ + { + "description": "The database id", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "description": "DB-specific parameters", - "required": true - }, + { + "description": "Table name", + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Optional table schema, if not passed default schema will be used", + "in": "query", + "name": "schema", + "schema": { + "type": "string" + } + }, + { + "description": "Optional table catalog, if not passed default catalog will be used", + "in": "query", + "name": "catalog", + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" } } }, - "description": "Database Test Connection" + "description": "Table metadata information" }, - "400": { - "$ref": "#/components/responses/400" + "401": { + "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -17708,22 +18947,49 @@ "jwt": [] } ], - "summary": "Validate database connection parameters", + "summary": "Get table metadata", "tags": [ "Database" ] } }, - "/api/v1/database/{pk}": { - "delete": { + "/api/v1/database/{pk}/table_metadata/extra/": { + "get": { + "description": "Extra metadata associated with the table (partitions, description, etc.)", "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } + }, + { + "description": "Table name", + "in": "query", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Optional table schema, if not passed the schema configured in the database will be used", + "in": "query", + "name": "schema", + "schema": { + "type": "string" + } + }, + { + "description": "Optional table catalog, if not passed the catalog configured in the database will be used", + "in": "query", + "name": "catalog", + "schema": { + "type": "string" + } } ], "responses": { @@ -17731,29 +18997,18 @@ "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" } } }, - "description": "Database deleted" + "description": "Table extra metadata information" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -17763,11 +19018,13 @@ "jwt": [] } ], - "summary": "Delete a database", + "summary": "Get table extra metadata", "tags": [ "Database" ] - }, + } + }, + "/api/v1/database/{pk}/tables/": { "get": { "parameters": [ { @@ -17778,6 +19035,17 @@ "schema": { "type": "integer" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/database_tables_query_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -17785,11 +19053,23 @@ "content": { "application/json": { "schema": { + "properties": { + "count": { + "type": "integer" + }, + "result": { + "description": "A List of tables for given database", + "items": { + "$ref": "#/components/schemas/DatabaseTablesResponse" + }, + "type": "array" + } + }, "type": "object" } } }, - "description": "Database" + "description": "Tables list" }, "400": { "$ref": "#/components/responses/400" @@ -17797,6 +19077,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -17809,12 +19092,14 @@ "jwt": [] } ], - "summary": "Get a database", + "summary": "Get a list of tables for given database", "tags": [ "Database" ] - }, - "put": { + } + }, + "/api/v1/database/{pk}/upload/": { + "post": { "parameters": [ { "in": "path", @@ -17827,33 +19112,29 @@ ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DatabaseRestApi.put" + "$ref": "#/components/schemas/UploadPostSchema" } } }, - "description": "Database schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatabaseRestApi.put" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Database changed" + "description": "CSV upload response" }, "400": { "$ref": "#/components/responses/400" @@ -17861,9 +19142,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -17879,46 +19157,55 @@ "jwt": [] } ], - "summary": "Change a database", + "summary": "Upload a file to a database table", "tags": [ "Database" ] } }, - "/api/v1/database/{pk}/catalogs/": { - "get": { + "/api/v1/database/{pk}/validate_sql/": { + "post": { + "description": "Validates that arbitrary SQL is acceptable for the given database.", "parameters": [ { - "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/database_catalogs_query_schema" - } - } - }, - "in": "query", - "name": "q" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateSQLRequest" + } + } + }, + "description": "Validate SQL request", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CatalogsResponseSchema" + "properties": { + "result": { + "description": "A List of SQL errors found on the statement", + "items": { + "$ref": "#/components/schemas/ValidateSQLResponse" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "A List of all catalogs from the database" + "description": "Validation result" }, "400": { "$ref": "#/components/responses/400" @@ -17938,36 +19225,29 @@ "jwt": [] } ], - "summary": "Get all catalogs from a database", + "summary": "Validate arbitrary SQL", "tags": [ "Database" ] } }, - "/api/v1/database/{pk}/columnar_upload/": { - "post": { + "/api/v1/dataset/": { + "delete": { "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/ColumnarUploadPostSchema" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { @@ -17980,7 +19260,7 @@ } } }, - "description": "Columnar upload response" + "description": "Dataset bulk delete" }, "400": { "$ref": "#/components/responses/400" @@ -17988,6 +19268,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -18003,23 +19286,24 @@ "jwt": [] } ], - "summary": "Upload a Columnar file to a database table", + "summary": "Bulk delete datasets", "tags": [ - "Database" + "Datasets" ] - } - }, - "/api/v1/database/{pk}/connection": { + }, "get": { + "description": "Gets a list of datasets, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -18027,11 +19311,70 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseConnectionSchema" + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/DatasetRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Database with connection info" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -18051,32 +19394,21 @@ "jwt": [] } ], - "summary": "Get a database connection info", + "summary": "Get a list of datasets", "tags": [ - "Database" + "Datasets" ] - } - }, - "/api/v1/database/{pk}/csv_upload/": { + }, "post": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "$ref": "#/components/schemas/CSVUploadPostSchema" + "$ref": "#/components/schemas/DatasetRestApi.post" } } }, + "description": "Dataset schema", "required": true }, "responses": { @@ -18085,15 +19417,18 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatasetRestApi.post" } }, "type": "object" } } }, - "description": "CSV upload response" + "description": "Dataset added" }, "400": { "$ref": "#/components/responses/400" @@ -18101,9 +19436,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -18116,49 +19448,74 @@ "jwt": [] } ], - "summary": "Upload a CSV file to a database table", + "summary": "Create a new dataset", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/excel_upload/": { - "post": { + "/api/v1/dataset/_info": { + "get": { + "description": "Get metadata information about this API resource", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/ExcelUploadPostSchema" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Excel upload response" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -18166,9 +19523,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -18181,22 +19535,33 @@ "jwt": [] } ], - "summary": "Upload an Excel file to a database table", + "summary": "Get metadata information about this API resource", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/function_names/": { + "/api/v1/dataset/distinct/{column_name}": { "get": { "parameters": [ { "in": "path", - "name": "pk", + "name": "column_name", "required": true, "schema": { - "type": "integer" + "type": "string" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -18204,11 +19569,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseFunctionNamesResponse" + "$ref": "#/components/schemas/DistincResponseSchema" } } }, - "description": "Query result" + "description": "Distinct field data" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -18225,41 +19593,59 @@ "jwt": [] } ], - "summary": "Get function names supported by a database", + "summary": "Get distinct values from field data", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/related_objects/": { - "get": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "/api/v1/dataset/duplicate": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetDuplicateSchema" + } } - } - ], + }, + "description": "Dataset schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseRelatedObjectsResponse" + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatasetDuplicateSchema" + } + }, + "type": "object" } } }, - "description": "Query result" + "description": "Dataset duplicated" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -18269,29 +19655,20 @@ "jwt": [] } ], - "summary": "Get charts and dashboards count associated to a database", + "summary": "Duplicate a dataset", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/schemas/": { + "/api/v1/dataset/export/": { "get": { "parameters": [ - { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/database_schemas_query_schema" + "$ref": "#/components/schemas/get_export_ids_schema" } } }, @@ -18302,13 +19679,13 @@ "responses": { "200": { "content": { - "application/json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/SchemasResponseSchema" + "type": "string" } } }, - "description": "A List of all schemas from the database" + "description": "Dataset export" }, "400": { "$ref": "#/components/responses/400" @@ -18328,40 +19705,53 @@ "jwt": [] } ], - "summary": "Get all schemas from a database", + "summary": "Download multiple datasets as YAML files", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/schemas_access_for_file_upload/": { - "get": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "/api/v1/dataset/get_or_create/": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOrCreateDatasetSchema" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseSchemaAccessForFileUploadResponse" + "properties": { + "result": { + "properties": { + "table_id": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" } } }, - "description": "The list of the database schemas where to upload information" + "description": "The ID of the table" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -18372,53 +19762,74 @@ "jwt": [] } ], - "summary": "The list of the database schemas where to upload information", + "summary": "Retrieve a table by name, or create it if it does not exist", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/select_star/{table_name}/": { - "get": { - "parameters": [ - { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "Table name", - "in": "path", - "name": "table_name", - "required": true, - "schema": { - "type": "string" + "/api/v1/dataset/import/": { + "post": { + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "properties": { + "formData": { + "description": "upload file (ZIP or YAML)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing datasets?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + }, + "sync_columns": { + "description": "sync columns?", + "type": "boolean" + }, + "sync_metrics": { + "description": "sync metrics?", + "type": "boolean" + } + }, + "type": "object" + } } }, - { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SelectStarResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "SQL statement for a select star for table" + "description": "Dataset import result" }, "400": { "$ref": "#/components/responses/400" @@ -18426,9 +19837,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -18441,41 +19849,33 @@ "jwt": [] } ], - "summary": "Get database select star for table", + "summary": "Import dataset(s) with associated databases", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/select_star/{table_name}/{schema_name}/": { + "/api/v1/dataset/related/{column_name}": { "get": { "parameters": [ { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "Table name", "in": "path", - "name": "table_name", + "name": "column_name", "required": true, "schema": { "type": "string" } }, { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -18483,11 +19883,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SelectStarResponseSchema" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "SQL statement for a select star for table" + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -18498,9 +19898,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -18510,52 +19907,43 @@ "jwt": [] } ], - "summary": "Get database select star for table", + "summary": "Get related fields data", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/ssh_tunnel/": { - "delete": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "/api/v1/dataset/warm_up_cache": { + "put": { + "description": "Warms up the cache for the table. Note for slices a force refresh occurs. In terms of the `extra_filters` these can be obtained from records in the JSON encoded `logs.json` column associated with the `explore_json` action.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetCacheWarmUpRequestSchema" + } } - } - ], + }, + "description": "Identifies the database and table to warm up cache for, and any additional dashboard or filter context to use.", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatasetCacheWarmUpResponseSchema" } } }, - "description": "SSH Tunnel deleted" - }, - "401": { - "$ref": "#/components/responses/401" + "description": "Each chart's warmup status" }, - "403": { - "$ref": "#/components/responses/403" + "400": { + "$ref": "#/components/responses/400" }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -18565,41 +19953,22 @@ "jwt": [] } ], - "summary": "Delete a SSH tunnel", + "summary": "Warm up the cache for each chart powered by the given table", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/table/{table_name}/{schema_name}/": { - "get": { + "/api/v1/dataset/{pk}": { + "delete": { "parameters": [ { - "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "description": "Table name", - "in": "path", - "name": "table_name", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { @@ -18607,18 +19976,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableMetadataResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Table metadata information" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dataset delete" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -18634,18 +20008,16 @@ "jwt": [] } ], - "summary": "Get database table metadata", + "summary": "Delete a dataset", "tags": [ - "Database" + "Datasets" ] - } - }, - "/api/v1/database/{pk}/table_extra/{table_name}/{schema_name}/": { + }, "get": { - "description": "Response depends on each DB engine spec normally focused on partitions.", + "description": "Get a dataset by ID", "parameters": [ { - "description": "The database id", + "description": "The dataset ID", "in": "path", "name": "pk", "required": true, @@ -18654,21 +20026,22 @@ } }, { - "description": "Table name", - "in": "path", - "name": "table_name", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" }, { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, + "description": "Should Jinja macros from sql, metrics and columns be rendered and included in the response", + "in": "query", + "name": "include_rendered_sql", "schema": { - "type": "string" + "type": "boolean" } } ], @@ -18677,11 +20050,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" + "properties": { + "id": { + "description": "The item id", + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/DatasetRestApi.get" + } + }, + "type": "object" } } }, - "description": "Table extra metadata information" + "description": "Dataset object has been returned." }, "400": { "$ref": "#/components/responses/400" @@ -18689,9 +20071,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -18704,18 +20083,14 @@ "jwt": [] } ], - "summary": "Get table extra metadata", + "summary": "Get a dataset", "tags": [ - "Database" + "Datasets" ] - } - }, - "/api/v1/database/{pk}/table_metadata/": { - "get": { - "description": "Metadata associated with the table (columns, indexes, etc.)", + }, + "put": { "parameters": [ { - "description": "The database id", "in": "path", "name": "pk", "required": true, @@ -18724,48 +20099,58 @@ } }, { - "description": "Table name", - "in": "query", - "name": "name", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Optional table schema, if not passed default schema will be used", - "in": "query", - "name": "schema", - "schema": { - "type": "string" - } - }, - { - "description": "Optional table catalog, if not passed default catalog will be used", "in": "query", - "name": "catalog", + "name": "override_columns", "schema": { - "type": "string" + "type": "boolean" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetRestApi.put" + } + } + }, + "description": "Dataset schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatasetRestApi.put" + } + }, + "type": "object" } } }, - "description": "Table metadata information" + "description": "Dataset changed" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -18775,18 +20160,17 @@ "jwt": [] } ], - "summary": "Get table metadata", + "summary": "Update a dataset", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/table_metadata/extra/": { - "get": { - "description": "Extra metadata associated with the table (partitions, description, etc.)", + "/api/v1/dataset/{pk}/column/{column_id}": { + "delete": { "parameters": [ { - "description": "The database id", + "description": "The dataset pk for this column", "in": "path", "name": "pk", "required": true, @@ -18795,28 +20179,12 @@ } }, { - "description": "Table name", - "in": "query", - "name": "name", + "description": "The column id for this dataset", + "in": "path", + "name": "column_id", "required": true, "schema": { - "type": "string" - } - }, - { - "description": "Optional table schema, if not passed the schema configured in the database will be used", - "in": "query", - "name": "schema", - "schema": { - "type": "string" - } - }, - { - "description": "Optional table catalog, if not passed the catalog configured in the database will be used", - "in": "query", - "name": "catalog", - "schema": { - "type": "string" + "type": "integer" } } ], @@ -18825,18 +20193,29 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Table extra metadata information" + "description": "Column deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -18846,17 +20225,17 @@ "jwt": [] } ], - "summary": "Get table extra metadata", + "summary": "Delete a dataset column", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/tables/": { - "get": { + "/api/v1/dataset/{pk}/metric/{metric_id}": { + "delete": { "parameters": [ { - "description": "The database id", + "description": "The dataset pk for this column", "in": "path", "name": "pk", "required": true, @@ -18865,15 +20244,13 @@ } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/database_tables_query_schema" - } - } - }, - "in": "query", - "name": "q" + "description": "The metric id for this dataset", + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -18882,29 +20259,22 @@ "application/json": { "schema": { "properties": { - "count": { - "type": "integer" - }, - "result": { - "description": "A List of tables for given database", - "items": { - "$ref": "#/components/schemas/DatabaseTablesResponse" - }, - "type": "array" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Tables list" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Metric deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -18920,15 +20290,14 @@ "jwt": [] } ], - "summary": "Get a list of tables for given database", + "summary": "Delete a dataset metric", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/database/{pk}/validate_sql/": { - "post": { - "description": "Validates that arbitrary SQL is acceptable for the given database.", + "/api/v1/dataset/{pk}/refresh": { + "put": { "parameters": [ { "in": "path", @@ -18939,46 +20308,34 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ValidateSQLRequest" - } - } - }, - "description": "Validate SQL request", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "result": { - "description": "A List of SQL errors found on the statement", - "items": { - "$ref": "#/components/schemas/ValidateSQLResponse" - }, - "type": "array" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Validation result" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dataset delete" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -18988,25 +20345,22 @@ "jwt": [] } ], - "summary": "Validate arbitrary SQL", + "summary": "Refresh and update columns of a dataset", "tags": [ - "Database" + "Datasets" ] } }, - "/api/v1/dataset/": { - "delete": { + "/api/v1/dataset/{pk}/related_objects": { + "get": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -19014,32 +20368,18 @@ "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatasetRelatedObjectsResponse" } } }, - "description": "Dataset bulk delete" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Query result" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -19049,86 +20389,68 @@ "jwt": [] } ], - "summary": "Bulk delete datasets", + "summary": "Get charts and dashboards count associated to a dataset", "tags": [ "Datasets" ] - }, - "get": { - "description": "Gets a list of datasets, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, + } + }, + "/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/": { + "get": { + "parameters": [ + { + "description": "The type of datasource", + "in": "path", + "name": "datasource_type", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The id of the datasource", + "in": "path", + "name": "datasource_id", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The name of the column to get values for", + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { "result": { - "description": "The result from the get list query", "items": { - "$ref": "#/components/schemas/DatasetRestApi.get_list" + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "object" + } + ] }, "type": "array" } @@ -19137,7 +20459,7 @@ } } }, - "description": "Items from Model" + "description": "A List of distinct values for the column" }, "400": { "$ref": "#/components/responses/400" @@ -19145,8 +20467,11 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -19157,50 +20482,91 @@ "jwt": [] } ], - "summary": "Get a list of datasets", + "summary": "Get possible values for a datasource column", "tags": [ - "Datasets" + "Datasources" ] - }, - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetRestApi.post" - } + } + }, + "/api/v1/embedded_dashboard/{uuid}": { + "get": { + "parameters": [ + { + "description": "The embedded configuration uuid", + "in": "path", + "name": "uuid", + "required": true, + "schema": { + "type": "string" } }, - "description": "Dataset schema", - "required": true - }, + { + "description": "The ui config of embedded dashboard (optional).", + "in": "query", + "name": "uiConfig", + "schema": { + "type": "number" + } + }, + { + "description": "Show filters (optional).", + "in": "query", + "name": "show_filters", + "schema": { + "type": "boolean" + } + }, + { + "description": "Expand filters (optional).", + "in": "query", + "name": "expand_filters", + "schema": { + "type": "boolean" + } + }, + { + "description": "Native filters key to apply filters. (optional).", + "in": "query", + "name": "native_filters_key", + "schema": { + "type": "string" + } + }, + { + "description": "Permalink key to apply filters. (optional).", + "in": "query", + "name": "permalink_key", + "schema": { + "type": "string" + } + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/DatasetRestApi.post" + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" } }, "type": "object" } + }, + "text/html": { + "schema": { + "type": "string" + } } }, - "description": "Dataset added" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Result contains the embedded dashboard configuration" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -19211,26 +20577,50 @@ "jwt": [] } ], - "summary": "Create a new dataset", + "summary": "Get a report schedule log", "tags": [ - "Datasets" + "Embedded Dashboard" ] } }, - "/api/v1/dataset/_info": { + "/api/v1/explore/": { "get": { - "description": "Get metadata information about this API resource", + "description": "Assembles Explore related information (form_data, slice, dataset) in a single endpoint.<br/><br/> The information can be assembled from:<br/> - The cache using a form_data_key<br/> - The metadata database using a permalink_key<br/> - Build from scratch using dataset or slice identifiers.", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, "in": "query", - "name": "q" + "name": "form_data_key", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "permalink_key", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "slice_id", + "schema": { + "type": "integer" + } + }, + { + "in": "query", + "name": "datasource_id", + "schema": { + "type": "integer" + } + }, + { + "in": "query", + "name": "datasource_type", + "schema": { + "type": "string" + } } ], "responses": { @@ -19238,47 +20628,76 @@ "content": { "application/json": { "schema": { - "properties": { - "add_columns": { - "type": "object" - }, - "edit_columns": { - "type": "object" - }, - "filters": { - "properties": { - "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "$ref": "#/components/schemas/ExploreContextSchema" + } + } + }, + "description": "Returns the initial context." + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Assemble Explore related information in a single endpoint", + "tags": [ + "Explore" + ] + } + }, + "/api/v1/explore/form_data": { + "post": { + "parameters": [ + { + "in": "query", + "name": "tab_id", + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FormDataPostSchema" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "key": { + "description": "The key to retrieve the form_data.", + "type": "string" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "The form_data was stored successfully." }, "400": { "$ref": "#/components/responses/400" @@ -19298,33 +20717,23 @@ "jwt": [] } ], - "summary": "Get metadata information about this API resource", + "summary": "Create a new form_data", "tags": [ - "Datasets" + "Explore Form Data" ] } }, - "/api/v1/dataset/distinct/{column_name}": { - "get": { + "/api/v1/explore/form_data/{key}": { + "delete": { "parameters": [ { + "description": "The form_data key.", "in": "path", - "name": "column_name", + "name": "key", "required": true, "schema": { "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -19332,11 +20741,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DistincResponseSchema" + "properties": { + "message": { + "description": "The result of the operation", + "type": "string" + } + }, + "type": "object" } } }, - "description": "Distinct field data" + "description": "Deleted the stored form_data." }, "400": { "$ref": "#/components/responses/400" @@ -19347,6 +20762,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -19356,43 +20774,38 @@ "jwt": [] } ], - "summary": "Get distinct values from field data", + "summary": "Delete a form_data", "tags": [ - "Datasets" + "Explore Form Data" ] - } - }, - "/api/v1/dataset/duplicate": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetDuplicateSchema" - } + }, + "get": { + "parameters": [ + { + "in": "path", + "name": "key", + "required": true, + "schema": { + "type": "string" } - }, - "description": "Dataset schema", - "required": true - }, + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatasetDuplicateSchema" + "form_data": { + "description": "The stored form_data", + "type": "string" } }, "type": "object" } } }, - "description": "Dataset duplicated" + "description": "Returns the stored form_data." }, "400": { "$ref": "#/components/responses/400" @@ -19400,9 +20813,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -19418,37 +20828,55 @@ "jwt": [] } ], - "summary": "Duplicate a dataset", + "summary": "Get a form_data", "tags": [ - "Datasets" + "Explore Form Data" ] - } - }, - "/api/v1/dataset/export/": { - "get": { + }, + "put": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" - } - } - }, + "in": "path", + "name": "key", + "required": true, + "schema": { + "type": "string" + } + }, + { "in": "query", - "name": "q" + "name": "tab_id", + "schema": { + "type": "integer" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FormDataPutSchema" + } + } + }, + "required": true + }, "responses": { "200": { "content": { - "text/plain": { + "application/json": { "schema": { - "type": "string" + "properties": { + "key": { + "description": "The key to retrieve the form_data.", + "type": "string" + } + }, + "type": "object" } } }, - "description": "Dataset export" + "description": "The form_data was stored successfully." }, "400": { "$ref": "#/components/responses/400" @@ -19459,6 +20887,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -19468,44 +20899,44 @@ "jwt": [] } ], - "summary": "Download multiple datasets as YAML files", + "summary": "Update an existing form_data", "tags": [ - "Datasets" + "Explore Form Data" ] } }, - "/api/v1/dataset/get_or_create/": { + "/api/v1/explore/permalink": { "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetOrCreateDatasetSchema" + "$ref": "#/components/schemas/ExplorePermalinkStateSchema" } } }, "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "result": { - "properties": { - "table_id": { - "type": "integer" - } - }, - "type": "object" + "key": { + "description": "The key to retrieve the permanent link data.", + "type": "string" + }, + "url": { + "description": "permanent link.", + "type": "string" } }, "type": "object" } } }, - "description": "The ID of the table" + "description": "The permanent link was stored successfully." }, "400": { "$ref": "#/components/responses/400" @@ -19525,74 +20956,40 @@ "jwt": [] } ], - "summary": "Retrieve a table by name, or create it if it does not exist", + "summary": "Create a new permanent link", "tags": [ - "Datasets" + "Explore Permanent Link" ] } }, - "/api/v1/dataset/import/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP or YAML)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing datasets?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - }, - "sync_columns": { - "description": "sync columns?", - "type": "boolean" - }, - "sync_metrics": { - "description": "sync metrics?", - "type": "boolean" - } - }, - "type": "object" - } - } - }, - "required": true - }, + "/api/v1/explore/permalink/{key}": { + "get": { + "parameters": [ + { + "in": "path", + "name": "key", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "state": { + "description": "The stored state", + "type": "object" } }, "type": "object" } } }, - "description": "Dataset import result" + "description": "Returns the stored form_data." }, "400": { "$ref": "#/components/responses/400" @@ -19600,6 +20997,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -19612,28 +21012,21 @@ "jwt": [] } ], - "summary": "Import dataset(s) with associated databases", + "summary": "Get chart's permanent link state", "tags": [ - "Datasets" + "Explore Permanent Link" ] } }, - "/api/v1/dataset/related/{column_name}": { + "/api/v1/log/": { "get": { + "description": "Gets a list of logs, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ - { - "in": "path", - "name": "column_name", - "required": true, - "schema": { - "type": "string" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_related_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -19646,11 +21039,70 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/LogRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Related column data" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -19658,8 +21110,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -19670,95 +21122,48 @@ "jwt": [] } ], - "summary": "Get related fields data", + "summary": "Get a list of logs", "tags": [ - "Datasets" + "LogRestApi" ] - } - }, - "/api/v1/dataset/warm_up_cache": { - "put": { - "description": "Warms up the cache for the table. Note for slices a force refresh occurs. In terms of the `extra_filters` these can be obtained from records in the JSON encoded `logs.json` column associated with the `explore_json` action.", + }, + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatasetCacheWarmUpRequestSchema" + "$ref": "#/components/schemas/LogRestApi.post" } } }, - "description": "Identifies the database and table to warm up cache for, and any additional dashboard or filter context to use.", + "description": "Model schema", "required": true }, "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetCacheWarmUpResponseSchema" - } - } - }, - "description": "Each chart's warmup status" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Warm up the cache for each chart powered by the given table", - "tags": [ - "Datasets" - ] - } - }, - "/api/v1/dataset/{pk}": { - "delete": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], - "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "message": { + "id": { "type": "string" + }, + "result": { + "$ref": "#/components/schemas/LogRestApi.post" } }, "type": "object" } } }, - "description": "Dataset delete" + "description": "Item inserted" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -19771,18 +21176,18 @@ "jwt": [] } ], - "summary": "Delete a dataset", "tags": [ - "Datasets" + "LogRestApi" ] - }, + } + }, + "/api/v1/log/recent_activity/": { "get": { - "description": "Get a dataset by ID", "parameters": [ { - "description": "The dataset ID", + "description": "The id of the user", "in": "path", - "name": "pk", + "name": "user_id", "required": true, "schema": { "type": "integer" @@ -19792,20 +21197,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_item_schema" + "$ref": "#/components/schemas/get_recent_activity_schema" } } }, "in": "query", "name": "q" - }, - { - "description": "Should Jinja macros from sql, metrics and columns be rendered and included in the response", - "in": "query", - "name": "include_rendered_sql", - "schema": { - "type": "boolean" - } } ], "responses": { @@ -19813,20 +21210,11 @@ "content": { "application/json": { "schema": { - "properties": { - "id": { - "description": "The item id", - "type": "string" - }, - "result": { - "$ref": "#/components/schemas/DatasetRestApi.get" - } - }, - "type": "object" + "$ref": "#/components/schemas/RecentActivityResponseSchema" } } }, - "description": "Dataset object has been returned." + "description": "A List of recent activity objects" }, "400": { "$ref": "#/components/responses/400" @@ -19834,8 +21222,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" }, "500": { "$ref": "#/components/responses/500" @@ -19846,12 +21234,15 @@ "jwt": [] } ], - "summary": "Get a dataset", + "summary": "Get recent activity data for a user", "tags": [ - "Datasets" + "LogRestApi" ] - }, - "put": { + } + }, + "/api/v1/log/{pk}": { + "get": { + "description": "Get an item model", "parameters": [ { "in": "path", @@ -19862,42 +21253,68 @@ } }, { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, "in": "query", - "name": "override_columns", - "schema": { - "type": "boolean" - } + "name": "q" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetRestApi.put" - } - } - }, - "description": "Dataset schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, "id": { - "type": "number" + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" }, "result": { - "$ref": "#/components/schemas/DatasetRestApi.put" + "$ref": "#/components/schemas/LogRestApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" } }, "type": "object" } } }, - "description": "Dataset changed" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -19905,9 +21322,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -19923,129 +21337,119 @@ "jwt": [] } ], - "summary": "Update a dataset", + "summary": "Get a log detail information", "tags": [ - "Datasets" + "LogRestApi" ] } }, - "/api/v1/dataset/{pk}/column/{column_id}": { - "delete": { - "parameters": [ - { - "description": "The dataset pk for this column", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The column id for this dataset", - "in": "path", - "name": "column_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "/api/v1/me/": { + "get": { + "description": "Gets the user object corresponding to the agent making the request, or returns a 401 error if the user is unauthenticated.", "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "$ref": "#/components/schemas/UserResponseSchema" } }, "type": "object" } } }, - "description": "Column deleted" + "description": "The current user" }, "401": { "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Delete a dataset column", + "summary": "Get the user object", "tags": [ - "Datasets" + "Current User" ] } }, - "/api/v1/dataset/{pk}/metric/{metric_id}": { - "delete": { - "parameters": [ - { - "description": "The dataset pk for this column", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "/api/v1/me/roles/": { + "get": { + "description": "Gets the user roles corresponding to the agent making the request, or returns a 401 error if the user is unauthenticated.", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "$ref": "#/components/schemas/UserResponseSchema" + } + }, + "type": "object" + } + } + }, + "description": "The current user" }, - { - "description": "The metric id for this dataset", - "in": "path", - "name": "metric_id", - "required": true, - "schema": { - "type": "integer" - } + "401": { + "$ref": "#/components/responses/401" } - ], + }, + "summary": "Get the user roles", + "tags": [ + "Current User" + ] + } + }, + "/api/v1/menu/": { + "get": { + "description": "Get the menu data structure. Returns a forest like structure with the menu the user has access to", "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "description": "Menu items in a forest like data structure", + "items": { + "properties": { + "childs": { + "items": { + "type": "object" + }, + "type": "array" + }, + "icon": { + "description": "Icon name to show for this menu item", + "type": "string" + }, + "label": { + "description": "Pretty name for the menu item", + "type": "string" + }, + "name": { + "description": "The internal menu item name, maps to permission_name", + "type": "string" + }, + "url": { + "description": "The URL for the menu item", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Metric deleted" + "description": "Get menu data" }, "401": { "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ @@ -20053,22 +21457,25 @@ "jwt": [] } ], - "summary": "Delete a dataset metric", "tags": [ - "Datasets" + "Menu" ] } }, - "/api/v1/dataset/{pk}/refresh": { - "put": { + "/api/v1/query/": { + "get": { + "description": "Gets a list of queries, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -20077,25 +21484,76 @@ "application/json": { "schema": { "properties": { - "message": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/QueryRestApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Dataset delete" + "description": "Items from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -20108,22 +21566,33 @@ "jwt": [] } ], - "summary": "Refresh and update columns of a dataset", + "summary": "Get a list of queries", "tags": [ - "Datasets" + "Queries" ] } }, - "/api/v1/dataset/{pk}/related_objects": { + "/api/v1/query/distinct/{column_name}": { "get": { "parameters": [ { "in": "path", - "name": "pk", + "name": "column_name", "required": true, "schema": { - "type": "integer" + "type": "string" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -20131,11 +21600,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatasetRelatedObjectsResponse" + "$ref": "#/components/schemas/DistincResponseSchema" } } }, - "description": "Query result" + "description": "Distinct field data" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -20152,41 +21624,33 @@ "jwt": [] } ], - "summary": "Get charts and dashboards count associated to a dataset", + "summary": "Get distinct values from field data", "tags": [ - "Datasets" + "Queries" ] } }, - "/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/": { + "/api/v1/query/related/{column_name}": { "get": { "parameters": [ { - "description": "The type of datasource", "in": "path", - "name": "datasource_type", + "name": "column_name", "required": true, "schema": { "type": "string" } }, { - "description": "The id of the datasource", - "in": "path", - "name": "datasource_id", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "description": "The name of the column to get values for", - "in": "path", - "name": "column_name", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -20194,35 +21658,11 @@ "content": { "application/json": { "schema": { - "properties": { - "result": { - "items": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "object" - } - ] - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "A List of distinct values for the column" + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -20230,9 +21670,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -20245,25 +21682,25 @@ "jwt": [] } ], - "summary": "Get possible values for a datasource column", + "summary": "Get related fields data", "tags": [ - "Datasources" + "Queries" ] } }, - "/api/v1/embedded_dashboard/{uuid}": { - "get": { - "parameters": [ - { - "description": "The embedded configuration uuid", - "in": "path", - "name": "uuid", - "required": true, - "schema": { - "type": "string" + "/api/v1/query/stop": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StopQuerySchema" + } } - } - ], + }, + "description": "Stop query schema", + "required": true + }, "responses": { "200": { "content": { @@ -20271,14 +21708,17 @@ "schema": { "properties": { "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + "type": "string" } }, "type": "object" } } }, - "description": "Result contains the embedded dashboard configuration" + "description": "Query stopped" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -20295,50 +21735,25 @@ "jwt": [] } ], - "summary": "Get a report schedule log", + "summary": "Manually stop a query with client_id", "tags": [ - "Embedded Dashboard" + "Queries" ] } }, - "/api/v1/explore/": { + "/api/v1/query/updated_since": { "get": { - "description": "Assembles Explore related information (form_data, slice, dataset) in a single endpoint.<br/><br/> The information can be assembled from:<br/> - The cache using a form_data_key<br/> - The metadata database using a permalink_key<br/> - Build from scratch using dataset or slice identifiers.", "parameters": [ { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/queries_get_updated_since_schema" + } + } + }, "in": "query", - "name": "form_data_key", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "permalink_key", - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "slice_id", - "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "datasource_id", - "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "datasource_type", - "schema": { - "type": "string" - } + "name": "q" } ], "responses": { @@ -20346,11 +21761,20 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExploreContextSchema" + "properties": { + "result": { + "description": "A List of queries that changed after last_updated_ms", + "items": { + "$ref": "#/components/schemas/QueryRestApi.get" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Returns the initial context." + "description": "Queries list" }, "400": { "$ref": "#/components/responses/400" @@ -20361,9 +21785,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -20373,41 +21794,79 @@ "jwt": [] } ], - "summary": "Assemble Explore related information in a single endpoint", + "summary": "Get a list of queries that changed after last_updated_ms", "tags": [ - "Explore" + "Queries" ] } }, - "/api/v1/explore/form_data": { - "post": { + "/api/v1/query/{pk}": { + "get": { + "description": "Get an item model", "parameters": [ { - "in": "query", - "name": "tab_id", + "in": "path", + "name": "pk", + "required": true, "schema": { "type": "integer" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FormDataPostSchema" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the form_data.", + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "$ref": "#/components/schemas/QueryRestApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", "type": "string" } }, @@ -20415,7 +21874,7 @@ } } }, - "description": "The form_data was stored successfully." + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -20423,6 +21882,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -20435,23 +21897,25 @@ "jwt": [] } ], - "summary": "Create a new form_data", + "summary": "Get query detail information", "tags": [ - "Explore Form Data" + "Queries" ] } }, - "/api/v1/explore/form_data/{key}": { + "/api/v1/report/": { "delete": { "parameters": [ { - "description": "The form_data key.", - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -20461,7 +21925,6 @@ "schema": { "properties": { "message": { - "description": "The result of the operation", "type": "string" } }, @@ -20469,14 +21932,14 @@ } } }, - "description": "Deleted the stored form_data." - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Report Schedule bulk delete" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -20492,20 +21955,24 @@ "jwt": [] } ], - "summary": "Delete a form_data", + "summary": "Bulk delete report schedules", "tags": [ - "Explore Form Data" + "Report Schedules" ] }, "get": { + "description": "Gets a list of report schedules, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -20514,16 +21981,69 @@ "application/json": { "schema": { "properties": { - "form_data": { - "description": "The stored form_data", + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Returns the stored form_data." + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -20531,9 +22051,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -20546,55 +22063,41 @@ "jwt": [] } ], - "summary": "Get a form_data", + "summary": "Get a list of report schedules", "tags": [ - "Explore Form Data" + "Report Schedules" ] }, - "put": { - "parameters": [ - { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "tab_id", - "schema": { - "type": "integer" - } - } - ], + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FormDataPutSchema" + "$ref": "#/components/schemas/ReportScheduleRestApi.post" } } }, + "description": "Report Schedule schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the form_data.", - "type": "string" + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/ReportScheduleRestApi.post" } }, "type": "object" } } }, - "description": "The form_data was stored successfully." + "description": "Report schedule added" }, "400": { "$ref": "#/components/responses/400" @@ -20617,44 +22120,74 @@ "jwt": [] } ], - "summary": "Update an existing form_data", + "summary": "Create a report schedule", "tags": [ - "Explore Form Data" + "Report Schedules" ] } }, - "/api/v1/explore/permalink": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExplorePermalinkStateSchema" + "/api/v1/report/_info": { + "get": { + "description": "Get metadata information about this API resource", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } } - } - }, - "required": true - }, + }, + "in": "query", + "name": "q" + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the permanent link data.", - "type": "string" + "add_columns": { + "type": "object" }, - "url": { - "description": "permanent link.", - "type": "string" + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" } } }, - "description": "The permanent link was stored successfully." + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -20674,22 +22207,33 @@ "jwt": [] } ], - "summary": "Create a new permanent link", + "summary": "Get metadata information about this API resource", "tags": [ - "Explore Permanent Link" + "Report Schedules" ] } }, - "/api/v1/explore/permalink/{key}": { + "/api/v1/report/related/{column_name}": { "get": { "parameters": [ { "in": "path", - "name": "key", + "name": "column_name", "required": true, "schema": { "type": "string" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -20697,17 +22241,11 @@ "content": { "application/json": { "schema": { - "properties": { - "state": { - "description": "The stored state", - "type": "object" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Returns the stored form_data." + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -20718,9 +22256,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -20730,64 +22265,26 @@ "jwt": [] } ], - "summary": "Get chart's permanent link state", + "summary": "Get related fields data", "tags": [ - "Explore Permanent Link" + "Report Schedules" ] } }, - "/api/v1/ias/login_token": { - "post": { - "description": "Endpoint for exchanging IAS tokens for Superset API tokens. IAS Tokens should be requested from the `acssuperset` IAS application, typically using [client credential flow](https://docs.aci.apple.com/ias/tutorials/client_credentials/index.html). At a minimum, an `id_token` needs to be provided, but by providing a `refresh_token` Superset will be able to automatically refresh the token after the initial one expires. However, to be able to refresh the token, `client_id` and `client_secret` must be provided, as the token needs to be refreshed with the same client that was used for logging in. Unless `refresh_token`, `client_id` and `client_secret` are provided, a `refresh_token` will not be returned.\\nThe following scope should be requested in the token request: `offline openid iam:ds:groups corpds:ds:username corpds:ds:firstName corpds:ds:lastName corpds:ds:email iam:ds:explicitgroups`", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IASLoginTokenRequestSchema" - } - } - }, - "description": "Payload containing IAS tokens.", - "required": true - }, - "responses": { - "200": { + "/api/v1/report/slack_channels/": { + "get": { + "description": "Get slack channels", + "parameters": [ + { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IASLoginTokenResponseSchema" + "$ref": "#/components/schemas/get_slack_channels_schema" } } }, - "description": "Query result" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "tags": [ - "IAS" - ] - } - }, - "/api/v1/ias/profiles": { - "get": { - "description": "Endpoint for retrieving available IAS profiles.", - "parameters": [ - { - "description": "The name of the IAS profile", "in": "query", - "name": "profile", - "required": false, - "schema": { - "type": "string" - } + "name": "q" } ], "responses": { @@ -20795,11 +22292,42 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IASProfilesResponseSchema" + "properties": { + "result": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "IAS Tokens" + "description": "Slack channels" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -20807,22 +22335,22 @@ "jwt": [] } ], + "summary": "Get slack channels", "tags": [ - "IAS" + "Report Schedules" ] } }, - "/api/v1/ias/tokens": { - "get": { - "description": "Endpoint for retrieving IAS tokens for the logged in user. If no token is provided, all tokens are returned.", + "/api/v1/report/{pk}": { + "delete": { "parameters": [ { - "description": "The name of the IAS profile", - "in": "query", - "name": "profile", - "required": false, + "description": "The report schedule pk", + "in": "path", + "name": "pk", + "required": true, "schema": { - "type": "string" + "type": "integer" } } ], @@ -20831,14 +22359,28 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IASTokensResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "IAS Tokens" + "description": "Item deleted" }, - "400": { - "$ref": "#/components/responses/400" + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -20846,31 +22388,32 @@ "jwt": [] } ], + "summary": "Delete a report schedule", "tags": [ - "IAS" + "Report Schedules" ] - } - }, - "/api/v1/ias/tokens/{pk}": { + }, "get": { - "description": "Endpoint for retrieving IAS tokens for a specific user. If no token is provided, all tokens are returned. Only Admin users are able to view other users' tokens.", + "description": "Get an item model", "parameters": [ { "in": "path", "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } }, { - "description": "The name of the IAS profile", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, "in": "query", - "name": "profile", - "required": false, - "schema": { - "type": "string" - } + "name": "q" } ], "responses": { @@ -20878,14 +22421,67 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IASTokensResponseSchema" + "properties": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" + } + }, + "type": "object" } } }, - "description": "IAS Tokens" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -20893,24 +22489,55 @@ "jwt": [] } ], + "summary": "Get a report schedule", "tags": [ - "IAS" + "Report Schedules" ] - } - }, - "/api/v1/lakehouse": { - "get": { - "description": "Disconnect a Lakehouse.", + }, + "put": { + "parameters": [ + { + "description": "The Report Schedule pk", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportScheduleRestApi.put" + } + } + }, + "description": "Report Schedule schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseGetListResponseSchema" + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/ReportScheduleRestApi.put" + } + }, + "type": "object" } } }, - "description": "Lakehouse has been deleted" + "description": "Report Schedule changed" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -20918,6 +22545,12 @@ "403": { "$ref": "#/components/responses/403" }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -20927,24 +22560,35 @@ "jwt": [] } ], - "summary": "Get a list of all connected Lakehouses", + "summary": "Update a report schedule", "tags": [ - "Lakehouse" + "Report Schedules" ] } }, - "/api/v1/lakehouse/{lakehouse_id}": { - "delete": { - "description": "Disconnect a Lakehouse.", + "/api/v1/report/{pk}/log/": { + "get": { + "description": "Gets a list of report schedule logs, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "description": "The unique id of the lakehouse", + "description": "The report schedule id for these logs", "in": "path", - "name": "lakehouse_id", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -20952,20 +22596,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseDisconnectResponseSchema" + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "ids": { + "description": "A list of log ids", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/ReportExecutionLogRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Lakehouse has been deleted" + "description": "Items from logs" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -20976,22 +22640,43 @@ "jwt": [] } ], - "summary": "Disconnect a Lakehouse and all catalogs", + "summary": "Get a list of report schedule logs", "tags": [ - "Lakehouse" + "Report Schedules" ] - }, + } + }, + "/api/v1/report/{pk}/log/{log_id}": { "get": { - "description": "Get information regarding a connected Lakehouse", "parameters": [ { - "description": "The unique id of the lakehouse", + "description": "The report schedule pk for log", "in": "path", - "name": "lakehouse_id", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" + } + }, + { + "description": "The log pk", + "in": "path", + "name": "log_id", + "required": true, + "schema": { + "type": "integer" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -20999,21 +22684,33 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseGetResponseSchema" + "properties": { + "id": { + "description": "The log id", + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/ReportExecutionLogRestApi.get" + } + }, + "type": "object" } } }, - "description": "Lakehouses" + "description": "Item log" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -21023,48 +22720,42 @@ "jwt": [] } ], - "summary": "Get information about a specific Lakehouse", + "summary": "Get a report schedule log", "tags": [ - "Lakehouse" + "Report Schedules" ] - }, - "post": { - "description": "Endpoint for connecting a Lakehouse and associated catalogs to the ACS Superset instance.", + } + }, + "/api/v1/rowlevelsecurity/": { + "delete": { "parameters": [ { - "description": "The unique id of the lakehouse", - "in": "path", - "name": "lakehouse_id", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } + }, + "in": "query", + "name": "q" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LakehouseConnectRequestSchema" - } - } - }, - "description": "Payload containing connection parameters.", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseConnectResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "The connection task has been scheduled." - }, - "400": { - "$ref": "#/components/responses/400" + "description": "RLS Rule bulk delete" }, "401": { "$ref": "#/components/responses/401" @@ -21072,6 +22763,12 @@ "403": { "$ref": "#/components/responses/403" }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -21081,40 +22778,24 @@ "jwt": [] } ], - "summary": "Schedule a task to connect a Lakehouse and catalogs", + "summary": "Bulk delete RLS rules", "tags": [ - "Lakehouse" + "Row Level Security" ] - } - }, - "/api/v1/lakehouse/{lakehouse_id}/dataset": { + }, "get": { - "description": "Endpoint for listing all virtual datasets on a Lakehouse", + "description": "Gets a list of RLS, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { - "description": "The unique id of the lakehouse", - "in": "path", - "name": "lakehouse_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The catalog. Leave empty for all catalogs", - "in": "query", - "name": "catalog", - "schema": { - "type": "string" - } - }, - { - "description": "The schema. Leave empty for all schemas", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, "in": "query", - "name": "schema", - "schema": { - "type": "string" - } + "name": "q" } ], "responses": { @@ -21122,11 +22803,70 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseDatasetListResponseSchema" + "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/RLSRestApi.get_list" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "All virtual datasets satisfying the query params." + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -21134,8 +22874,8 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -21146,45 +22886,41 @@ "jwt": [] } ], - "summary": "Get a list of virtual datasets", + "summary": "Get a list of RLS", "tags": [ - "Lakehouse" + "Row Level Security" ] }, "post": { - "description": "Endpoint for creating a virtual dataset from a query", - "parameters": [ - { - "description": "The unique id of the lakehouse", - "in": "path", - "name": "lakehouse_id", - "required": true, - "schema": { - "type": "string" - } - } - ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseDatasetRequestSchema" + "$ref": "#/components/schemas/RLSRestApi.post" } } }, - "description": "Payload containing virtual dataset parameters.", + "description": "RLS schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseDatasetResponseSchema" + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/RLSRestApi.post" + } + }, + "type": "object" } } }, - "description": "The virtual dataset has been created." + "description": "RLS Rule added" }, "400": { "$ref": "#/components/responses/400" @@ -21192,8 +22928,8 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" + "404": { + "$ref": "#/components/responses/404" }, "422": { "$ref": "#/components/responses/422" @@ -21207,33 +22943,26 @@ "jwt": [] } ], - "summary": "Create a virtual dataset out of a query", + "summary": "Create a new RLS rule", "tags": [ - "Lakehouse" + "Row Level Security" ] } }, - "/api/v1/lakehouse/{lakehouse_id}/task/{task_id}/cancel": { - "post": { - "description": "Endpoint for cancelling a scheduled connection request.", + "/api/v1/rowlevelsecurity/_info": { + "get": { + "description": "Get metadata information about this API resource", "parameters": [ { - "description": "The unique id of the lakehouse", - "in": "path", - "name": "lakehouse_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The id of the connection task", - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -21241,11 +22970,47 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseConnectStatusResponseSchema" + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "The status of the task." + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -21253,11 +23018,8 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -21268,33 +23030,33 @@ "jwt": [] } ], - "summary": "Cancel a running task", + "summary": "Get metadata information about this API resource", "tags": [ - "Lakehouse" + "Row Level Security" ] } }, - "/api/v1/lakehouse/{lakehouse_id}/task/{task_id}/result": { + "/api/v1/rowlevelsecurity/related/{column_name}": { "get": { - "description": "Endpoint for retrieving the payload of a scheduled connection request.", "parameters": [ { - "description": "The unique id of the lakehouse", "in": "path", - "name": "lakehouse_id", + "name": "column_name", "required": true, "schema": { "type": "string" } }, { - "description": "The id of the connection task", - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "type": "string" - } + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } ], "responses": { @@ -21302,11 +23064,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseConnectResultResponseSchema" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "The status of the task." + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -21314,7 +23076,7 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { + "404": { "$ref": "#/components/responses/404" }, "500": { @@ -21326,32 +23088,21 @@ "jwt": [] } ], - "summary": "Get the payload of a completed connection task", + "summary": "Get related fields data", "tags": [ - "Lakehouse" + "Row Level Security" ] } }, - "/api/v1/lakehouse/{lakehouse_id}/task/{task_id}/status": { - "get": { - "description": "Endpoint for checking what the status of a scheduled connection request is.", + "/api/v1/rowlevelsecurity/{pk}": { + "delete": { "parameters": [ { - "description": "The unique id of the lakehouse", - "in": "path", - "name": "lakehouse_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The id of the connection task", "in": "path", - "name": "task_id", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], @@ -21360,24 +23111,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LakehouseConnectStatusResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "The status of the task." - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" + "description": "Item deleted" }, "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -21387,21 +23137,27 @@ "jwt": [] } ], - "summary": "Check the status of a connection task", + "summary": "Delete an RLS", "tags": [ - "Lakehouse" + "Row Level Security" ] - } - }, - "/api/v1/log/": { + }, "get": { - "description": "Gets a list of logs, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Get an item model", "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_list_schema" + "$ref": "#/components/schemas/get_item_schema" } } }, @@ -21415,10 +23171,6 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, "description_columns": { "properties": { "column_name": { @@ -21429,12 +23181,9 @@ }, "type": "object" }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" + "id": { + "description": "The item id", + "type": "string" }, "label_columns": { "properties": { @@ -21446,38 +23195,27 @@ }, "type": "object" }, - "list_columns": { + "result": { + "$ref": "#/components/schemas/RLSRestApi.get" + }, + "show_columns": { "description": "A list of columns", "items": { "type": "string" }, "type": "array" }, - "list_title": { + "show_title": { "description": "A title to render. Will be translated by babel", - "example": "List Items", + "example": "Show Item Details", "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/LogRestApi.get_list" - }, - "type": "array" } }, "type": "object" } } }, - "description": "Items from Model" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -21485,6 +23223,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -21497,41 +23238,52 @@ "jwt": [] } ], - "summary": "Get a list of logs", + "summary": "Get an RLS", "tags": [ - "LogRestApi" + "Row Level Security" ] }, - "post": { + "put": { + "parameters": [ + { + "description": "The Rule pk", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LogRestApi.post" + "$ref": "#/components/schemas/RLSRestApi.put" } } }, - "description": "Model schema", + "description": "RLS schema", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { "id": { - "type": "string" + "type": "number" }, "result": { - "$ref": "#/components/schemas/LogRestApi.post" + "$ref": "#/components/schemas/RLSRestApi.put" } }, "type": "object" } } }, - "description": "Item inserted" + "description": "Rule changed" }, "400": { "$ref": "#/components/responses/400" @@ -21539,6 +23291,12 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -21551,28 +23309,20 @@ "jwt": [] } ], + "summary": "Update an RLS rule", "tags": [ - "LogRestApi" + "Row Level Security" ] } }, - "/api/v1/log/recent_activity/": { - "get": { + "/api/v1/saved_query/": { + "delete": { "parameters": [ - { - "description": "The id of the user", - "in": "path", - "name": "user_id", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_recent_activity_schema" + "$ref": "#/components/schemas/get_delete_ids_schema" } } }, @@ -21585,20 +23335,25 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RecentActivityResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "A List of recent activity objects" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Saved queries bulk delete" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -21609,29 +23364,19 @@ "jwt": [] } ], - "summary": "Get recent activity data for a user", + "summary": "Bulk delete saved queries", "tags": [ - "LogRestApi" + "Queries" ] - } - }, - "/api/v1/log/{pk}": { + }, "get": { - "description": "Get an item model", + "description": "Gets a list of saved queries, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_item_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -21645,6 +23390,10 @@ "application/json": { "schema": { "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, "description_columns": { "properties": { "column_name": { @@ -21655,9 +23404,12 @@ }, "type": "object" }, - "id": { - "description": "The item id", - "type": "string" + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" }, "label_columns": { "properties": { @@ -21669,27 +23421,38 @@ }, "type": "object" }, - "result": { - "$ref": "#/components/schemas/LogRestApi.get" - }, - "show_columns": { + "list_columns": { "description": "A list of columns", "items": { "type": "string" }, "type": "array" }, - "show_title": { + "list_title": { "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/SavedQueryRestApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -21697,9 +23460,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -21712,119 +23472,53 @@ "jwt": [] } ], - "summary": "Get a log detail information", + "summary": "Get a list of saved queries", "tags": [ - "LogRestApi" + "Queries" ] - } - }, - "/api/v1/me/": { - "get": { - "description": "Gets the user object corresponding to the agent making the request, or returns a 401 error if the user is unauthenticated.", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/UserResponseSchema" - } - }, - "type": "object" - } + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedQueryRestApi.post" } - }, - "description": "The current user" + } }, - "401": { - "$ref": "#/components/responses/401" - } + "description": "Model schema", + "required": true }, - "summary": "Get the user object", - "tags": [ - "Current User" - ] - } - }, - "/api/v1/me/roles/": { - "get": { - "description": "Gets the user roles corresponding to the agent making the request, or returns a 401 error if the user is unauthenticated.", "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { + "id": { + "type": "string" + }, "result": { - "$ref": "#/components/schemas/UserResponseSchema" + "$ref": "#/components/schemas/SavedQueryRestApi.post" } }, "type": "object" } } }, - "description": "The current user" + "description": "Item inserted" }, - "401": { - "$ref": "#/components/responses/401" - } - }, - "summary": "Get the user roles", - "tags": [ - "Current User" - ] - } - }, - "/api/v1/menu/": { - "get": { - "description": "Get the menu data structure. Returns a forest like structure with the menu the user has access to", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "result": { - "description": "Menu items in a forest like data structure", - "items": { - "properties": { - "childs": { - "items": { - "type": "object" - }, - "type": "array" - }, - "icon": { - "description": "Icon name to show for this menu item", - "type": "string" - }, - "label": { - "description": "Pretty name for the menu item", - "type": "string" - }, - "name": { - "description": "The internal menu item name, maps to permission_name", - "type": "string" - }, - "url": { - "description": "The URL for the menu item", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - } - } - }, - "description": "Get menu data" + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -21832,20 +23526,21 @@ "jwt": [] } ], + "summary": "Create a saved query", "tags": [ - "Menu" + "Queries" ] } }, - "/api/v1/query/": { + "/api/v1/saved_query/_info": { "get": { - "description": "Gets a list of queries, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Get metadata information about this API resource", "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_list_schema" + "$ref": "#/components/schemas/get_info_schema" } } }, @@ -21859,69 +23554,46 @@ "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, + "add_columns": { "type": "object" }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" + "edit_columns": { + "type": "object" }, - "label_columns": { + "filters": { "properties": { "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" } }, "type": "object" }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", - "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", + "permissions": { + "description": "The user permissions for this API resource", "items": { "type": "string" }, "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/QueryRestApi.get_list" - }, - "type": "array" } }, "type": "object" } } }, - "description": "Items from Model" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -21941,13 +23613,13 @@ "jwt": [] } ], - "summary": "Get a list of queries", + "summary": "Get metadata information about this API resource", "tags": [ "Queries" ] } }, - "/api/v1/query/distinct/{column_name}": { + "/api/v1/saved_query/distinct/{column_name}": { "get": { "parameters": [ { @@ -22005,22 +23677,14 @@ ] } }, - "/api/v1/query/related/{column_name}": { + "/api/v1/saved_query/export/": { "get": { "parameters": [ - { - "in": "path", - "name": "column_name", - "required": true, - "schema": { - "type": "string" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_related_schema" + "$ref": "#/components/schemas/get_export_ids_schema" } } }, @@ -22031,13 +23695,14 @@ "responses": { "200": { "content": { - "application/json": { + "application/zip": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "format": "binary", + "type": "string" } } }, - "description": "Related column data" + "description": "A zip file with saved query(ies) and database(s) as YAML" }, "400": { "$ref": "#/components/responses/400" @@ -22057,23 +23722,49 @@ "jwt": [] } ], - "summary": "Get related fields data", + "summary": "Download multiple saved queries as YAML files", "tags": [ "Queries" ] } }, - "/api/v1/query/stop": { + "/api/v1/saved_query/import/": { "post": { "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/StopQuerySchema" + "properties": { + "formData": { + "description": "upload file (ZIP)", + "format": "binary", + "type": "string" + }, + "overwrite": { + "description": "overwrite existing saved queries?", + "type": "boolean" + }, + "passwords": { + "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_passwords": { + "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_key_passwords": { + "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", + "type": "string" + }, + "ssh_tunnel_private_keys": { + "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", + "type": "string" + } + }, + "type": "object" } } }, - "description": "Stop query schema", "required": true }, "responses": { @@ -22082,7 +23773,7 @@ "application/json": { "schema": { "properties": { - "result": { + "message": { "type": "string" } }, @@ -22090,7 +23781,7 @@ } } }, - "description": "Query stopped" + "description": "Saved Query import result" }, "400": { "$ref": "#/components/responses/400" @@ -22098,8 +23789,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -22110,20 +23801,28 @@ "jwt": [] } ], - "summary": "Manually stop a query with client_id", + "summary": "Import saved queries with associated databases", "tags": [ "Queries" ] } }, - "/api/v1/query/updated_since": { + "/api/v1/saved_query/related/{column_name}": { "get": { "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/queries_get_updated_since_schema" + "$ref": "#/components/schemas/get_related_schema" } } }, @@ -22136,20 +23835,11 @@ "content": { "application/json": { "schema": { - "properties": { - "result": { - "description": "A List of queries that changed after last_updated_ms", - "items": { - "$ref": "#/components/schemas/QueryRestApi.get" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Queries list" + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -22169,13 +23859,60 @@ "jwt": [] } ], - "summary": "Get a list of queries that changed after last_updated_ms", + "summary": "Get related fields data", "tags": [ "Queries" ] } }, - "/api/v1/query/{pk}": { + "/api/v1/saved_query/{pk}": { + "delete": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Item deleted" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Delete a saved query", + "tags": [ + "Queries" + ] + }, "get": { "description": "Get an item model", "parameters": [ @@ -22230,7 +23967,7 @@ "type": "object" }, "result": { - "$ref": "#/components/schemas/QueryRestApi.get" + "$ref": "#/components/schemas/SavedQueryRestApi.get" }, "show_columns": { "description": "A list of columns", @@ -22272,54 +24009,96 @@ "jwt": [] } ], - "summary": "Get query detail information", + "summary": "Get a saved query", "tags": [ "Queries" ] - } - }, - "/api/v1/report/": { - "delete": { + }, + "put": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SavedQueryRestApi.put" + } + } + }, + "description": "Model schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "$ref": "#/components/schemas/SavedQueryRestApi.put" } }, "type": "object" } } }, - "description": "Report Schedule bulk delete" + "description": "Item changed" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Update a saved query", + "tags": [ + "Queries" + ] + } + }, + "/api/v1/security/csrf_token/": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Result contains the CSRF token" + }, + "401": { + "$ref": "#/components/responses/401" }, "500": { "$ref": "#/components/responses/500" @@ -22330,95 +24109,40 @@ "jwt": [] } ], - "summary": "Bulk delete report schedules", + "summary": "Get the CSRF token", "tags": [ - "Report Schedules" + "Security" ] - }, - "get": { - "description": "Gets a list of report schedules, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } + } + }, + "/api/v1/security/guest_token/": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GuestTokenCreate" } - }, - "in": "query", - "name": "q" - } - ], + } + }, + "description": "Parameters for the guest token", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", + "token": { "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get_list" - }, - "type": "array" } }, "type": "object" } } }, - "description": "Items from Model" + "description": "Result contains the guest token" }, "400": { "$ref": "#/components/responses/400" @@ -22426,9 +24150,6 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -22438,41 +24159,69 @@ "jwt": [] } ], - "summary": "Get a list of report schedules", + "summary": "Get a guest token", "tags": [ - "Report Schedules" + "Security" ] - }, + } + }, + "/api/v1/security/login": { "post": { + "description": "Authenticate and get a JWT access and refresh token", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportScheduleRestApi.post" + "properties": { + "password": { + "description": "The password for authentication", + "example": "complex-password", + "type": "string" + }, + "provider": { + "description": "Choose an authentication provider", + "enum": [ + "db", + "ldap" + ], + "example": "db", + "type": "string" + }, + "refresh": { + "description": "If true a refresh token is provided also", + "example": true, + "type": "boolean" + }, + "username": { + "description": "The username for authentication", + "example": "admin", + "type": "string" + } + }, + "type": "object" } } }, - "description": "Report Schedule schema", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" + "access_token": { + "type": "string" }, - "result": { - "$ref": "#/components/schemas/ReportScheduleRestApi.post" + "refresh_token": { + "type": "string" } }, "type": "object" } } }, - "description": "Report schedule added" + "description": "Authentication Successful" }, "400": { "$ref": "#/components/responses/400" @@ -22480,36 +24229,24 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Create a report schedule", "tags": [ - "Report Schedules" + "Security" ] } }, - "/api/v1/report/_info": { + "/api/v1/security/permissions-resources/": { "get": { - "description": "Get metadata information about this API resource", + "description": "Get a list of models", "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_info_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -22523,46 +24260,69 @@ "application/json": { "schema": { "properties": { - "add_columns": { - "type": "object" + "count": { + "description": "The total record count on the backend", + "type": "number" }, - "edit_columns": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, "type": "object" }, - "filters": { + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { "properties": { "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" } }, "type": "object" }, - "permissions": { - "description": "The user permissions for this API resource", + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", "items": { "type": "string" }, "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/PermissionViewMenuApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -22577,50 +24337,45 @@ "$ref": "#/components/responses/500" } }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Get metadata information about this API resource", - "tags": [ - "Report Schedules" - ] - } - }, - "/api/v1/report/related/{column_name}": { - "get": { - "parameters": [ - { - "in": "path", - "name": "column_name", - "required": true, - "schema": { - "type": "string" - } - }, + "security": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" + "jwt": [] } ], + "tags": [ + "Security Permissions on Resources (View Menus)" + ] + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionViewMenuApi.post" + } + } + }, + "description": "Model schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "properties": { + "id": { + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/PermissionViewMenuApi.post" + } + }, + "type": "object" } } }, - "description": "Related column data" + "description": "Item inserted" }, "400": { "$ref": "#/components/responses/400" @@ -22628,8 +24383,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -22640,21 +24395,20 @@ "jwt": [] } ], - "summary": "Get related fields data", "tags": [ - "Report Schedules" + "Security Permissions on Resources (View Menus)" ] } }, - "/api/v1/report/slack_channels/": { + "/api/v1/security/permissions-resources/_info": { "get": { - "description": "Get slack channels", + "description": "Get metadata information about this API resource", "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_slack_channels_schema" + "$ref": "#/components/schemas/get_info_schema" } } }, @@ -22668,17 +24422,37 @@ "application/json": { "schema": { "properties": { - "result": { - "items": { - "properties": { - "id": { - "type": "string" + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" }, - "name": { - "type": "string" - } - }, - "type": "object" + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" }, "type": "array" } @@ -22687,17 +24461,14 @@ } } }, - "description": "Slack channels" + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -22710,17 +24481,15 @@ "jwt": [] } ], - "summary": "Get slack channels", "tags": [ - "Report Schedules" + "Security Permissions on Resources (View Menus)" ] } }, - "/api/v1/report/{pk}": { + "/api/v1/security/permissions-resources/{pk}": { "delete": { "parameters": [ { - "description": "The report schedule pk", "in": "path", "name": "pk", "required": true, @@ -22745,9 +24514,6 @@ }, "description": "Item deleted" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -22763,9 +24529,8 @@ "jwt": [] } ], - "summary": "Delete a report schedule", "tags": [ - "Report Schedules" + "Security Permissions on Resources (View Menus)" ] }, "get": { @@ -22822,7 +24587,7 @@ "type": "object" }, "result": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get" + "$ref": "#/components/schemas/PermissionViewMenuApi.get" }, "show_columns": { "description": "A list of columns", @@ -22864,15 +24629,13 @@ "jwt": [] } ], - "summary": "Get a report schedule", "tags": [ - "Report Schedules" + "Security Permissions on Resources (View Menus)" ] }, "put": { "parameters": [ { - "description": "The Report Schedule pk", "in": "path", "name": "pk", "required": true, @@ -22885,11 +24648,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReportScheduleRestApi.put" + "$ref": "#/components/schemas/PermissionViewMenuApi.put" } } }, - "description": "Report Schedule schema", + "description": "Model schema", "required": true }, "responses": { @@ -22898,18 +24661,15 @@ "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/ReportScheduleRestApi.put" + "$ref": "#/components/schemas/PermissionViewMenuApi.put" } }, "type": "object" } } }, - "description": "Report Schedule changed" + "description": "Item changed" }, "400": { "$ref": "#/components/responses/400" @@ -22917,9 +24677,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -22935,25 +24692,15 @@ "jwt": [] } ], - "summary": "Update a report schedule", "tags": [ - "Report Schedules" + "Security Permissions on Resources (View Menus)" ] } }, - "/api/v1/report/{pk}/log/": { + "/api/v1/security/permissions/": { "get": { - "description": "Gets a list of report schedule logs, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Get a list of models", "parameters": [ - { - "description": "The report schedule id for these logs", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { @@ -22976,17 +24723,142 @@ "description": "The total record count on the backend", "type": "number" }, + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, "ids": { - "description": "A list of log ids", + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "list_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "list_title": { + "description": "A title to render. Will be translated by babel", + "example": "List Items", + "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", "items": { "type": "string" }, - "type": "array" + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/PermissionApi.get_list" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Items from Model" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "tags": [ + "Security Permissions" + ] + } + }, + "/api/v1/security/permissions/_info": { + "get": { + "description": "Get metadata information about this API resource", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" }, - "result": { - "description": "The result from the get list query", + "permissions": { + "description": "The user permissions for this API resource", "items": { - "$ref": "#/components/schemas/ReportExecutionLogRestApi.get_list" + "type": "string" }, "type": "array" } @@ -22995,7 +24867,7 @@ } } }, - "description": "Items from logs" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -23015,17 +24887,16 @@ "jwt": [] } ], - "summary": "Get a list of report schedule logs", "tags": [ - "Report Schedules" + "Security Permissions" ] } }, - "/api/v1/report/{pk}/log/{log_id}": { + "/api/v1/security/permissions/{pk}": { "get": { + "description": "Get an item model", "parameters": [ { - "description": "The report schedule pk for log", "in": "path", "name": "pk", "required": true, @@ -23033,15 +24904,6 @@ "type": "integer" } }, - { - "description": "The log pk", - "in": "path", - "name": "log_id", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { @@ -23060,19 +24922,51 @@ "application/json": { "schema": { "properties": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, "id": { - "description": "The log id", + "description": "The item id", "type": "string" }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, "result": { - "$ref": "#/components/schemas/ReportExecutionLogRestApi.get" + "$ref": "#/components/schemas/PermissionApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" } }, "type": "object" } } }, - "description": "Item log" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -23095,34 +24989,22 @@ "jwt": [] } ], - "summary": "Get a report schedule log", "tags": [ - "Report Schedules" + "Security Permissions" ] } }, - "/api/v1/rowlevelsecurity/": { - "delete": { - "parameters": [ - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" - } - ], + "/api/v1/security/refresh": { + "post": { + "description": "Use the refresh token to get a new JWT access token", "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { + "access_token": { + "description": "A new refreshed access token", "type": "string" } }, @@ -23130,36 +25012,28 @@ } } }, - "description": "RLS Rule bulk delete" + "description": "Refresh Successful" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } }, "security": [ { - "jwt": [] + "jwt_refresh": [] } ], - "summary": "Bulk delete RLS rules", "tags": [ - "Row Level Security" + "Security" ] - }, + } + }, + "/api/v1/security/resources/": { "get": { - "description": "Gets a list of RLS, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Get a list of models", "parameters": [ { "content": { @@ -23232,7 +25106,7 @@ "result": { "description": "The result from the get list query", "items": { - "$ref": "#/components/schemas/RLSRestApi.get_list" + "$ref": "#/components/schemas/ViewMenuApi.get_list" }, "type": "array" } @@ -23261,9 +25135,8 @@ "jwt": [] } ], - "summary": "Get a list of RLS", "tags": [ - "Row Level Security" + "Security Resources (View Menus)" ] }, "post": { @@ -23271,11 +25144,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RLSRestApi.post" + "$ref": "#/components/schemas/ViewMenuApi.post" } } }, - "description": "RLS schema", + "description": "Model schema", "required": true }, "responses": { @@ -23285,17 +25158,17 @@ "schema": { "properties": { "id": { - "type": "number" + "type": "string" }, "result": { - "$ref": "#/components/schemas/RLSRestApi.post" + "$ref": "#/components/schemas/ViewMenuApi.post" } }, "type": "object" } } }, - "description": "RLS Rule added" + "description": "Item inserted" }, "400": { "$ref": "#/components/responses/400" @@ -23303,9 +25176,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -23318,13 +25188,12 @@ "jwt": [] } ], - "summary": "Create a new RLS rule", "tags": [ - "Row Level Security" + "Security Resources (View Menus)" ] } }, - "/api/v1/rowlevelsecurity/_info": { + "/api/v1/security/resources/_info": { "get": { "description": "Get metadata information about this API resource", "parameters": [ @@ -23405,28 +25274,74 @@ "jwt": [] } ], - "summary": "Get metadata information about this API resource", "tags": [ - "Row Level Security" + "Security Resources (View Menus)" ] } }, - "/api/v1/rowlevelsecurity/related/{column_name}": { + "/api/v1/security/resources/{pk}": { + "delete": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Item deleted" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "tags": [ + "Security Resources (View Menus)" + ] + }, "get": { + "description": "Get an item model", "parameters": [ { "in": "path", - "name": "column_name", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_related_schema" + "$ref": "#/components/schemas/get_item_schema" } } }, @@ -23439,11 +25354,52 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "properties": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "$ref": "#/components/schemas/ViewMenuApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" + } + }, + "type": "object" } } }, - "description": "Related column data" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -23454,6 +25410,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -23463,14 +25422,11 @@ "jwt": [] } ], - "summary": "Get related fields data", "tags": [ - "Row Level Security" + "Security Resources (View Menus)" ] - } - }, - "/api/v1/rowlevelsecurity/{pk}": { - "delete": { + }, + "put": { "parameters": [ { "in": "path", @@ -23481,21 +25437,38 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ViewMenuApi.put" + } + } + }, + "description": "Model schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "$ref": "#/components/schemas/ViewMenuApi.put" } }, "type": "object" } } }, - "description": "Item deleted" + "description": "Item changed" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" }, "404": { "$ref": "#/components/responses/404" @@ -23512,27 +25485,20 @@ "jwt": [] } ], - "summary": "Delete an RLS", "tags": [ - "Row Level Security" + "Security Resources (View Menus)" ] - }, + } + }, + "/api/v1/security/roles/": { "get": { - "description": "Get an item model", + "description": "Get a list of models", "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_item_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -23546,6 +25512,10 @@ "application/json": { "schema": { "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, "description_columns": { "properties": { "column_name": { @@ -23556,9 +25526,12 @@ }, "type": "object" }, - "id": { - "description": "The item id", - "type": "string" + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" }, "label_columns": { "properties": { @@ -23570,27 +25543,38 @@ }, "type": "object" }, - "result": { - "$ref": "#/components/schemas/RLSRestApi.get" - }, - "show_columns": { + "list_columns": { "description": "A list of columns", "items": { "type": "string" }, "type": "array" }, - "show_title": { + "list_title": { "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/SupersetRoleApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -23598,9 +25582,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -23613,52 +25594,40 @@ "jwt": [] } ], - "summary": "Get an RLS", "tags": [ - "Row Level Security" + "Security Roles" ] }, - "put": { - "parameters": [ - { - "description": "The Rule pk", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RLSRestApi.put" + "$ref": "#/components/schemas/SupersetRoleApi.post" } } }, - "description": "RLS schema", + "description": "Model schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { "id": { - "type": "number" + "type": "string" }, "result": { - "$ref": "#/components/schemas/RLSRestApi.put" + "$ref": "#/components/schemas/SupersetRoleApi.post" } }, "type": "object" } } }, - "description": "Rule changed" + "description": "Item inserted" }, "400": { "$ref": "#/components/responses/400" @@ -23666,12 +25635,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -23684,20 +25647,20 @@ "jwt": [] } ], - "summary": "Update an RLS rule", "tags": [ - "Row Level Security" + "Security Roles" ] } }, - "/api/v1/saved_query/": { - "delete": { + "/api/v1/security/roles/_info": { + "get": { + "description": "Get metadata information about this API resource", "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" + "$ref": "#/components/schemas/get_info_schema" } } }, @@ -23711,22 +25674,53 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Saved queries bulk delete" + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -23739,107 +25733,108 @@ "jwt": [] } ], - "summary": "Bulk delete saved queries", "tags": [ - "Queries" + "Security Roles" ] - }, + } + }, + "/api/v1/security/roles/search/": { "get": { - "description": "Gets a list of saved queries, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Fetch a paginated list of roles with user and permission IDs.", "parameters": [ { + "in": "query", + "name": "q", + "schema": { + "properties": { + "filters": { + "items": { + "properties": { + "col": { + "enum": [ + "user_ids", + "permission_ids", + "name" + ], + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "order_column": { + "default": "id", + "enum": [ + "id", + "name" + ], + "type": "string" + }, + "order_direction": { + "default": "asc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "page": { + "default": 0, + "type": "integer" + }, + "page_size": { + "default": 10, + "type": "integer" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_list_schema" + "$ref": "#/components/schemas/RolesResponseSchema" } } }, - "in": "query", - "name": "q" - } - ], - "responses": { - "200": { + "description": "Successfully retrieved roles" + }, + "400": { "content": { "application/json": { "schema": { "properties": { - "count": { - "description": "The total record count on the backend", - "type": "number" - }, - "description_columns": { - "properties": { - "column_name": { - "description": "The description for the column name. Will be translated by babel", - "example": "A Nice description for the column", - "type": "string" - } - }, - "type": "object" - }, - "ids": { - "description": "A list of item ids, useful when you don't know the column id", - "items": { - "type": "string" - }, - "type": "array" - }, - "label_columns": { - "properties": { - "column_name": { - "description": "The label for the column name. Will be translated by babel", - "example": "A Nice label for the column", - "type": "string" - } - }, - "type": "object" - }, - "list_columns": { - "description": "A list of columns", - "items": { - "type": "string" - }, - "type": "array" - }, - "list_title": { - "description": "A title to render. Will be translated by babel", - "example": "List Items", + "error": { "type": "string" - }, - "order_columns": { - "description": "A list of allowed columns to sort", - "items": { - "type": "string" - }, - "type": "array" - }, - "result": { - "description": "The result from the get list query", - "items": { - "$ref": "#/components/schemas/SavedQueryRestApi.get_list" - }, - "type": "array" } }, "type": "object" } } }, - "description": "Items from Model" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "422": { - "$ref": "#/components/responses/422" + "description": "Bad request (invalid input)" }, - "500": { - "$ref": "#/components/responses/500" + "403": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Forbidden" } }, "security": [ @@ -23847,47 +25842,42 @@ "jwt": [] } ], - "summary": "Get a list of saved queries", + "summary": "List roles", "tags": [ - "Queries" + "Security Roles" ] - }, - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SavedQueryRestApi.post" - } + } + }, + "/api/v1/security/roles/{pk}": { + "delete": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "description": "Model schema", - "required": true - }, + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { + "message": { "type": "string" - }, - "result": { - "$ref": "#/components/schemas/SavedQueryRestApi.post" } }, "type": "object" } } }, - "description": "Item inserted" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Item deleted" }, - "401": { - "$ref": "#/components/responses/401" + "404": { + "$ref": "#/components/responses/404" }, "422": { "$ref": "#/components/responses/422" @@ -23901,21 +25891,26 @@ "jwt": [] } ], - "summary": "Create a saved query", "tags": [ - "Queries" + "Security Roles" ] - } - }, - "/api/v1/saved_query/_info": { + }, "get": { - "description": "Get metadata information about this API resource", + "description": "Get an item model", "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_info_schema" + "$ref": "#/components/schemas/get_item_schema" } } }, @@ -23929,39 +25924,44 @@ "application/json": { "schema": { "properties": { - "add_columns": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, "type": "object" }, - "edit_columns": { - "type": "object" + "id": { + "description": "The item id", + "type": "string" }, - "filters": { + "label_columns": { "properties": { "column_name": { - "items": { - "properties": { - "name": { - "description": "The filter name. Will be translated by babel", - "type": "string" - }, - "operator": { - "description": "The filter operation key to use on list filters", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" } }, "type": "object" }, - "permissions": { - "description": "The user permissions for this API resource", + "result": { + "$ref": "#/components/schemas/SupersetRoleApi.get" + }, + "show_columns": { + "description": "A list of columns", "items": { "type": "string" }, "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", + "type": "string" } }, "type": "object" @@ -23976,6 +25976,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -23988,45 +25991,47 @@ "jwt": [] } ], - "summary": "Get metadata information about this API resource", "tags": [ - "Queries" + "Security Roles" ] - } - }, - "/api/v1/saved_query/distinct/{column_name}": { - "get": { + }, + "put": { "parameters": [ { "in": "path", - "name": "column_name", + "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SupersetRoleApi.put" + } + } + }, + "description": "Model schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DistincResponseSchema" + "properties": { + "result": { + "$ref": "#/components/schemas/SupersetRoleApi.put" + } + }, + "type": "object" } } }, - "description": "Distinct field data" + "description": "Item changed" }, "400": { "$ref": "#/components/responses/400" @@ -24037,6 +26042,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -24046,100 +26054,32 @@ "jwt": [] } ], - "summary": "Get distinct values from field data", "tags": [ - "Queries" + "Security Roles" ] } }, - "/api/v1/saved_query/export/": { - "get": { + "/api/v1/security/roles/{role_id}/permissions": { + "post": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_export_ids_schema" - } - } - }, - "in": "query", - "name": "q" - } - ], - "responses": { - "200": { - "content": { - "application/zip": { - "schema": { - "format": "binary", - "type": "string" - } - } - }, - "description": "A zip file with saved query(ies) and database(s) as YAML" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "type": "integer" + } } ], - "summary": "Download multiple saved queries as YAML files", - "tags": [ - "Queries" - ] - } - }, - "/api/v1/saved_query/import/": { - "post": { "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "properties": { - "formData": { - "description": "upload file (ZIP)", - "format": "binary", - "type": "string" - }, - "overwrite": { - "description": "overwrite existing saved queries?", - "type": "boolean" - }, - "passwords": { - "description": "JSON map of passwords for each featured database in the ZIP file. If the ZIP includes a database config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_passwords": { - "description": "JSON map of passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the password should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_key_passwords": { - "description": "JSON map of private_key_passwords for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key_password\"}`.", - "type": "string" - }, - "ssh_tunnel_private_keys": { - "description": "JSON map of private_keys for each ssh_tunnel associated to a featured database in the ZIP file. If the ZIP includes a ssh_tunnel config in the path `databases/MyDatabase.yaml`, the private_key should be provided in the following format: `{\"databases/MyDatabase.yaml\": \"my_private_key\"}`.", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/RolePermissionPostSchema" } } }, + "description": "Add role permissions schema", "required": true }, "responses": { @@ -24148,15 +26088,15 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "$ref": "#/components/schemas/RolePermissionPostSchema" } }, "type": "object" } } }, - "description": "Saved Query import result" + "description": "Permissions added" }, "400": { "$ref": "#/components/responses/400" @@ -24164,6 +26104,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -24176,33 +26119,21 @@ "jwt": [] } ], - "summary": "Import saved queries with associated databases", "tags": [ - "Queries" + "Security Roles" ] } }, - "/api/v1/saved_query/related/{column_name}": { + "/api/v1/security/roles/{role_id}/permissions/": { "get": { "parameters": [ { "in": "path", - "name": "column_name", + "name": "role_id", "required": true, "schema": { - "type": "string" + "type": "integer" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -24210,11 +26141,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "properties": { + "result": { + "$ref": "#/components/schemas/RolePermissionListSchema" + } + }, + "type": "object" } } }, - "description": "Related column data" + "description": "List of permissions" }, "400": { "$ref": "#/components/responses/400" @@ -24225,6 +26161,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -24234,39 +26173,55 @@ "jwt": [] } ], - "summary": "Get related fields data", "tags": [ - "Queries" + "Security Roles" ] } }, - "/api/v1/saved_query/{pk}": { - "delete": { + "/api/v1/security/roles/{role_id}/users": { + "put": { "parameters": [ { "in": "path", - "name": "pk", + "name": "role_id", "required": true, "schema": { "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleUserPutSchema" + } + } + }, + "description": "Update role users schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "$ref": "#/components/schemas/RoleUserPutSchema" } }, "type": "object" } } }, - "description": "Item deleted" + "description": "Role users updated" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" }, "404": { "$ref": "#/components/responses/404" @@ -24283,27 +26238,20 @@ "jwt": [] } ], - "summary": "Delete a saved query", "tags": [ - "Queries" + "Security Roles" ] - }, + } + }, + "/api/v1/security/users/": { "get": { - "description": "Get an item model", + "description": "Get a list of models", "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_item_schema" + "$ref": "#/components/schemas/get_list_schema" } } }, @@ -24317,6 +26265,10 @@ "application/json": { "schema": { "properties": { + "count": { + "description": "The total record count on the backend", + "type": "number" + }, "description_columns": { "properties": { "column_name": { @@ -24327,9 +26279,12 @@ }, "type": "object" }, - "id": { - "description": "The item id", - "type": "string" + "ids": { + "description": "A list of item ids, useful when you don't know the column id", + "items": { + "type": "string" + }, + "type": "array" }, "label_columns": { "properties": { @@ -24341,27 +26296,38 @@ }, "type": "object" }, - "result": { - "$ref": "#/components/schemas/SavedQueryRestApi.get" - }, - "show_columns": { + "list_columns": { "description": "A list of columns", "items": { "type": "string" }, "type": "array" }, - "show_title": { + "list_title": { "description": "A title to render. Will be translated by babel", - "example": "Show Item Details", + "example": "List Items", "type": "string" + }, + "order_columns": { + "description": "A list of allowed columns to sort", + "items": { + "type": "string" + }, + "type": "array" + }, + "result": { + "description": "The result from the get list query", + "items": { + "$ref": "#/components/schemas/SupersetUserApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -24369,9 +26335,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -24384,27 +26347,16 @@ "jwt": [] } ], - "summary": "Get a saved query", "tags": [ - "Queries" + "Security Users" ] }, - "put": { - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SavedQueryRestApi.put" + "$ref": "#/components/schemas/SupersetUserApi.post" } } }, @@ -24412,13 +26364,13 @@ "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { "result": { - "$ref": "#/components/schemas/SavedQueryRestApi.put" + "$ref": "#/components/schemas/SupersetUserApi.post" } }, "type": "object" @@ -24448,33 +26400,83 @@ "jwt": [] } ], - "summary": "Update a saved query", "tags": [ - "Queries" + "Security Users" ] } }, - "/api/v1/security/csrf_token/": { + "/api/v1/security/users/_info": { "get": { + "description": "Get metadata information about this API resource", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_info_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "result": { - "type": "string" + "add_columns": { + "type": "object" + }, + "edit_columns": { + "type": "object" + }, + "filters": { + "properties": { + "column_name": { + "items": { + "properties": { + "name": { + "description": "The filter name. Will be translated by babel", + "type": "string" + }, + "operator": { + "description": "The filter operation key to use on list filters", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "permissions": { + "description": "The user permissions for this API resource", + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Result contains the CSRF token" + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -24484,32 +26486,124 @@ "jwt": [] } ], - "summary": "Get the CSRF token", "tags": [ - "Security" + "Security Users" ] } }, - "/api/v1/security/guest_token/": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GuestTokenCreate" + "/api/v1/security/users/{pk}": { + "delete": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Item deleted" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "tags": [ + "Security Users" + ] + }, + "get": { + "description": "Get an item model", + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } } - } - }, - "description": "Parameters for the guest token", - "required": true - }, + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "token": { + "description_columns": { + "properties": { + "column_name": { + "description": "The description for the column name. Will be translated by babel", + "example": "A Nice description for the column", + "type": "string" + } + }, + "type": "object" + }, + "id": { + "description": "The item id", + "type": "string" + }, + "label_columns": { + "properties": { + "column_name": { + "description": "The label for the column name. Will be translated by babel", + "example": "A Nice label for the column", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "$ref": "#/components/schemas/SupersetUserApi.get" + }, + "show_columns": { + "description": "A list of columns", + "items": { + "type": "string" + }, + "type": "array" + }, + "show_title": { + "description": "A title to render. Will be translated by babel", + "example": "Show Item Details", "type": "string" } }, @@ -24517,7 +26611,7 @@ } } }, - "description": "Result contains the guest token" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -24525,6 +26619,12 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -24534,49 +26634,30 @@ "jwt": [] } ], - "summary": "Get a guest token", "tags": [ - "Security" + "Security Users" ] - } - }, - "/api/v1/security/login": { - "post": { - "description": "Authenticate and get a JWT access and refresh token", + }, + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "properties": { - "password": { - "description": "The password for authentication", - "example": "complex-password", - "type": "string" - }, - "provider": { - "description": "Choose an authentication provider", - "enum": [ - "db", - "ldap" - ], - "example": "db", - "type": "string" - }, - "refresh": { - "description": "If true a refresh token is provided also", - "example": true, - "type": "boolean" - }, - "username": { - "description": "The username for authentication", - "example": "admin", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/SupersetUserApi.put" } } }, + "description": "Model schema", "required": true }, "responses": { @@ -24585,18 +26666,15 @@ "application/json": { "schema": { "properties": { - "access_token": { - "type": "string" - }, - "refresh_token": { - "type": "string" + "result": { + "$ref": "#/components/schemas/SupersetUserApi.put" } }, "type": "object" } } }, - "description": "Authentication Successful" + "description": "Item changed" }, "400": { "$ref": "#/components/responses/400" @@ -24604,37 +26682,11 @@ "401": { "$ref": "#/components/responses/401" }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "tags": [ - "Security" - ] - } - }, - "/api/v1/security/refresh": { - "post": { - "description": "Use the refresh token to get a new JWT access token", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "access_token": { - "description": "A new refreshed access token", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Refresh Successful" + "404": { + "$ref": "#/components/responses/404" }, - "401": { - "$ref": "#/components/responses/401" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -24642,11 +26694,11 @@ }, "security": [ { - "jwt_refresh": [] + "jwt": [] } ], "tags": [ - "Security" + "Security Users" ] } }, @@ -24906,6 +26958,119 @@ ] } }, + "/api/v1/sqllab/permalink": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExplorePermalinkStateSchema" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "key": { + "description": "The key to retrieve the permanent link data.", + "type": "string" + }, + "url": { + "description": "permanent link.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "The permanent link was stored successfully." + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Create a new permanent link", + "tags": [ + "SQL Lab Permanent Link" + ] + } + }, + "/api/v1/sqllab/permalink/{key}": { + "get": { + "parameters": [ + { + "in": "path", + "name": "key", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "state": { + "description": "The stored state", + "type": "object" + } + }, + "type": "object" + } + } + }, + "description": "Returns the stored form_data." + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get permanent link state for SQLLab editor.", + "tags": [ + "SQL Lab Permanent Link" + ] + } + }, "/api/v1/sqllab/results/": { "get": { "parameters": [