diff --git a/docs/static/resources/openapi.json b/docs/static/resources/openapi.json index 39ce305170b12..60c25fc5190d1 100644 --- a/docs/static/resources/openapi.json +++ b/docs/static/resources/openapi.json @@ -100,8 +100,13 @@ "QUERY_SECURITY_ACCESS_ERROR", "MISSING_OWNERSHIP_ERROR", "USER_ACTIVITY_SECURITY_ACCESS_ERROR", + "DASHBOARD_SECURITY_ACCESS_ERROR", + "CHART_SECURITY_ACCESS_ERROR", + "OAUTH2_REDIRECT", + "OAUTH2_REDIRECT_ERROR", "BACKEND_TIMEOUT_ERROR", "DATABASE_NOT_FOUND_ERROR", + "TABLE_NOT_FOUND_ERROR", "MISSING_TEMPLATE_PARAMS_ERROR", "INVALID_TEMPLATE_PARAMS_ERROR", "RESULTS_BACKEND_NOT_CONFIGURED_ERROR", @@ -112,12 +117,14 @@ "RESULTS_BACKEND_ERROR", "ASYNC_WORKERS_ERROR", "ADHOC_SUBQUERY_NOT_ALLOWED_ERROR", + "INVALID_SQL_ERROR", + "RESULT_TOO_LARGE_ERROR", "GENERIC_COMMAND_ERROR", "GENERIC_BACKEND_ERROR", "INVALID_PAYLOAD_FORMAT_ERROR", "INVALID_PAYLOAD_SCHEMA_ERROR", - "REPORT_NOTIFICATION_ERROR", - "RESULT_TOO_LARGE_ERROR" + "MARSHMALLOW_ERROR", + "REPORT_NOTIFICATION_ERROR" ], "type": "string" }, @@ -125,7 +132,11 @@ "type": "object" }, "level": { - "enum": ["info", "warning", "error"], + "enum": [ + "info", + "warning", + "error" + ], "type": "string" }, "message": { @@ -207,7 +218,12 @@ "properties": { "annotationType": { "description": "Type of annotation layer", - "enum": ["FORMULA", "INTERVAL", "EVENT", "TIME_SERIES"], + "enum": [ + "FORMULA", + "INTERVAL", + "EVENT", + "TIME_SERIES" + ], "type": "string" }, "color": { @@ -238,7 +254,12 @@ }, "opacity": { "description": "Opacity of layer", - "enum": ["", "opacityLow", "opacityMedium", "opacityHigh"], + "enum": [ + "", + "opacityLow", + "opacityMedium", + "opacityHigh" + ], "nullable": true, "type": "string" }, @@ -265,12 +286,22 @@ }, "sourceType": { "description": "Type of source for annotation data", - "enum": ["", "line", "NATIVE", "table"], + "enum": [ + "", + "line", + "NATIVE", + "table" + ], "type": "string" }, "style": { "description": "Line style. Only applies to time-series annotations", - "enum": ["dashed", "dotted", "solid", "longDashed"], + "enum": [ + "dashed", + "dotted", + "solid", + "longDashed" + ], "type": "string" }, "timeColumn": { @@ -292,7 +323,12 @@ "type": "number" } }, - "required": ["name", "show", "showMarkers", "value"], + "required": [ + "name", + "show", + "showMarkers", + "value" + ], "type": "object" }, "AnnotationLayerRestApi.get": { @@ -359,7 +395,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "AnnotationLayerRestApi.get_list.User1": { @@ -373,7 +412,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "AnnotationLayerRestApi.post": { @@ -390,7 +432,9 @@ "type": "string" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, "AnnotationLayerRestApi.put": { @@ -440,7 +484,9 @@ "type": "string" } }, - "required": ["layer"], + "required": [ + "layer" + ], "type": "object" }, "AnnotationRestApi.get.AnnotationLayer": { @@ -459,13 +505,13 @@ "AnnotationRestApi.get_list": { "properties": { "changed_by": { - "$ref": "#/components/schemas/AnnotationRestApi.get_list.User1" + "$ref": "#/components/schemas/AnnotationRestApi.get_list.User" }, "changed_on_delta_humanized": { "readOnly": true }, "created_by": { - "$ref": "#/components/schemas/AnnotationRestApi.get_list.User" + "$ref": "#/components/schemas/AnnotationRestApi.get_list.User1" }, "end_dttm": { "format": "date-time", @@ -502,7 +548,9 @@ "type": "integer" } }, - "required": ["first_name"], + "required": [ + "first_name" + ], "type": "object" }, "AnnotationRestApi.get_list.User1": { @@ -515,7 +563,9 @@ "type": "integer" } }, - "required": ["first_name"], + "required": [ + "first_name" + ], "type": "object" }, "AnnotationRestApi.post": { @@ -547,7 +597,11 @@ "type": "string" } }, - "required": ["end_dttm", "short_descr", "start_dttm"], + "required": [ + "end_dttm", + "short_descr", + "start_dttm" + ], "type": "object" }, "AnnotationRestApi.put": { @@ -581,6 +635,37 @@ }, "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": { @@ -592,10 +677,136 @@ }, "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": { - "description": "The uid of the dataset/datasource this new chart will use. A complete datasource identification needs `datasouce_uid` ", + "description": "The uid of the dataset/datasource this new chart will use. A complete datasource identification needs `datasource_uid` ", "items": { "type": "string" }, @@ -643,6 +854,18 @@ }, "type": "object" }, + "CatalogsResponseSchema": { + "properties": { + "result": { + "items": { + "description": "A database catalog name", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, "ChartCacheScreenshotResponseSchema": { "properties": { "cache_key": { @@ -675,7 +898,9 @@ "type": "string" } }, - "required": ["chart_id"], + "required": [ + "chart_id" + ], "type": "object" }, "ChartCacheWarmUpResponseSchema": { @@ -711,7 +936,14 @@ "properties": { "aggregate": { "description": "Aggregation operator.Only required for simple expression types.", - "enum": ["AVG", "COUNT", "COUNT_DISTINCT", "MAX", "MIN", "SUM"], + "enum": [ + "AVG", + "COUNT", + "COUNT_DISTINCT", + "MAX", + "MIN", + "SUM" + ], "type": "string" }, "column": { @@ -719,7 +951,10 @@ }, "expressionType": { "description": "Simple or SQL metric", - "enum": ["SIMPLE", "SQL"], + "enum": [ + "SIMPLE", + "SQL" + ], "example": "SQL", "type": "string" }, @@ -753,7 +988,9 @@ "type": "string" } }, - "required": ["expressionType"], + "required": [ + "expressionType" + ], "type": "object" }, "ChartDataAggregateOptionsSchema": { @@ -818,16 +1055,25 @@ }, "percentiles": { "description": "Upper and lower percentiles for percentile whisker type.", - "example": [1, 99] + "example": [ + 1, + 99 + ] }, "whisker_type": { "description": "Whisker type. Any numpy function will work.", - "enum": ["tukey", "min/max", "percentile"], + "enum": [ + "tukey", + "min/max", + "percentile" + ], "example": "tukey", "type": "string" } }, - "required": ["whisker_type"], + "required": [ + "whisker_type" + ], "type": "object" }, "ChartDataColumn": { @@ -849,12 +1095,17 @@ "properties": { "orientation": { "description": "Should cell values be calculated across the row or column.", - "enum": ["row", "column"], + "enum": [ + "row", + "column" + ], "example": "row", "type": "string" } }, - "required": ["orientation"], + "required": [ + "orientation" + ], "type": "object" }, "ChartDataDatasource": { @@ -866,7 +1117,6 @@ "type": { "description": "Datasource type", "enum": [ - "sl_table", "table", "dataset", "query", @@ -876,7 +1126,9 @@ "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "type": "object" }, "ChartDataExtras": { @@ -885,14 +1137,25 @@ "description": "HAVING clause to be added to aggregate queries using AND operator.", "type": "string" }, + "instant_time_comparison_range": { + "description": "This is only set using the new time comparison controls that is made available in some plugins behind the experimental feature flag.", + "nullable": true, + "type": "string" + }, "relative_end": { "description": "End time for relative time deltas. Default: `config[\"DEFAULT_RELATIVE_START_TIME\"]`", - "enum": ["today", "now"], + "enum": [ + "today", + "now" + ], "type": "string" }, "relative_start": { "description": "Start time for relative time deltas. Default: `config[\"DEFAULT_RELATIVE_START_TIME\"]`", - "enum": ["today", "now"], + "enum": [ + "today", + "now" + ], "type": "string" }, "time_grain_sqla": { @@ -916,12 +1179,7 @@ "1969-12-28T00:00:00Z/P1W", "1969-12-29T00:00:00Z/P1W", "P1W/1970-01-03T00:00:00Z", - "P1W/1970-01-04T00:00:00Z", - "PT2H", - "PT4H", - "PT8H", - "PT10H", - "PT12H" + "P1W/1970-01-04T00:00:00Z" ], "example": "P1D", "nullable": true, @@ -959,6 +1217,7 @@ ">=", "<=", "LIKE", + "NOT LIKE", "ILIKE", "IS NULL", "IS NOT NULL", @@ -973,11 +1232,18 @@ }, "val": { "description": "The value or values to compare against. Can be a string, integer, decimal, None or list, depending on the operator.", - "example": ["China", "France", "Japan"], + "example": [ + "China", + "France", + "Japan" + ], "nullable": true } }, - "required": ["col", "op"], + "required": [ + "col", + "op" + ], "type": "object" }, "ChartDataGeodeticParseOptionsSchema": { @@ -999,7 +1265,11 @@ "type": "string" } }, - "required": ["geodetic", "latitude", "longitude"], + "required": [ + "geodetic", + "latitude", + "longitude" + ], "type": "object" }, "ChartDataGeohashDecodeOptionsSchema": { @@ -1017,7 +1287,11 @@ "type": "string" } }, - "required": ["geohash", "latitude", "longitude"], + "required": [ + "geohash", + "latitude", + "longitude" + ], "type": "object" }, "ChartDataGeohashEncodeOptionsSchema": { @@ -1035,7 +1309,11 @@ "type": "string" } }, - "required": ["geohash", "latitude", "longitude"], + "required": [ + "geohash", + "latitude", + "longitude" + ], "type": "object" }, "ChartDataPivotOptionsSchema": { @@ -1099,8 +1377,10 @@ "geodetic_parse", "geohash_decode", "geohash_encode", + "histogram", "pivot", "prophet", + "rank", "rename", "resample", "rolling", @@ -1127,12 +1407,17 @@ } } }, - "groupby": ["country", "gender"] + "groupby": [ + "country", + "gender" + ] }, "type": "object" } }, - "required": ["operation"], + "required": [ + "operation" + ], "type": "object" }, "ChartDataProphetOptionsSchema": { @@ -1174,12 +1459,7 @@ "1969-12-28T00:00:00Z/P1W", "1969-12-29T00:00:00Z/P1W", "P1W/1970-01-03T00:00:00Z", - "P1W/1970-01-04T00:00:00Z", - "PT2H", - "PT4H", - "PT8H", - "PT10H", - "PT12H" + "P1W/1970-01-04T00:00:00Z" ], "example": "P1D", "type": "string" @@ -1193,7 +1473,11 @@ "example": false } }, - "required": ["confidence_interval", "periods", "time_grain"], + "required": [ + "confidence_interval", + "periods", + "time_grain" + ], "type": "object" }, "ChartDataQueryContextSchema": { @@ -1221,7 +1505,11 @@ "type": "array" }, "result_format": { - "enum": ["csv", "json", "xlsx"] + "enum": [ + "csv", + "json", + "xlsx" + ] }, "result_type": { "enum": [ @@ -1338,8 +1626,14 @@ "orderby": { "description": "Expects a list of lists where the first element is the column name which to sort by, and the second element is a boolean.", "example": [ - ["my_col_1", false], - ["my_col_2", true] + [ + "my_col_1", + false + ], + [ + "my_col_2", + true + ] ], "items": {}, "nullable": true, @@ -1604,7 +1898,7 @@ "type": "boolean" }, "owners": { - "$ref": "#/components/schemas/ChartDataRestApi.get.User" + "$ref": "#/components/schemas/ChartDataRestApi.get.AppleUser" }, "params": { "nullable": true, @@ -1636,6 +1930,26 @@ }, "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": { @@ -1664,26 +1978,14 @@ "type": "string" }, "type": { - "enum": [1, 2, 3, 4] - } - }, - "type": "object" - }, - "ChartDataRestApi.get.User": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" + "enum": [ + 1, + 2, + 3, + 4 + ] } }, - "required": ["first_name", "last_name"], "type": "object" }, "ChartDataRestApi.get_list": { @@ -1701,7 +2003,7 @@ "type": "string" }, "changed_by": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.User3" + "$ref": "#/components/schemas/ChartDataRestApi.get_list.User" }, "changed_by_name": { "readOnly": true @@ -1716,7 +2018,7 @@ "readOnly": true }, "created_by": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.User" + "$ref": "#/components/schemas/ChartDataRestApi.get_list.User1" }, "created_by_name": { "readOnly": true @@ -1767,10 +2069,10 @@ "type": "string" }, "last_saved_by": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.User2" + "$ref": "#/components/schemas/ChartDataRestApi.get_list.AppleUser" }, "owners": { - "$ref": "#/components/schemas/ChartDataRestApi.get_list.User1" + "$ref": "#/components/schemas/ChartDataRestApi.get_list.AppleUser1" }, "params": { "nullable": true, @@ -1804,6 +2106,46 @@ }, "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, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "ChartDataRestApi.get_list.Dashboard": { "properties": { "dashboard_title": { @@ -1828,7 +2170,9 @@ "type": "string" } }, - "required": ["table_name"], + "required": [ + "table_name" + ], "type": "object" }, "ChartDataRestApi.get_list.Tag": { @@ -1842,7 +2186,12 @@ "type": "string" }, "type": { - "enum": [1, 2, 3, 4] + "enum": [ + 1, + 2, + 3, + 4 + ] } }, "type": "object" @@ -1861,7 +2210,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "ChartDataRestApi.get_list.User1": { @@ -1878,41 +2230,13 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "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" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["first_name", "last_name"], - "type": "object" - }, - "ChartDataRestApi.post": { + "ChartDataRestApi.post": { "properties": { "cache_timeout": { "description": "Duration (in seconds) of the caching timeout for this chart. Note this defaults to the datasource/table timeout if undefined.", @@ -1948,7 +2272,6 @@ "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", "enum": [ - "sl_table", "table", "dataset", "query", @@ -1988,7 +2311,7 @@ "type": "string" }, "query_context_generation": { - "description": "The query context generation represents whether the query_contextis user generated or not so that it does not update user modfiedstate.", + "description": "The query context generation represents whether the query_contextis user generated or not so that it does not update user modifiedstate.", "nullable": true, "type": "boolean" }, @@ -2000,13 +2323,21 @@ }, "viz_type": { "description": "The type of chart visualization used.", - "example": ["bar", "area", "table"], + "example": [ + "bar", + "area", + "table" + ], "maxLength": 250, "minLength": 0, "type": "string" } }, - "required": ["datasource_id", "datasource_type", "slice_name"], + "required": [ + "datasource_id", + "datasource_type", + "slice_name" + ], "type": "object" }, "ChartDataRestApi.put": { @@ -2041,7 +2372,6 @@ "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", "enum": [ - "sl_table", "table", "dataset", "query", @@ -2082,7 +2412,7 @@ "type": "string" }, "query_context_generation": { - "description": "The query context generation represents whether the query_contextis user generated or not so that it does not update user modfiedstate.", + "description": "The query context generation represents whether the query_contextis user generated or not so that it does not update user modifiedstate.", "nullable": true, "type": "boolean" }, @@ -2095,13 +2425,18 @@ }, "tags": { "items": { - "$ref": "#/components/schemas/Tag" + "description": "Tags to be associated with the chart", + "type": "integer" }, "type": "array" }, "viz_type": { "description": "The type of chart visualization used.", - "example": ["bar", "area", "table"], + "example": [ + "bar", + "area", + "table" + ], "maxLength": 250, "minLength": 0, "nullable": true, @@ -2182,14 +2517,21 @@ "type": "integer" } }, - "required": ["rolling_type", "window"], + "required": [ + "rolling_type", + "window" + ], "type": "object" }, "ChartDataSelectOptionsSchema": { "properties": { "columns": { "description": "Columns which to select from the input data, in the desired order. If columns are renamed, the original column name should be referenced here.", - "example": ["country", "gender", "age"], + "example": [ + "country", + "gender", + "age" + ], "items": { "type": "string" }, @@ -2197,7 +2539,9 @@ }, "exclude": { "description": "Columns to exclude from selection.", - "example": ["my_temp_column"], + "example": [ + "my_temp_column" + ], "items": { "type": "string" }, @@ -2242,7 +2586,9 @@ "type": "object" } }, - "required": ["columns"], + "required": [ + "columns" + ], "type": "object" }, "ChartEntityResponseSchema": { @@ -2372,7 +2718,7 @@ "type": "boolean" }, "owners": { - "$ref": "#/components/schemas/ChartRestApi.get.User" + "$ref": "#/components/schemas/ChartRestApi.get.AppleUser" }, "params": { "nullable": true, @@ -2404,6 +2750,26 @@ }, "type": "object" }, + "ChartRestApi.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" + }, "ChartRestApi.get.Dashboard": { "properties": { "dashboard_title": { @@ -2432,26 +2798,14 @@ "type": "string" }, "type": { - "enum": [1, 2, 3, 4] - } - }, - "type": "object" - }, - "ChartRestApi.get.User": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" + "enum": [ + 1, + 2, + 3, + 4 + ] } }, - "required": ["first_name", "last_name"], "type": "object" }, "ChartRestApi.get_list": { @@ -2469,7 +2823,7 @@ "type": "string" }, "changed_by": { - "$ref": "#/components/schemas/ChartRestApi.get_list.User3" + "$ref": "#/components/schemas/ChartRestApi.get_list.User" }, "changed_by_name": { "readOnly": true @@ -2484,7 +2838,7 @@ "readOnly": true }, "created_by": { - "$ref": "#/components/schemas/ChartRestApi.get_list.User" + "$ref": "#/components/schemas/ChartRestApi.get_list.User1" }, "created_by_name": { "readOnly": true @@ -2535,10 +2889,10 @@ "type": "string" }, "last_saved_by": { - "$ref": "#/components/schemas/ChartRestApi.get_list.User2" + "$ref": "#/components/schemas/ChartRestApi.get_list.AppleUser" }, "owners": { - "$ref": "#/components/schemas/ChartRestApi.get_list.User1" + "$ref": "#/components/schemas/ChartRestApi.get_list.AppleUser1" }, "params": { "nullable": true, @@ -2572,6 +2926,46 @@ }, "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, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, "ChartRestApi.get_list.Dashboard": { "properties": { "dashboard_title": { @@ -2596,7 +2990,9 @@ "type": "string" } }, - "required": ["table_name"], + "required": [ + "table_name" + ], "type": "object" }, "ChartRestApi.get_list.Tag": { @@ -2610,7 +3006,12 @@ "type": "string" }, "type": { - "enum": [1, 2, 3, 4] + "enum": [ + 1, + 2, + 3, + 4 + ] } }, "type": "object" @@ -2629,7 +3030,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "ChartRestApi.get_list.User1": { @@ -2646,38 +3050,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], - "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" - }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "ChartRestApi.post": { @@ -2716,7 +3092,6 @@ "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", "enum": [ - "sl_table", "table", "dataset", "query", @@ -2756,7 +3131,7 @@ "type": "string" }, "query_context_generation": { - "description": "The query context generation represents whether the query_contextis user generated or not so that it does not update user modfiedstate.", + "description": "The query context generation represents whether the query_contextis user generated or not so that it does not update user modifiedstate.", "nullable": true, "type": "boolean" }, @@ -2768,13 +3143,21 @@ }, "viz_type": { "description": "The type of chart visualization used.", - "example": ["bar", "area", "table"], + "example": [ + "bar", + "area", + "table" + ], "maxLength": 250, "minLength": 0, "type": "string" } }, - "required": ["datasource_id", "datasource_type", "slice_name"], + "required": [ + "datasource_id", + "datasource_type", + "slice_name" + ], "type": "object" }, "ChartRestApi.put": { @@ -2809,7 +3192,6 @@ "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", "enum": [ - "sl_table", "table", "dataset", "query", @@ -2850,7 +3232,7 @@ "type": "string" }, "query_context_generation": { - "description": "The query context generation represents whether the query_contextis user generated or not so that it does not update user modfiedstate.", + "description": "The query context generation represents whether the query_contextis user generated or not so that it does not update user modifiedstate.", "nullable": true, "type": "boolean" }, @@ -2863,13 +3245,18 @@ }, "tags": { "items": { - "$ref": "#/components/schemas/Tag" + "description": "Tags to be associated with the chart", + "type": "integer" }, "type": "array" }, "viz_type": { "description": "The type of chart visualization used.", - "example": ["bar", "area", "table"], + "example": [ + "bar", + "area", + "table" + ], "maxLength": 250, "minLength": 0, "nullable": true, @@ -2878,11 +3265,79 @@ }, "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": { - "created_by": { + "changed_by": { "$ref": "#/components/schemas/CssTemplateRestApi.get.User" }, + "changed_on_delta_humanized": { + "readOnly": true + }, + "created_by": { + "$ref": "#/components/schemas/CssTemplateRestApi.get.User1" + }, "css": { "nullable": true, "type": "string" @@ -2912,19 +3367,42 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "CssTemplateRestApi.get.User1": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "CssTemplateRestApi.get_list": { "properties": { "changed_by": { - "$ref": "#/components/schemas/CssTemplateRestApi.get_list.User1" + "$ref": "#/components/schemas/CssTemplateRestApi.get_list.User" }, "changed_on_delta_humanized": { "readOnly": true }, "created_by": { - "$ref": "#/components/schemas/CssTemplateRestApi.get_list.User" + "$ref": "#/components/schemas/CssTemplateRestApi.get_list.User1" }, "created_on": { "format": "date-time", @@ -2960,7 +3438,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "CssTemplateRestApi.get_list.User1": { @@ -2977,7 +3458,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "CssTemplateRestApi.post": { @@ -3008,31 +3492,21 @@ }, "type": "object" }, - "DashboardNativeFiltersConfigUpdateSchema": { + "DashboardCacheScreenshotResponseSchema": { "properties": { - "deleted": { - "description": "List of filter ids to delete", - "items": { - "type": "integer" - }, - "type": "array" + "cache_key": { + "description": "The cache key", + "type": "string" }, - "modified": { - "description": "List of filter objects to update", - "items": { - "type": "object" - }, - "type": "array" + "dashboard_url": { + "description": "The url to render the dashboard", + "type": "string" }, - "reordered": { - "description": "List of filter ids in the new order", - "items": { - "type": "integer" - }, - "type": "array" + "image_url": { + "description": "The url to fetch the screenshot", + "type": "string" } }, - "required": ["deleted", "modified", "reordered"], "type": "object" }, "DashboardCopySchema": { @@ -3057,17 +3531,28 @@ "type": "string" } }, - "required": ["json_metadata"], + "required": [ + "json_metadata" + ], "type": "object" }, "DashboardDatasetSchema": { "properties": { + "always_filter_main_dttm": { + "type": "boolean" + }, "cache_timeout": { "type": "integer" }, "column_formats": { "type": "object" }, + "column_names": { + "items": { + "type": "string" + }, + "type": "array" + }, "column_types": { "items": { "type": "integer" @@ -3080,12 +3565,6 @@ }, "type": "array" }, - "column_names": { - "items": { - "type": "string" - }, - "type": "array" - }, "currency_formats": { "type": "object" }, @@ -3140,6 +3619,9 @@ "name": { "type": "string" }, + "normalize_columns": { + "type": "boolean" + }, "offset": { "type": "integer" }, @@ -3233,6 +3715,12 @@ }, "type": "array" }, + "created_by": { + "$ref": "#/components/schemas/User" + }, + "created_on_delta_humanized": { + "type": "string" + }, "css": { "description": "Override CSS for the dashboard.", "type": "string" @@ -3276,7 +3764,7 @@ }, "tags": { "items": { - "$ref": "#/components/schemas/Tag1" + "$ref": "#/components/schemas/Tag" }, "type": "array" }, @@ -3340,7 +3828,7 @@ "type": "string" }, "changed_by": { - "$ref": "#/components/schemas/DashboardRestApi.get_list.User2" + "$ref": "#/components/schemas/DashboardRestApi.get_list.User" }, "changed_by_name": { "readOnly": true @@ -3352,7 +3840,7 @@ "readOnly": true }, "created_by": { - "$ref": "#/components/schemas/DashboardRestApi.get_list.User" + "$ref": "#/components/schemas/DashboardRestApi.get_list.User1" }, "created_on_delta_humanized": { "readOnly": true @@ -3377,7 +3865,7 @@ "type": "string" }, "owners": { - "$ref": "#/components/schemas/DashboardRestApi.get_list.User1" + "$ref": "#/components/schemas/DashboardRestApi.get_list.AppleUser" }, "position_json": { "nullable": true, @@ -3410,53 +3898,63 @@ }, "type": "object" }, - "DashboardRestApi.get_list.Role": { + "DashboardRestApi.get_list.AppleUser": { "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, "id": { "type": "integer" }, - "name": { + "last_name": { "maxLength": 64, "type": "string" } }, - "required": ["name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "DashboardRestApi.get_list.Tag": { + "DashboardRestApi.get_list.Role": { "properties": { "id": { "type": "integer" }, "name": { - "maxLength": 250, - "nullable": true, + "maxLength": 64, "type": "string" - }, - "type": { - "enum": [1, 2, 3, 4] } }, + "required": [ + "name" + ], "type": "object" }, - "DashboardRestApi.get_list.User": { + "DashboardRestApi.get_list.Tag": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, "id": { "type": "integer" }, - "last_name": { - "maxLength": 64, + "name": { + "maxLength": 250, + "nullable": true, "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] } }, - "required": ["first_name", "last_name"], "type": "object" }, - "DashboardRestApi.get_list.User1": { + "DashboardRestApi.get_list.User": { "properties": { "first_name": { "maxLength": 64, @@ -3470,10 +3968,13 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "DashboardRestApi.get_list.User2": { + "DashboardRestApi.get_list.User1": { "properties": { "first_name": { "maxLength": 64, @@ -3487,7 +3988,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DashboardRestApi.post": { @@ -3626,12 +4130,23 @@ "minLength": 0, "nullable": true, "type": "string" + }, + "tags": { + "items": { + "description": "Tags to be associated with the dashboard", + "nullable": true, + "type": "integer" + }, + "type": "array" } }, "type": "object" }, "Database": { "properties": { + "allow_multi_catalog": { + "type": "boolean" + }, "allows_cost_estimate": { "type": "boolean" }, @@ -3719,15 +4234,14 @@ "type": "string" }, "engine_information": { - "additionalProperties": {}, - "type": "object" + "$ref": "#/components/schemas/EngineInformation" }, "expose_in_sqllab": { "description": "Expose this database to SQLLab", "type": "boolean" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", "type": "string" }, "force_ctas_schema": { @@ -3943,7 +4457,9 @@ "type": "string" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "DatabaseRestApi.get_list": { @@ -3964,6 +4480,9 @@ "nullable": true, "type": "boolean" }, + "allow_multi_catalog": { + "readOnly": true + }, "allow_run_async": { "nullable": true, "type": "boolean" @@ -3980,6 +4499,9 @@ "backend": { "readOnly": true }, + "changed_by": { + "$ref": "#/components/schemas/DatabaseRestApi.get_list.User" + }, "changed_on": { "format": "date-time", "nullable": true, @@ -3989,7 +4511,7 @@ "readOnly": true }, "created_by": { - "$ref": "#/components/schemas/DatabaseRestApi.get_list.User" + "$ref": "#/components/schemas/DatabaseRestApi.get_list.User1" }, "database_name": { "maxLength": 250, @@ -3998,6 +4520,9 @@ "disable_data_preview": { "readOnly": true }, + "disable_drill_to_detail": { + "readOnly": true + }, "engine_information": { "readOnly": true }, @@ -4026,7 +4551,9 @@ "type": "string" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "DatabaseRestApi.get_list.User": { @@ -4040,7 +4567,27 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "DatabaseRestApi.get_list.User1": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DatabaseRestApi.post": { @@ -4073,7 +4620,10 @@ "configuration_method": { "default": "sqlalchemy_form", "description": "Configuration_method is used on the frontend to inform the backend whether to explode parameters or to provide only a sqlalchemy_uri.", - "enum": ["sqlalchemy_form", "dynamic_form"] + "enum": [ + "sqlalchemy_form", + "dynamic_form" + ] }, "database_name": { "description": "A database name to identify this connection.", @@ -4100,7 +4650,7 @@ "type": "string" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", "type": "string" }, "force_ctas_schema": { @@ -4151,7 +4701,9 @@ "type": "string" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "DatabaseRestApi.put": { @@ -4184,7 +4736,10 @@ "configuration_method": { "default": "sqlalchemy_form", "description": "Configuration_method is used on the frontend to inform the backend whether to explode parameters or to provide only a sqlalchemy_uri.", - "enum": ["sqlalchemy_form", "dynamic_form"] + "enum": [ + "sqlalchemy_form", + "dynamic_form" + ] }, "database_name": { "description": "A database name to identify this connection.", @@ -4212,7 +4767,7 @@ "type": "string" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", "type": "string" }, "force_ctas_schema": { @@ -4327,7 +4882,10 @@ "configuration_method": { "default": "sqlalchemy_form", "description": "Configuration_method is used on the frontend to inform the backend whether to explode parameters or to provide only a sqlalchemy_uri.", - "enum": ["sqlalchemy_form", "dynamic_form"] + "enum": [ + "sqlalchemy_form", + "dynamic_form" + ] }, "database_name": { "description": "A database name to identify this connection.", @@ -4347,7 +4905,7 @@ "type": "string" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", "type": "string" }, "impersonate_user": { @@ -4397,7 +4955,10 @@ }, "configuration_method": { "description": "Configuration_method is used on the frontend to inform the backend whether to explode parameters or to provide only a sqlalchemy_uri.", - "enum": ["sqlalchemy_form", "dynamic_form"] + "enum": [ + "sqlalchemy_form", + "dynamic_form" + ] }, "database_name": { "description": "A database name to identify this connection.", @@ -4416,7 +4977,7 @@ "type": "string" }, "extra": { - "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.

", + "description": "

JSON string containing extra configuration elements.
1. The engine_params object gets unpacked into the sqlalchemy.create_engine call, while the metadata_params gets unpacked into the sqlalchemy.MetaData call.
2. The metadata_cache_timeout is a cache timeout setting in seconds for metadata fetch of this database. Specify it as \"metadata_cache_timeout\": {\"schema_cache_timeout\": 600, \"table_cache_timeout\": 600}. If unset, cache will not be enabled for the functionality. A timeout of 0 indicates that the cache never expires.
3. The schemas_allowed_for_file_upload is a comma separated list of schemas that CSVs are allowed to upload to. Specify it as \"schemas_allowed_for_file_upload\": [\"public\", \"csv_upload\"]. If database flavor does not support schema or any schema is allowed to be accessed, just leave the list empty
4. The version field is a string specifying the this db's version. This should be used with Presto DBs so that the syntax is correct
5. The allows_virtual_table_explore field is a boolean specifying whether or not the Explore button in SQL Lab results is shown.
6. The disable_data_preview field is a boolean specifying whether or not data preview queries will be run when fetching table metadata in SQL Lab.7. The disable_drill_to_detail field is a boolean specifying whether or notdrill to detail is disabled for the database.8. The allow_multi_catalog indicates if the database allows changing the default catalog when running queries and creating datasets.

", "type": "string" }, "id": { @@ -4446,7 +5007,10 @@ "type": "string" } }, - "required": ["configuration_method", "engine"], + "required": [ + "configuration_method", + "engine" + ], "type": "object" }, "Dataset": { @@ -4636,7 +5200,10 @@ "type": "string" } }, - "required": ["db_name", "table_name"], + "required": [ + "db_name", + "table_name" + ], "type": "object" }, "DatasetCacheWarmUpResponseSchema": { @@ -4730,7 +5297,9 @@ "type": "string" } }, - "required": ["column_name"], + "required": [ + "column_name" + ], "type": "object" }, "DatasetColumnsRestApi.get": { @@ -4776,7 +5345,10 @@ "type": "string" } }, - "required": ["base_model_id", "table_name"], + "required": [ + "base_model_id", + "table_name" + ], "type": "object" }, "DatasetMetricRestApi.get": { @@ -4864,7 +5436,10 @@ "type": "string" } }, - "required": ["expression", "metric_name"], + "required": [ + "expression", + "metric_name" + ], "type": "object" }, "DatasetRelatedChart": { @@ -4943,12 +5518,21 @@ }, "DatasetRestApi.get": { "properties": { + "always_filter_main_dttm": { + "nullable": true, + "type": "boolean" + }, "cache_timeout": { "nullable": true, "type": "integer" }, + "catalog": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, "changed_by": { - "$ref": "#/components/schemas/DatasetRestApi.get.User2" + "$ref": "#/components/schemas/DatasetRestApi.get.User1" }, "changed_on": { "format": "date-time", @@ -5034,6 +5618,10 @@ "name": { "readOnly": true }, + "normalize_columns": { + "nullable": true, + "type": "boolean" + }, "offset": { "nullable": true, "type": "integer" @@ -5042,7 +5630,7 @@ "readOnly": true }, "owners": { - "$ref": "#/components/schemas/DatasetRestApi.get.User1" + "$ref": "#/components/schemas/DatasetRestApi.get.AppleUser" }, "schema": { "maxLength": 255, @@ -5077,11 +5665,39 @@ "readOnly": true } }, - "required": ["columns", "database", "metrics", "table_name"], + "required": [ + "columns", + "database", + "metrics", + "table_name" + ], + "type": "object" + }, + "DatasetRestApi.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" }, "DatasetRestApi.get.Database": { "properties": { + "allow_multi_catalog": { + "readOnly": true + }, "backend": { "readOnly": true }, @@ -5093,7 +5709,9 @@ "type": "integer" } }, - "required": ["database_name"], + "required": [ + "database_name" + ], "type": "object" }, "DatasetRestApi.get.SqlMetric": { @@ -5151,7 +5769,10 @@ "type": "string" } }, - "required": ["expression", "metric_name"], + "required": [ + "expression", + "metric_name" + ], "type": "object" }, "DatasetRestApi.get.TableColumn": { @@ -5229,7 +5850,9 @@ "type": "string" } }, - "required": ["column_name"], + "required": [ + "column_name" + ], "type": "object" }, "DatasetRestApi.get.User": { @@ -5243,7 +5866,10 @@ "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DatasetRestApi.get.User1": { @@ -5252,35 +5878,26 @@ "maxLength": 64, "type": "string" }, - "id": { - "type": "integer" - }, "last_name": { "maxLength": 64, "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "DatasetRestApi.get.User2": { + "DatasetRestApi.get_list": { "properties": { - "first_name": { - "maxLength": 64, + "catalog": { + "maxLength": 256, + "nullable": true, "type": "string" }, - "last_name": { - "maxLength": 64, - "type": "string" - } - }, - "required": ["first_name", "last_name"], - "type": "object" - }, - "DatasetRestApi.get_list": { - "properties": { "changed_by": { - "$ref": "#/components/schemas/DatasetRestApi.get_list.User1" + "$ref": "#/components/schemas/DatasetRestApi.get_list.User" }, "changed_by_name": { "readOnly": true @@ -5319,7 +5936,7 @@ "readOnly": true }, "owners": { - "$ref": "#/components/schemas/DatasetRestApi.get_list.User" + "$ref": "#/components/schemas/DatasetRestApi.get_list.AppleUser" }, "schema": { "maxLength": 255, @@ -5335,55 +5952,79 @@ "type": "string" } }, - "required": ["database", "table_name"], + "required": [ + "database", + "table_name" + ], "type": "object" }, - "DatasetRestApi.get_list.Database": { + "DatasetRestApi.get_list.AppleUser": { "properties": { - "database_name": { - "maxLength": 250, + "first_name": { + "maxLength": 64, "type": "string" }, "id": { "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" } }, - "required": ["database_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, - "DatasetRestApi.get_list.User": { + "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"], + "required": [ + "database_name" + ], "type": "object" }, - "DatasetRestApi.get_list.User1": { + "DatasetRestApi.get_list.User": { "properties": { "first_name": { "maxLength": 64, "type": "string" }, + "id": { + "type": "integer" + }, "last_name": { "maxLength": 64, "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "first_name", + "last_name" + ], "type": "object" }, "DatasetRestApi.post": { "properties": { + "always_filter_main_dttm": { + "default": false, + "type": "boolean" + }, + "catalog": { + "maxLength": 250, + "minLength": 0, + "nullable": true, + "type": "string" + }, "database": { "type": "integer" }, @@ -5395,6 +6036,10 @@ "nullable": true, "type": "boolean" }, + "normalize_columns": { + "default": false, + "type": "boolean" + }, "owners": { "items": { "type": "integer" @@ -5417,15 +6062,28 @@ "type": "string" } }, - "required": ["database", "table_name"], + "required": [ + "database", + "table_name" + ], "type": "object" }, "DatasetRestApi.put": { "properties": { + "always_filter_main_dttm": { + "default": false, + "type": "boolean" + }, "cache_timeout": { "nullable": true, "type": "integer" }, + "catalog": { + "maxLength": 250, + "minLength": 0, + "nullable": true, + "type": "string" + }, "columns": { "items": { "$ref": "#/components/schemas/DatasetColumnsPut" @@ -5479,6 +6137,10 @@ }, "type": "array" }, + "normalize_columns": { + "nullable": true, + "type": "boolean" + }, "offset": { "nullable": true, "type": "integer" @@ -5514,6 +6176,11 @@ }, "Datasource": { "properties": { + "catalog": { + "description": "Datasource catalog", + "nullable": true, + "type": "string" + }, "database_name": { "description": "Datasource name", "type": "string" @@ -5525,7 +6192,6 @@ "datasource_type": { "description": "The type of dataset/datasource identified on `datasource_id`.", "enum": [ - "sl_table", "table", "dataset", "query", @@ -5539,7 +6205,9 @@ "type": "string" } }, - "required": ["datasource_type"], + "required": [ + "datasource_type" + ], "type": "object" }, "DistincResponseSchema": { @@ -5575,7 +6243,9 @@ "type": "array" } }, - "required": ["allowed_domains"], + "required": [ + "allowed_domains" + ], "type": "object" }, "EmbeddedDashboardResponseSchema": { @@ -5638,18 +6308,44 @@ }, "type": "object" }, - "EstimateQueryCostSchema": { + "EngineInformation": { "properties": { - "database_id": { - "description": "The database id", - "type": "integer" + "disable_ssh_tunneling": { + "description": "SSH tunnel is not available to the database", + "type": "boolean" }, - "schema": { - "description": "The database schema", - "nullable": true, - "type": "string" + "supports_dynamic_catalog": { + "description": "The database supports multiple catalogs in a single connection", + "type": "boolean" }, - "sql": { + "supports_file_upload": { + "description": "Users can upload files to the database", + "type": "boolean" + }, + "supports_oauth2": { + "description": "The database supports OAuth2", + "type": "boolean" + } + }, + "type": "object" + }, + "EstimateQueryCostSchema": { + "properties": { + "catalog": { + "description": "The database catalog", + "nullable": true, + "type": "string" + }, + "database_id": { + "description": "The database id", + "type": "integer" + }, + "schema": { + "description": "The database schema", + "nullable": true, + "type": "string" + }, + "sql": { "description": "The SQL query to estimate", "type": "string" }, @@ -5658,11 +6354,124 @@ "type": "object" } }, - "required": ["database_id", "sql"], + "required": [ + "database_id", + "sql" + ], + "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": { + "nullable": true, + "type": "string" + }, "client_id": { "nullable": true, "type": "string" @@ -5718,7 +6527,10 @@ "type": "string" } }, - "required": ["database_id", "sql"], + "required": [ + "database_id", + "sql" + ], "type": "object" }, "ExploreContextSchema": { @@ -5756,7 +6568,9 @@ "type": "array" } }, - "required": ["formData"], + "required": [ + "formData" + ], "type": "object" }, "FormDataPostSchema": { @@ -5772,7 +6586,6 @@ "datasource_type": { "description": "The datasource type", "enum": [ - "sl_table", "table", "dataset", "query", @@ -5786,7 +6599,11 @@ "type": "string" } }, - "required": ["datasource_id", "datasource_type", "form_data"], + "required": [ + "datasource_id", + "datasource_type", + "form_data" + ], "type": "object" }, "FormDataPutSchema": { @@ -5802,7 +6619,6 @@ "datasource_type": { "description": "The datasource type", "enum": [ - "sl_table", "table", "dataset", "query", @@ -5816,7 +6632,11 @@ "type": "string" } }, - "required": ["datasource_id", "datasource_type", "form_data"], + "required": [ + "datasource_id", + "datasource_type", + "form_data" + ], "type": "object" }, "GetFavStarIdsSchema": { @@ -5833,10 +6653,25 @@ }, "GetOrCreateDatasetSchema": { "properties": { + "always_filter_main_dttm": { + "default": false, + "type": "boolean" + }, + "catalog": { + "description": "The catalog the table belongs to", + "maxLength": 250, + "minLength": 0, + "nullable": true, + "type": "string" + }, "database_id": { "description": "ID of database table belongs to", "type": "integer" }, + "normalize_columns": { + "default": false, + "type": "boolean" + }, "schema": { "description": "The schema the table belongs to", "maxLength": 250, @@ -5853,7 +6688,10 @@ "type": "string" } }, - "required": ["database_id", "table_name"], + "required": [ + "database_id", + "table_name" + ], "type": "object" }, "GuestTokenCreate": { @@ -5874,1435 +6712,2080 @@ "$ref": "#/components/schemas/User2" } }, - "required": ["resources", "rls"], + "required": [ + "resources", + "rls" + ], "type": "object" }, - "LogRestApi.get": { + "IASLoginTokenRequestSchema": { "properties": { - "action": { - "maxLength": 512, + "access_token": { + "description": "IAS Access token. Can be requested by adding `token` to the `responseTypes`.", "nullable": true, "type": "string" }, - "dashboard_id": { - "nullable": true, - "type": "integer" - }, - "dttm": { - "format": "date-time", + "client_id": { + "description": "IAS client id. Only needed if `refresh_token` is provided.", "nullable": true, "type": "string" }, - "duration_ms": { - "nullable": true, - "type": "integer" - }, - "json": { + "client_secret": { + "description": "IAS client secret. Only needed if `refresh_token` and `client_id` is provided.", "nullable": true, "type": "string" }, - "referrer": { - "maxLength": 1024, - "nullable": true, + "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" }, - "slice_id": { - "nullable": true, - "type": "integer" - }, - "user": { - "$ref": "#/components/schemas/LogRestApi.get.User" - }, - "user_id": { + "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.", "nullable": true, - "type": "integer" + "type": "string" } }, + "required": [ + "id_token" + ], "type": "object" }, - "LogRestApi.get.User": { + "IASLoginTokenResponseSchema": { "properties": { - "username": { - "maxLength": 64, + "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": ["username"], + "required": [ + "access_token" + ], "type": "object" }, - "LogRestApi.get_list": { + "IASProfileResponse": { "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, + "client_id": { + "description": "The client id", "type": "string" }, - "referrer": { - "maxLength": 1024, - "nullable": true, + "profile": { + "description": "The IAS profile", "type": "string" }, - "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, + "scope": { + "description": "The scope of the client", "type": "string" } }, - "required": ["username"], + "required": [ + "client_id", + "profile" + ], "type": "object" }, - "LogRestApi.post": { + "IASProfilesResponseSchema": { "properties": { - "id": { - "type": "integer" + "result": { + "description": "A list of all available IAS profiles", + "items": { + "$ref": "#/components/schemas/IASProfileResponse" + }, + "type": "array" } }, "type": "object" }, - "LogRestApi.put": { + "IASTokenResponse": { "properties": { - "action": { - "maxLength": 512, - "nullable": true, + "access_token": { + "description": "The access token", "type": "string" }, - "dttm": { - "format": "date-time", - "nullable": true, - "type": "string" + "has_client_credentials": { + "description": "Are the original client credentials available or not", + "type": "boolean" }, - "json": { - "nullable": true, + "has_refresh_token": { + "description": "Is there a refresh token available or not", + "type": "boolean" + }, + "ias_profile": { + "description": "The IAS profile", "type": "string" }, - "user": { - "nullable": true + "id_token": { + "description": "The id token", + "type": "string" } }, + "required": [ + "has_client_credentials", + "has_refresh_token", + "ias_profile", + "id_token" + ], "type": "object" }, - "QueryExecutionResponseSchema": { + "IASTokensResponseSchema": { "properties": { - "columns": { - "items": { - "type": "object" - }, - "type": "array" - }, - "data": { - "items": { - "type": "object" - }, - "type": "array" - }, - "expanded_columns": { - "items": { - "type": "object" - }, - "type": "array" - }, - "query": { - "$ref": "#/components/schemas/QueryResult" - }, - "query_id": { - "type": "integer" - }, - "selected_columns": { + "result": { + "description": "A list of all requested tokens", "items": { - "type": "object" + "$ref": "#/components/schemas/IASTokenResponse" }, "type": "array" - }, - "status": { - "type": "string" } }, "type": "object" }, - "QueryRestApi.get": { + "ImportV1Database": { "properties": { - "changed_on": { - "format": "date-time", - "nullable": true, - "type": "string" + "allow_csv_upload": { + "type": "boolean" }, - "client_id": { - "maxLength": 11, - "type": "string" + "allow_ctas": { + "type": "boolean" }, - "database": { - "$ref": "#/components/schemas/QueryRestApi.get.Database" + "allow_cvas": { + "type": "boolean" }, - "end_result_backend_time": { - "nullable": true, - "type": "number" + "allow_dml": { + "type": "boolean" }, - "end_time": { - "nullable": true, - "type": "number" + "allow_run_async": { + "type": "boolean" }, - "error_message": { + "cache_timeout": { "nullable": true, + "type": "integer" + }, + "database_name": { "type": "string" }, - "executed_sql": { + "expose_in_sqllab": { + "type": "boolean" + }, + "external_url": { "nullable": true, "type": "string" }, - "id": { - "type": "integer" + "extra": { + "$ref": "#/components/schemas/ImportV1DatabaseExtra" }, - "limit": { - "nullable": true, - "type": "integer" + "impersonate_user": { + "type": "boolean" }, - "progress": { + "is_managed_externally": { "nullable": true, - "type": "integer" + "type": "boolean" }, - "results_key": { - "maxLength": 64, + "password": { "nullable": true, "type": "string" }, - "rows": { - "nullable": true, - "type": "integer" + "sqlalchemy_uri": { + "type": "string" }, - "schema": { - "maxLength": 256, - "nullable": true, + "ssh_tunnel": { + "allOf": [ + { + "$ref": "#/components/schemas/DatabaseSSHTunnel" + } + ], + "nullable": true + }, + "uuid": { + "format": "uuid", "type": "string" }, - "select_as_cta": { - "nullable": true, + "version": { + "type": "string" + } + }, + "required": [ + "database_name", + "sqlalchemy_uri", + "uuid", + "version" + ], + "type": "object" + }, + "ImportV1DatabaseExtra": { + "properties": { + "allow_multi_catalog": { "type": "boolean" }, - "select_as_cta_used": { - "nullable": true, + "allows_virtual_table_explore": { "type": "boolean" }, - "select_sql": { - "nullable": true, - "type": "string" + "cancel_query_on_windows_unload": { + "type": "boolean" }, - "sql": { - "nullable": true, - "type": "string" + "cost_estimate_enabled": { + "type": "boolean" }, - "sql_editor_id": { - "maxLength": 256, - "nullable": true, - "type": "string" + "disable_data_preview": { + "type": "boolean" }, - "start_running_time": { - "nullable": true, - "type": "number" + "disable_drill_to_detail": { + "type": "boolean" }, - "start_time": { - "nullable": true, - "type": "number" + "engine_params": { + "additionalProperties": {}, + "type": "object" }, - "status": { - "maxLength": 16, - "nullable": true, - "type": "string" + "metadata_cache_timeout": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" }, - "tab_name": { - "maxLength": 256, - "nullable": true, - "type": "string" + "metadata_params": { + "additionalProperties": {}, + "type": "object" }, - "tmp_schema_name": { - "maxLength": 256, - "nullable": true, - "type": "string" + "schemas_allowed_for_csv_upload": { + "items": { + "type": "string" + }, + "type": "array" }, - "tmp_table_name": { - "maxLength": 256, + "version": { "nullable": true, "type": "string" - }, - "tracking_url": { - "readOnly": true } }, - "required": ["client_id", "database"], "type": "object" }, - "QueryRestApi.get.Database": { + "LakehouseCatalog": { "properties": { - "id": { + "database_id": { + "description": "The numerical id of the database", "type": "integer" - } - }, - "type": "object" - }, - "QueryRestApi.get_list": { - "properties": { - "changed_on": { - "format": "date-time", - "type": "string" - }, - "database": { - "$ref": "#/components/schemas/Database1" - }, - "end_time": { - "type": "number" }, - "executed_sql": { + "database_name": { + "description": "The name of the database", "type": "string" }, "id": { + "description": "The numerical id of the catalog", "type": "integer" }, - "rows": { - "type": "integer" - }, - "schema": { + "name": { + "description": "The name of the catalog", "type": "string" }, - "sql": { + "sqlalchemy_uri": { + "description": "The SQLAlchemy URI", "type": "string" + } + }, + "type": "object" + }, + "LakehouseConnectRequestSchema": { + "properties": { + "catalogs": { + "description": "A list of catalogs to connect to. If empty or undefined, connect all available catalogs.", + "example": [ + "my_catalog" + ], + "items": { + "type": "string" + }, + "nullable": true, + "type": "array" }, - "sql_tables": { - "readOnly": true + "database_names": { + "description": "Custom catalog-database name mappings. If undefined, the default naming convention will be used", + "example": { + "my_catalog": "my_database" + }, + "nullable": true, + "type": "object" }, - "start_time": { - "type": "number" + "dry_run": { + "description": "Should the task be executed in dry run mode. Useful for testing.", + "example": false, + "type": "boolean" }, - "status": { + "engine_type": { + "description": "The type of the engine (only trino is currently supported)", + "enum": [ + "trino" + ], + "example": "trino", "type": "string" }, - "tab_name": { + "engine_url": { + "description": "The URL to the engine", + "example": "https://myengine.corp.apple.com", "type": "string" }, - "tmp_table_name": { + "environment": { + "description": "Prod or Int", + "enum": [ + "int", + "prod" + ], + "example": "int", "type": "string" }, - "tracking_url": { + "name": { + "description": "The name of the Lakehouse (subject to change over time). If left undefined, use lakehouse id", + "example": "My Lakehouse", + "nullable": true, "type": "string" }, - "user": { - "$ref": "#/components/schemas/User" + "superset_url": { + "description": "The URL of the Superset instance connecting to", + "example": "http://localhost:8088", + "type": "string" } }, + "required": [ + "engine_type", + "engine_url", + "environment", + "superset_url" + ], "type": "object" }, - "QueryRestApi.post": { + "LakehouseConnectResponseSchema": { "properties": { - "id": { - "type": "integer" + "task_id": { + "description": "The id of the connection task", + "type": "string" } }, "type": "object" }, - "QueryRestApi.put": { + "LakehouseConnectResultResponseSchema": { "properties": { - "id": { - "type": "integer" + "existing_catalogs": { + "description": "A list of connected catalogs before the connect operation", + "items": { + "description": "Catalogs", + "items": { + "$ref": "#/components/schemas/LakehouseCatalog" + }, + "type": "array" + }, + "type": "array" + }, + "lakehouse": { + "allOf": [ + { + "$ref": "#/components/schemas/LakehouseGetResponseSchema" + } + ], + "description": "The connected Lakehouse", + "nullable": true + }, + "message": { + "description": "A message to provide additional context on what has happened", + "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" + }, + "status": { + "description": "The status of the task", + "enum": [ + "scheduled", + "running", + "completed", + "failed", + "reconnect_failed", + "cancelled" + ], + "type": "string" } }, + "required": [ + "lakehouse" + ], "type": "object" }, - "QueryResult": { + "LakehouseConnectStatusResponseSchema": { "properties": { - "changed_on": { - "format": "date-time", + "message": { + "description": "A message to provide additional context on what has happened", "type": "string" }, - "ctas": { - "type": "boolean" - }, - "db": { + "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" }, - "dbId": { - "type": "integer" - }, - "endDttm": { - "type": "number" - }, - "errorMessage": { + "schema": { + "description": "The schema", "nullable": true, "type": "string" }, - "executedSql": { + "sql": { + "description": "The virtual dataset query", "type": "string" - }, - "extra": { - "type": "object" - }, - "id": { + } + }, + "required": [ + "name", + "sql" + ], + "type": "object" + }, + "LakehouseDatasetRequestSchema": { + "properties": { + "catalog": { + "description": "The catalog. If left empty, uses an arbitrary connected catalog.", + "nullable": true, "type": "string" }, - "limit": { - "type": "integer" - }, - "limitingFactor": { + "lakehouse_id": { + "description": "Deprecated, not used for anything", "type": "string" }, - "progress": { - "type": "integer" - }, - "queryId": { - "type": "integer" - }, - "resultsKey": { + "name": { + "description": "The name of the dataset to be created", "type": "string" }, - "rows": { - "type": "integer" + "overwrite": { + "default": false, + "description": "Should the virtual dataset be overwritten if it already exists", + "type": "boolean" }, "schema": { + "description": "The schema", + "nullable": true, "type": "string" }, - "serverId": { - "type": "integer" - }, "sql": { + "description": "The virtual dataset query", + "type": "string" + } + }, + "required": [ + "name", + "sql" + ], + "type": "object" + }, + "LakehouseDatasetResponseSchema": { + "properties": { + "url": { + "description": "The url for exploring the virtual dataset", "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "LakehouseDisconnectResponseSchema": { + "properties": { + "lakehouse": { + "allOf": [ + { + "$ref": "#/components/schemas/LakehouseGetResponseSchema" + } + ], + "description": "A list of disconnected lakehouses" + } + }, + "type": "object" + }, + "LakehouseGetListResponseSchema": { + "properties": { + "lakehouses": { + "description": "A list of connected lakehouses", + "items": { + "$ref": "#/components/schemas/LakehouseGetResponseSchema" + }, + "type": "array" + } + }, + "type": "object" + }, + "LakehouseGetResponseSchema": { + "properties": { + "catalogs": { + "description": "A list of connected catalogs", + "items": { + "description": "Catalogs", + "items": { + "$ref": "#/components/schemas/LakehouseCatalog" + }, + "type": "array" + }, + "type": "array" }, - "sqlEditorId": { + "engine_url": { + "description": "The URL uf the engine", "type": "string" }, - "startDttm": { - "type": "number" + "id": { + "description": "The unique id of the Lakehouse", + "type": "string" }, - "state": { + "name": { "type": "string" }, - "tab": { + "superset_url": { + "description": "The URL uf the Superset instance", + "type": "string" + } + }, + "type": "object" + }, + "LogRestApi.get": { + "properties": { + "action": { + "maxLength": 512, + "nullable": true, "type": "string" }, - "tempSchema": { + "dashboard_id": { + "nullable": true, + "type": "integer" + }, + "dttm": { + "format": "date-time", "nullable": true, "type": "string" }, - "tempTable": { + "duration_ms": { + "nullable": true, + "type": "integer" + }, + "json": { "nullable": true, "type": "string" }, - "trackingUrl": { + "referrer": { + "maxLength": 1024, "nullable": true, "type": "string" }, + "slice_id": { + "nullable": true, + "type": "integer" + }, "user": { - "type": "string" + "$ref": "#/components/schemas/LogRestApi.get.AppleUser" }, - "userId": { + "user_id": { + "nullable": true, "type": "integer" } }, "type": "object" }, - "RLSRestApi.get": { + "LogRestApi.get.AppleUser": { "properties": { - "clause": { - "description": "clause_description", + "username": { + "maxLength": 64, "type": "string" - }, - "description": { - "description": "description_description", + } + }, + "required": [ + "username" + ], + "type": "object" + }, + "LogRestApi.get_list": { + "properties": { + "action": { + "maxLength": 512, + "nullable": true, "type": "string" }, - "filter_type": { - "description": "filter_type_description", - "enum": ["Regular", "Base"], - "type": "string" + "dashboard_id": { + "nullable": true, + "type": "integer" }, - "group_key": { - "description": "group_key_description", + "dttm": { + "format": "date-time", + "nullable": true, "type": "string" }, - "id": { - "description": "id_description", + "duration_ms": { + "nullable": true, "type": "integer" }, - "name": { - "description": "name_description", + "json": { + "nullable": true, "type": "string" }, - "roles": { - "items": { - "$ref": "#/components/schemas/Roles1" - }, - "type": "array" + "referrer": { + "maxLength": 1024, + "nullable": true, + "type": "string" }, - "tables": { - "items": { - "$ref": "#/components/schemas/Tables" - }, - "type": "array" + "slice_id": { + "nullable": true, + "type": "integer" + }, + "user": { + "$ref": "#/components/schemas/LogRestApi.get_list.AppleUser" + }, + "user_id": { + "nullable": true, + "type": "integer" } }, "type": "object" }, - "RLSRestApi.get_list": { + "LogRestApi.get_list.AppleUser": { "properties": { - "changed_on_delta_humanized": { - "readOnly": true - }, - "clause": { - "description": "clause_description", + "username": { + "maxLength": 64, "type": "string" - }, - "description": { - "description": "description_description", + } + }, + "required": [ + "username" + ], + "type": "object" + }, + "LogRestApi.post": { + "properties": { + "id": { + "type": "integer" + } + }, + "type": "object" + }, + "LogRestApi.put": { + "properties": { + "action": { + "maxLength": 512, + "nullable": true, "type": "string" }, - "filter_type": { - "description": "filter_type_description", - "enum": ["Regular", "Base"], + "dttm": { + "format": "date-time", + "nullable": true, "type": "string" }, - "group_key": { - "description": "group_key_description", + "json": { + "nullable": true, "type": "string" }, - "id": { - "description": "id_description", - "type": "integer" + "user": { + "nullable": true + } + }, + "type": "object" + }, + "QueryExecutionResponseSchema": { + "properties": { + "columns": { + "items": { + "type": "object" + }, + "type": "array" }, - "name": { - "description": "name_description", - "type": "string" + "data": { + "items": { + "type": "object" + }, + "type": "array" }, - "roles": { + "expanded_columns": { "items": { - "$ref": "#/components/schemas/Roles1" + "type": "object" }, "type": "array" }, - "tables": { + "query": { + "$ref": "#/components/schemas/QueryResult" + }, + "query_id": { + "type": "integer" + }, + "selected_columns": { "items": { - "$ref": "#/components/schemas/Tables" + "type": "object" }, "type": "array" + }, + "status": { + "type": "string" } }, "type": "object" }, - "RLSRestApi.post": { + "QueryRestApi.get": { "properties": { - "clause": { - "description": "clause_description", - "type": "string" - }, - "description": { - "description": "description_description", + "changed_on": { + "format": "date-time", "nullable": true, "type": "string" }, - "filter_type": { - "description": "filter_type_description", - "enum": ["Regular", "Base"], + "client_id": { + "maxLength": 11, "type": "string" }, - "group_key": { - "description": "group_key_description", + "database": { + "$ref": "#/components/schemas/QueryRestApi.get.Database" + }, + "end_result_backend_time": { + "nullable": true, + "type": "number" + }, + "end_time": { + "nullable": true, + "type": "number" + }, + "error_message": { "nullable": true, "type": "string" }, - "name": { - "description": "name_description", - "maxLength": 255, - "minLength": 1, + "executed_sql": { + "nullable": true, "type": "string" }, - "roles": { - "description": "roles_description", - "items": { - "type": "integer" - }, - "type": "array" + "id": { + "type": "integer" }, - "tables": { - "description": "tables_description", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "required": ["clause", "filter_type", "name", "roles", "tables"], - "type": "object" - }, - "RLSRestApi.put": { - "properties": { - "clause": { - "description": "clause_description", + "limit": { + "nullable": true, + "type": "integer" + }, + "progress": { + "nullable": true, + "type": "integer" + }, + "results_key": { + "maxLength": 64, + "nullable": true, "type": "string" }, - "description": { - "description": "description_description", + "rows": { + "nullable": true, + "type": "integer" + }, + "schema": { + "maxLength": 256, "nullable": true, "type": "string" }, - "filter_type": { - "description": "filter_type_description", - "enum": ["Regular", "Base"], + "select_as_cta": { + "nullable": true, + "type": "boolean" + }, + "select_as_cta_used": { + "nullable": true, + "type": "boolean" + }, + "select_sql": { + "nullable": true, "type": "string" }, - "group_key": { - "description": "group_key_description", + "sql": { "nullable": true, "type": "string" }, - "name": { - "description": "name_description", - "maxLength": 255, - "minLength": 1, + "sql_editor_id": { + "maxLength": 256, + "nullable": true, "type": "string" }, - "roles": { - "description": "roles_description", - "items": { - "type": "integer" - }, - "type": "array" + "start_running_time": { + "nullable": true, + "type": "number" }, - "tables": { - "description": "tables_description", - "items": { - "type": "integer" - }, - "type": "array" - } - }, - "type": "object" - }, - "RecentActivity": { - "properties": { - "action": { - "description": "Action taken describing type of activity", - "type": "string" + "start_time": { + "nullable": true, + "type": "number" }, - "item_title": { - "description": "Title of item", + "status": { + "maxLength": 16, + "nullable": true, "type": "string" }, - "item_type": { - "description": "Type of item, e.g. slice or dashboard", + "tab_name": { + "maxLength": 256, + "nullable": true, "type": "string" }, - "item_url": { - "description": "URL to item", + "tmp_schema_name": { + "maxLength": 256, + "nullable": true, "type": "string" }, - "time": { - "description": "Time of activity, in epoch milliseconds", - "type": "number" - }, - "time_delta_humanized": { - "description": "Human-readable description of how long ago activity took place.", + "tmp_table_name": { + "maxLength": 256, + "nullable": true, "type": "string" + }, + "tracking_url": { + "readOnly": true } }, + "required": [ + "client_id", + "database" + ], "type": "object" }, - "RecentActivityResponseSchema": { + "QueryRestApi.get.Database": { "properties": { - "result": { - "description": "A list of recent activity objects", - "items": { - "$ref": "#/components/schemas/RecentActivity" - }, - "type": "array" + "id": { + "type": "integer" } }, "type": "object" }, - "RecentActivitySchema": { + "QueryRestApi.get_list": { "properties": { - "action": { - "description": "Action taken describing type of activity", + "changed_on": { + "format": "date-time", "type": "string" }, - "item_title": { - "description": "Title of item", + "database": { + "$ref": "#/components/schemas/Database1" + }, + "end_time": { + "type": "number" + }, + "executed_sql": { "type": "string" }, - "item_type": { - "description": "Type of item, e.g. slice or dashboard", + "id": { + "type": "integer" + }, + "rows": { + "type": "integer" + }, + "schema": { "type": "string" }, - "item_url": { - "description": "URL to item", + "sql": { "type": "string" }, - "time": { - "description": "Time of activity, in epoch milliseconds", + "sql_tables": { + "readOnly": true + }, + "start_time": { "type": "number" }, - "time_delta_humanized": { - "description": "Human-readable description of how long ago activity took place.", + "status": { + "type": "string" + }, + "tab_name": { + "type": "string" + }, + "tmp_table_name": { + "type": "string" + }, + "tracking_url": { "type": "string" + }, + "user": { + "$ref": "#/components/schemas/User" } }, "type": "object" }, - "RelatedResponseSchema": { + "QueryRestApi.post": { "properties": { - "count": { - "description": "The total number of related values", + "id": { "type": "integer" - }, - "result": { - "items": { - "$ref": "#/components/schemas/RelatedResultResponse" - }, - "type": "array" } }, "type": "object" }, - "RelatedResultResponse": { + "QueryRestApi.put": { "properties": { - "extra": { - "description": "The extra metadata for related item", - "type": "object" - }, - "text": { - "description": "The related item string representation", - "type": "string" - }, - "value": { - "description": "The related item identifier", + "id": { "type": "integer" } }, "type": "object" }, - "ReportExecutionLogRestApi.get": { + "QueryResult": { "properties": { - "end_dttm": { + "changed_on": { "format": "date-time", - "nullable": true, "type": "string" }, - "error_message": { - "nullable": true, + "ctas": { + "type": "boolean" + }, + "db": { "type": "string" }, - "id": { + "dbId": { "type": "integer" }, - "scheduled_dttm": { - "format": "date-time", + "endDttm": { + "type": "number" + }, + "errorMessage": { + "nullable": true, "type": "string" }, - "start_dttm": { - "format": "date-time", - "nullable": true, + "executedSql": { "type": "string" }, - "state": { - "maxLength": 50, - "type": "string" + "extra": { + "type": "object" }, - "uuid": { - "format": "uuid", - "nullable": true, + "id": { "type": "string" }, - "value": { - "nullable": true, - "type": "number" + "limit": { + "type": "integer" }, - "value_row_json": { - "nullable": true, + "limitingFactor": { "type": "string" - } - }, - "required": ["scheduled_dttm", "state"], - "type": "object" - }, - "ReportExecutionLogRestApi.get_list": { - "properties": { - "end_dttm": { - "format": "date-time", - "nullable": true, + }, + "progress": { + "type": "integer" + }, + "queryId": { + "type": "integer" + }, + "resultsKey": { "type": "string" }, - "error_message": { - "nullable": true, + "rows": { + "type": "integer" + }, + "schema": { "type": "string" }, - "id": { + "serverId": { "type": "integer" }, - "scheduled_dttm": { - "format": "date-time", + "sql": { "type": "string" }, - "start_dttm": { - "format": "date-time", - "nullable": true, + "sqlEditorId": { "type": "string" }, + "startDttm": { + "type": "number" + }, "state": { - "maxLength": 50, "type": "string" }, - "uuid": { - "format": "uuid", + "tab": { + "type": "string" + }, + "tempSchema": { "nullable": true, "type": "string" }, - "value": { + "tempTable": { "nullable": true, - "type": "number" + "type": "string" }, - "value_row_json": { + "trackingUrl": { "nullable": true, "type": "string" - } - }, - "required": ["scheduled_dttm", "state"], - "type": "object" - }, - "ReportExecutionLogRestApi.post": { - "properties": { - "id": { - "type": "integer" - } - }, - "type": "object" - }, - "ReportExecutionLogRestApi.put": { - "properties": { - "id": { - "type": "integer" - } - }, - "type": "object" - }, - "ReportRecipient": { - "properties": { - "recipient_config_json": { - "$ref": "#/components/schemas/ReportRecipientConfigJSON" }, - "type": { - "description": "The recipient type, check spec for valid options", - "enum": ["Email", "Slack"], + "user": { "type": "string" + }, + "userId": { + "type": "integer" } }, - "required": ["type"], "type": "object" }, - "ReportRecipientConfigJSON": { + "RLSRestApi.get": { "properties": { - "target": { + "clause": { + "description": "clause_description", "type": "string" - } - }, - "type": "object" - }, - "ReportScheduleRestApi.get": { - "properties": { - "active": { - "nullable": true, - "type": "boolean" - }, - "chart": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get.Slice" }, - "context_markdown": { - "nullable": true, + "description": { + "description": "description_description", "type": "string" }, - "creation_method": { - "maxLength": 255, - "nullable": true, + "filter_type": { + "description": "filter_type_description", + "enum": [ + "Regular", + "Base" + ], "type": "string" }, - "crontab": { - "maxLength": 1000, + "group_key": { + "description": "group_key_description", "type": "string" }, - "custom_width": { - "nullable": true, + "id": { + "description": "id_description", "type": "integer" }, - "dashboard": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get.Dashboard" - }, - "database": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get.Database" - }, - "description": { - "nullable": true, + "name": { + "description": "name_description", "type": "string" }, - "extra": { - "readOnly": true - }, - "force_screenshot": { - "nullable": true, - "type": "boolean" + "roles": { + "items": { + "$ref": "#/components/schemas/Roles1" + }, + "type": "array" }, - "grace_period": { - "nullable": true, - "type": "integer" + "tables": { + "items": { + "$ref": "#/components/schemas/Tables" + }, + "type": "array" + } + }, + "type": "object" + }, + "RLSRestApi.get_list": { + "properties": { + "changed_by": { + "$ref": "#/components/schemas/User" }, - "id": { - "type": "integer" + "changed_on_delta_humanized": { + "readOnly": true }, - "last_eval_dttm": { - "format": "date-time", - "nullable": true, + "clause": { + "description": "clause_description", "type": "string" }, - "last_state": { - "maxLength": 50, - "nullable": true, + "description": { + "description": "description_description", "type": "string" }, - "last_value": { - "nullable": true, - "type": "number" + "filter_type": { + "description": "filter_type_description", + "enum": [ + "Regular", + "Base" + ], + "type": "string" }, - "last_value_row_json": { - "nullable": true, + "group_key": { + "description": "group_key_description", "type": "string" }, - "log_retention": { - "nullable": true, + "id": { + "description": "id_description", "type": "integer" }, "name": { - "maxLength": 150, + "description": "name_description", "type": "string" }, - "owners": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get.User" - }, - "recipients": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get.ReportRecipients" + "roles": { + "items": { + "$ref": "#/components/schemas/Roles1" + }, + "type": "array" }, - "report_format": { - "maxLength": 50, - "nullable": true, + "tables": { + "items": { + "$ref": "#/components/schemas/Tables" + }, + "type": "array" + } + }, + "type": "object" + }, + "RLSRestApi.post": { + "properties": { + "clause": { + "description": "clause_description", "type": "string" }, - "sql": { + "description": { + "description": "description_description", "nullable": true, "type": "string" }, - "timezone": { - "maxLength": 100, - "type": "string" - }, - "type": { - "maxLength": 50, + "filter_type": { + "description": "filter_type_description", + "enum": [ + "Regular", + "Base" + ], "type": "string" }, - "validator_config_json": { + "group_key": { + "description": "group_key_description", "nullable": true, "type": "string" }, - "validator_type": { - "maxLength": 100, - "nullable": true, + "name": { + "description": "name_description", + "maxLength": 255, + "minLength": 1, "type": "string" }, - "working_timeout": { - "nullable": true, - "type": "integer" - } + "roles": { + "description": "roles_description", + "items": { + "type": "integer" + }, + "type": "array" + }, + "tables": { + "description": "tables_description", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } }, - "required": ["crontab", "name", "recipients", "type"], + "required": [ + "clause", + "filter_type", + "name", + "roles", + "tables" + ], "type": "object" }, - "ReportScheduleRestApi.get.Dashboard": { + "RLSRestApi.put": { "properties": { - "dashboard_title": { - "maxLength": 500, + "clause": { + "description": "clause_description", + "type": "string" + }, + "description": { + "description": "description_description", "nullable": true, "type": "string" }, - "id": { - "type": "integer" + "filter_type": { + "description": "filter_type_description", + "enum": [ + "Regular", + "Base" + ], + "type": "string" + }, + "group_key": { + "description": "group_key_description", + "nullable": true, + "type": "string" + }, + "name": { + "description": "name_description", + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + "roles": { + "description": "roles_description", + "items": { + "type": "integer" + }, + "type": "array" + }, + "tables": { + "description": "tables_description", + "items": { + "type": "integer" + }, + "type": "array" } }, "type": "object" }, - "ReportScheduleRestApi.get.Database": { + "RecentActivity": { "properties": { - "database_name": { - "maxLength": 250, + "action": { + "description": "Action taken describing type of activity", "type": "string" }, - "id": { - "type": "integer" + "item_title": { + "description": "Title of item", + "type": "string" + }, + "item_type": { + "description": "Type of item, e.g. slice or dashboard", + "type": "string" + }, + "item_url": { + "description": "URL to item", + "type": "string" + }, + "time": { + "description": "Time of activity, in epoch milliseconds", + "type": "number" + }, + "time_delta_humanized": { + "description": "Human-readable description of how long ago activity took place.", + "type": "string" } }, - "required": ["database_name"], "type": "object" }, - "ReportScheduleRestApi.get.ReportRecipients": { + "RecentActivityResponseSchema": { "properties": { - "id": { - "type": "integer" + "result": { + "description": "A list of recent activity objects", + "items": { + "$ref": "#/components/schemas/RecentActivity" + }, + "type": "array" + } + }, + "type": "object" + }, + "RecentActivitySchema": { + "properties": { + "action": { + "description": "Action taken describing type of activity", + "type": "string" }, - "recipient_config_json": { - "nullable": true, + "item_title": { + "description": "Title of item", "type": "string" }, - "type": { - "maxLength": 50, + "item_type": { + "description": "Type of item, e.g. slice or dashboard", + "type": "string" + }, + "item_url": { + "description": "URL to item", + "type": "string" + }, + "time": { + "description": "Time of activity, in epoch milliseconds", + "type": "number" + }, + "time_delta_humanized": { + "description": "Human-readable description of how long ago activity took place.", "type": "string" } }, - "required": ["type"], "type": "object" }, - "ReportScheduleRestApi.get.Slice": { + "RelatedResponseSchema": { "properties": { - "id": { + "count": { + "description": "The total number of related values", "type": "integer" }, - "slice_name": { - "maxLength": 250, - "nullable": true, - "type": "string" - }, - "viz_type": { - "maxLength": 250, - "nullable": true, - "type": "string" + "result": { + "items": { + "$ref": "#/components/schemas/RelatedResultResponse" + }, + "type": "array" } }, "type": "object" }, - "ReportScheduleRestApi.get.User": { + "RelatedResultResponse": { "properties": { - "first_name": { - "maxLength": 64, + "extra": { + "description": "The extra metadata for related item", + "type": "object" + }, + "text": { + "description": "The related item string representation", "type": "string" }, - "id": { + "value": { + "description": "The related item identifier", "type": "integer" - }, - "last_name": { - "maxLength": 64, - "type": "string" } }, - "required": ["first_name", "last_name"], "type": "object" }, - "ReportScheduleRestApi.get_list": { + "ReportExecutionLogRestApi.get": { "properties": { - "active": { - "nullable": true, - "type": "boolean" - }, - "changed_by": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User2" - }, - "changed_on": { + "end_dttm": { "format": "date-time", "nullable": true, "type": "string" }, - "changed_on_delta_humanized": { - "readOnly": true - }, - "chart_id": { + "error_message": { "nullable": true, - "type": "integer" + "type": "string" }, - "created_by": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User" + "id": { + "type": "integer" }, - "created_on": { + "scheduled_dttm": { "format": "date-time", - "nullable": true, "type": "string" }, - "creation_method": { - "maxLength": 255, + "start_dttm": { + "format": "date-time", "nullable": true, "type": "string" }, - "crontab": { - "maxLength": 1000, + "state": { + "maxLength": 50, "type": "string" }, - "crontab_humanized": { - "readOnly": true + "uuid": { + "format": "uuid", + "nullable": true, + "type": "string" }, - "dashboard_id": { + "value": { "nullable": true, - "type": "integer" + "type": "number" }, - "description": { + "value_row_json": { + "nullable": true, + "type": "string" + } + }, + "required": [ + "scheduled_dttm", + "state" + ], + "type": "object" + }, + "ReportExecutionLogRestApi.get_list": { + "properties": { + "end_dttm": { + "format": "date-time", "nullable": true, "type": "string" }, - "extra": { - "readOnly": true + "error_message": { + "nullable": true, + "type": "string" }, "id": { "type": "integer" }, - "last_eval_dttm": { + "scheduled_dttm": { "format": "date-time", - "nullable": true, "type": "string" }, - "last_state": { - "maxLength": 50, + "start_dttm": { + "format": "date-time", "nullable": true, "type": "string" }, - "name": { - "maxLength": 150, + "state": { + "maxLength": 50, "type": "string" }, - "owners": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User1" - }, - "recipients": { - "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.ReportRecipients" - }, - "timezone": { - "maxLength": 100, + "uuid": { + "format": "uuid", + "nullable": true, "type": "string" }, - "type": { - "maxLength": 50, + "value": { + "nullable": true, + "type": "number" + }, + "value_row_json": { + "nullable": true, "type": "string" } }, - "required": ["crontab", "name", "recipients", "type"], + "required": [ + "scheduled_dttm", + "state" + ], "type": "object" }, - "ReportScheduleRestApi.get_list.ReportRecipients": { + "ReportExecutionLogRestApi.post": { "properties": { "id": { "type": "integer" - }, - "type": { - "maxLength": 50, - "type": "string" } }, - "required": ["type"], "type": "object" }, - "ReportScheduleRestApi.get_list.User": { + "ReportExecutionLogRestApi.put": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "last_name": { - "maxLength": 64, - "type": "string" + "id": { + "type": "integer" } }, - "required": ["first_name", "last_name"], "type": "object" }, - "ReportScheduleRestApi.get_list.User1": { + "ReportRecipient": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "id": { - "type": "integer" + "recipient_config_json": { + "$ref": "#/components/schemas/ReportRecipientConfigJSON" }, - "last_name": { - "maxLength": 64, + "type": { + "description": "The recipient type, check spec for valid options", + "enum": [ + "Email", + "Slack", + "SlackV2" + ], "type": "string" } }, - "required": ["first_name", "last_name"], + "required": [ + "type" + ], "type": "object" }, - "ReportScheduleRestApi.get_list.User2": { + "ReportRecipientConfigJSON": { "properties": { - "first_name": { - "maxLength": 64, + "bccTarget": { "type": "string" }, - "last_name": { - "maxLength": 64, + "ccTarget": { + "type": "string" + }, + "target": { "type": "string" } }, - "required": ["first_name", "last_name"], "type": "object" }, - "ReportScheduleRestApi.post": { + "ReportScheduleRestApi.get": { "properties": { "active": { + "nullable": true, "type": "boolean" }, "chart": { - "nullable": true, - "type": "integer" + "$ref": "#/components/schemas/ReportScheduleRestApi.get.Slice" }, "context_markdown": { - "description": "Markdown description", "nullable": true, "type": "string" }, "creation_method": { - "description": "Creation method is used to inform the frontend whether the report/alert was created in the dashboard, chart, or alerts and reports UI.", - "enum": ["charts", "dashboards", "alerts_reports"] + "maxLength": 255, + "nullable": true, + "type": "string" }, "crontab": { - "description": "A CRON expression.[Crontab Guru](https://crontab.guru/) is a helpful resource that can help you craft a CRON expression.", - "example": "*/5 * * * *", "maxLength": 1000, - "minLength": 1, "type": "string" }, "custom_width": { - "description": "Custom width of the screenshot in pixels", - "example": 1000, "nullable": true, "type": "integer" }, "dashboard": { - "nullable": true, - "type": "integer" + "$ref": "#/components/schemas/ReportScheduleRestApi.get.Dashboard" }, "database": { - "type": "integer" + "$ref": "#/components/schemas/ReportScheduleRestApi.get.Database" }, "description": { - "description": "Use a nice description to give context to this Alert/Report", - "example": "Daily sales dashboard to marketing", + "nullable": true, + "type": "string" + }, + "email_subject": { + "maxLength": 255, "nullable": true, "type": "string" }, "extra": { - "type": "object" + "readOnly": true }, "force_screenshot": { + "nullable": true, "type": "boolean" }, "grace_period": { - "description": "Once an alert is triggered, how long, in seconds, before Superset nags you again. (in seconds)", - "example": 14400, - "minimum": 1, + "nullable": true, + "type": "integer" + }, + "id": { "type": "integer" }, + "last_eval_dttm": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "last_state": { + "maxLength": 50, + "nullable": true, + "type": "string" + }, + "last_value": { + "nullable": true, + "type": "number" + }, + "last_value_row_json": { + "nullable": true, + "type": "string" + }, "log_retention": { - "description": "How long to keep the logs around for this report (in days)", - "example": 90, - "minimum": 1, + "nullable": true, "type": "integer" }, "name": { - "description": "The report schedule name.", - "example": "Daily dashboard email", "maxLength": 150, - "minLength": 1, "type": "string" }, "owners": { - "items": { - "description": "Owner are users ids allowed to delete or change this report. If left empty you will be one of the owners of the report.", - "type": "integer" - }, - "type": "array" + "$ref": "#/components/schemas/ReportScheduleRestApi.get.AppleUser" }, "recipients": { - "items": { - "$ref": "#/components/schemas/ReportRecipient" - }, - "type": "array" + "$ref": "#/components/schemas/ReportScheduleRestApi.get.ReportRecipients" }, "report_format": { - "enum": ["PNG", "CSV", "TEXT"], - "type": "string" - }, - "selected_tabs": { - "items": { - "type": "integer" - }, + "maxLength": 50, "nullable": true, - "type": "array" + "type": "string" }, "sql": { - "description": "A SQL statement that defines whether the alert should get triggered or not. The query is expected to return either NULL or a number value.", - "example": "SELECT value FROM time_series_table", + "nullable": true, "type": "string" }, "timezone": { - "description": "A timezone string that represents the location of the timezone.", - "enum": [ - "Africa/Abidjan", - "Africa/Accra", - "Africa/Addis_Ababa", - "Africa/Algiers", - "Africa/Asmara", - "Africa/Asmera", - "Africa/Bamako", - "Africa/Bangui", - "Africa/Banjul", - "Africa/Bissau", - "Africa/Blantyre", - "Africa/Brazzaville", - "Africa/Bujumbura", - "Africa/Cairo", - "Africa/Casablanca", - "Africa/Ceuta", - "Africa/Conakry", - "Africa/Dakar", - "Africa/Dar_es_Salaam", - "Africa/Djibouti", - "Africa/Douala", - "Africa/El_Aaiun", - "Africa/Freetown", - "Africa/Gaborone", - "Africa/Harare", - "Africa/Johannesburg", - "Africa/Juba", - "Africa/Kampala", - "Africa/Khartoum", - "Africa/Kigali", - "Africa/Kinshasa", - "Africa/Lagos", - "Africa/Libreville", - "Africa/Lome", - "Africa/Luanda", - "Africa/Lubumbashi", - "Africa/Lusaka", - "Africa/Malabo", - "Africa/Maputo", - "Africa/Maseru", - "Africa/Mbabane", - "Africa/Mogadishu", - "Africa/Monrovia", - "Africa/Nairobi", - "Africa/Ndjamena", - "Africa/Niamey", - "Africa/Nouakchott", - "Africa/Ouagadougou", - "Africa/Porto-Novo", - "Africa/Sao_Tome", - "Africa/Timbuktu", - "Africa/Tripoli", - "Africa/Tunis", - "Africa/Windhoek", - "America/Adak", - "America/Anchorage", - "America/Anguilla", - "America/Antigua", - "America/Araguaina", - "America/Argentina/Buenos_Aires", - "America/Argentina/Catamarca", - "America/Argentina/ComodRivadavia", - "America/Argentina/Cordoba", - "America/Argentina/Jujuy", - "America/Argentina/La_Rioja", - "America/Argentina/Mendoza", - "America/Argentina/Rio_Gallegos", - "America/Argentina/Salta", - "America/Argentina/San_Juan", - "America/Argentina/San_Luis", - "America/Argentina/Tucuman", - "America/Argentina/Ushuaia", - "America/Aruba", - "America/Asuncion", - "America/Atikokan", - "America/Atka", - "America/Bahia", - "America/Bahia_Banderas", - "America/Barbados", - "America/Belem", - "America/Belize", - "America/Blanc-Sablon", - "America/Boa_Vista", - "America/Bogota", - "America/Boise", - "America/Buenos_Aires", - "America/Cambridge_Bay", - "America/Campo_Grande", - "America/Cancun", - "America/Caracas", - "America/Catamarca", - "America/Cayenne", - "America/Cayman", - "America/Chicago", - "America/Chihuahua", - "America/Coral_Harbour", - "America/Cordoba", - "America/Costa_Rica", - "America/Creston", - "America/Cuiaba", - "America/Curacao", - "America/Danmarkshavn", - "America/Dawson", - "America/Dawson_Creek", - "America/Denver", - "America/Detroit", - "America/Dominica", - "America/Edmonton", - "America/Eirunepe", - "America/El_Salvador", - "America/Ensenada", - "America/Fort_Nelson", - "America/Fort_Wayne", - "America/Fortaleza", - "America/Glace_Bay", - "America/Godthab", - "America/Goose_Bay", - "America/Grand_Turk", - "America/Grenada", - "America/Guadeloupe", - "America/Guatemala", - "America/Guayaquil", - "America/Guyana", - "America/Halifax", - "America/Havana", - "America/Hermosillo", - "America/Indiana/Indianapolis", - "America/Indiana/Knox", - "America/Indiana/Marengo", - "America/Indiana/Petersburg", + "maxLength": 100, + "type": "string" + }, + "type": { + "maxLength": 50, + "type": "string" + }, + "validator_config_json": { + "nullable": true, + "type": "string" + }, + "validator_type": { + "maxLength": 100, + "nullable": true, + "type": "string" + }, + "working_timeout": { + "nullable": true, + "type": "integer" + } + }, + "required": [ + "crontab", + "name", + "recipients", + "type" + ], + "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": { + "maxLength": 500, + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + } + }, + "type": "object" + }, + "ReportScheduleRestApi.get.Database": { + "properties": { + "database_name": { + "maxLength": 250, + "type": "string" + }, + "id": { + "type": "integer" + } + }, + "required": [ + "database_name" + ], + "type": "object" + }, + "ReportScheduleRestApi.get.ReportRecipients": { + "properties": { + "id": { + "type": "integer" + }, + "recipient_config_json": { + "nullable": true, + "type": "string" + }, + "type": { + "maxLength": 50, + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "ReportScheduleRestApi.get.Slice": { + "properties": { + "id": { + "type": "integer" + }, + "slice_name": { + "maxLength": 250, + "nullable": true, + "type": "string" + }, + "viz_type": { + "maxLength": 250, + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "ReportScheduleRestApi.get_list": { + "properties": { + "active": { + "nullable": true, + "type": "boolean" + }, + "changed_by": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User" + }, + "changed_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "changed_on_delta_humanized": { + "readOnly": true + }, + "chart_id": { + "nullable": true, + "type": "integer" + }, + "created_by": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.User1" + }, + "created_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "creation_method": { + "maxLength": 255, + "nullable": true, + "type": "string" + }, + "crontab": { + "maxLength": 1000, + "type": "string" + }, + "crontab_humanized": { + "readOnly": true + }, + "dashboard_id": { + "nullable": true, + "type": "integer" + }, + "description": { + "nullable": true, + "type": "string" + }, + "extra": { + "readOnly": true + }, + "id": { + "type": "integer" + }, + "last_eval_dttm": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "last_state": { + "maxLength": 50, + "nullable": true, + "type": "string" + }, + "name": { + "maxLength": 150, + "type": "string" + }, + "owners": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.AppleUser" + }, + "recipients": { + "$ref": "#/components/schemas/ReportScheduleRestApi.get_list.ReportRecipients" + }, + "timezone": { + "maxLength": 100, + "type": "string" + }, + "type": { + "maxLength": 50, + "type": "string" + } + }, + "required": [ + "crontab", + "name", + "recipients", + "type" + ], + "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": { + "type": "integer" + }, + "type": { + "maxLength": 50, + "type": "string" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "ReportScheduleRestApi.get_list.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "ReportScheduleRestApi.get_list.User1": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "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": { + "description": "Markdown description", + "nullable": true, + "type": "string" + }, + "creation_method": { + "description": "Creation method is used to inform the frontend whether the report/alert was created in the dashboard, chart, or alerts and reports UI.", + "enum": [ + "charts", + "dashboards", + "alerts_reports" + ] + }, + "crontab": { + "description": "A CRON expression.[Crontab Guru](https://crontab.guru/) is a helpful resource that can help you craft a CRON expression.", + "example": "*/5 * * * *", + "maxLength": 1000, + "minLength": 1, + "type": "string" + }, + "custom_width": { + "description": "Custom width of the screenshot in pixels", + "example": 1000, + "nullable": true, + "type": "integer" + }, + "dashboard": { + "nullable": true, + "type": "integer" + }, + "database": { + "type": "integer" + }, + "description": { + "description": "Use a nice description to give context to this Alert/Report", + "example": "Daily sales dashboard to marketing", + "nullable": true, + "type": "string" + }, + "email_subject": { + "description": "The report schedule subject line", + "example": "[Report] Report name: Dashboard or chart name", + "nullable": true, + "type": "string" + }, + "extra": { + "type": "object" + }, + "force_screenshot": { + "type": "boolean" + }, + "grace_period": { + "description": "Once an alert is triggered, how long, in seconds, before Superset nags you again. (in seconds)", + "example": 14400, + "minimum": 1, + "type": "integer" + }, + "log_retention": { + "description": "How long to keep the logs around for this report (in days)", + "example": 90, + "minimum": 1, + "type": "integer" + }, + "name": { + "description": "The report schedule name.", + "example": "Daily dashboard email", + "maxLength": 150, + "minLength": 1, + "type": "string" + }, + "owners": { + "items": { + "description": "Owner are users ids allowed to delete or change this report. If left empty you will be one of the owners of the report.", + "type": "integer" + }, + "type": "array" + }, + "recipients": { + "items": { + "$ref": "#/components/schemas/ReportRecipient" + }, + "type": "array" + }, + "report_format": { + "enum": [ + "PDF", + "PNG", + "CSV", + "TEXT" + ], + "type": "string" + }, + "selected_tabs": { + "items": { + "type": "integer" + }, + "nullable": true, + "type": "array" + }, + "sql": { + "description": "A SQL statement that defines whether the alert should get triggered or not. The query is expected to return either NULL or a number value.", + "example": "SELECT value FROM time_series_table", + "type": "string" + }, + "timezone": { + "description": "A timezone string that represents the location of the timezone.", + "enum": [ + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", @@ -7620,8 +9103,9 @@ "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", - "Europe/Kyiv", + "Europe/Kiev", "Europe/Kirov", + "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", @@ -7772,7 +9256,10 @@ }, "type": { "description": "The report schedule type", - "enum": ["Alert", "Report"], + "enum": [ + "Alert", + "Report" + ], "type": "string" }, "validator_config_json": { @@ -7780,17 +9267,24 @@ }, "validator_type": { "description": "Determines when to trigger alert based off value from alert query. Alerts will be triggered with these validator types:\n- Not Null - When the return value is Not NULL, Empty, or 0\n- Operator - When `sql_return_value comparison_operator threshold` is True e.g. `50 <= 75`
Supports the comparison operators <, <=, >, >=, ==, and !=", - "enum": ["not null", "operator"], + "enum": [ + "not null", + "operator" + ], "type": "string" }, "working_timeout": { - "description": "If an alert is staled at a working state, how long until it's state is reseted to error", + "description": "If an alert is staled at a working state, how long until it's state is reset to error", "example": 3600, "minimum": 1, "type": "integer" } }, - "required": ["crontab", "name", "type"], + "required": [ + "crontab", + "name", + "type" + ], "type": "object" }, "ReportScheduleRestApi.put": { @@ -7809,7 +9303,11 @@ }, "creation_method": { "description": "Creation method is used to inform the frontend whether the report/alert was created in the dashboard, chart, or alerts and reports UI.", - "enum": ["charts", "dashboards", "alerts_reports"], + "enum": [ + "charts", + "dashboards", + "alerts_reports" + ], "nullable": true }, "crontab": { @@ -7837,6 +9335,12 @@ "nullable": true, "type": "string" }, + "email_subject": { + "description": "The report schedule subject line", + "example": "[Report] Report name: Dashboard or chart name", + "nullable": true, + "type": "string" + }, "extra": { "type": "object" }, @@ -7852,7 +9356,7 @@ "log_retention": { "description": "How long to keep the logs around for this report (in days)", "example": 90, - "minimum": 1, + "minimum": 0, "type": "integer" }, "name": { @@ -7875,7 +9379,12 @@ "type": "array" }, "report_format": { - "enum": ["PNG", "CSV", "TEXT"], + "enum": [ + "PDF", + "PNG", + "CSV", + "TEXT" + ], "type": "string" }, "sql": { @@ -7982,6 +9491,7 @@ "America/Cayman", "America/Chicago", "America/Chihuahua", + "America/Ciudad_Juarez", "America/Coral_Harbour", "America/Cordoba", "America/Costa_Rica", @@ -8334,8 +9844,9 @@ "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", - "Europe/Kyiv", + "Europe/Kiev", "Europe/Kirov", + "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", @@ -8484,1285 +9995,3341 @@ ], "type": "string" }, - "type": { - "description": "The report schedule type", - "enum": ["Alert", "Report"], + "type": { + "description": "The report schedule type", + "enum": [ + "Alert", + "Report" + ], + "type": "string" + }, + "validator_config_json": { + "$ref": "#/components/schemas/ValidatorConfigJSON" + }, + "validator_type": { + "description": "Determines when to trigger alert based off value from alert query. Alerts will be triggered with these validator types:\n- Not Null - When the return value is Not NULL, Empty, or 0\n- Operator - When `sql_return_value comparison_operator threshold` is True e.g. `50 <= 75`
Supports the comparison operators <, <=, >, >=, ==, and !=", + "enum": [ + "not null", + "operator" + ], + "nullable": true, + "type": "string" + }, + "working_timeout": { + "description": "If an alert is staled at a working state, how long until it's state is reset to error", + "example": 3600, + "minimum": 1, + "nullable": true, + "type": "integer" + } + }, + "type": "object" + }, + "Resource": { + "properties": { + "id": { + "type": "string" + }, + "type": { + "enum": [ + "dashboard" + ] + } + }, + "required": [ + "id", + "type" + ], + "type": "object" + }, + "RlsRule": { + "properties": { + "clause": { + "type": "string" + }, + "dataset": { + "type": "integer" + } + }, + "required": [ + "clause" + ], + "type": "object" + }, + "Roles": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "Roles1": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "SQLLabBootstrapSchema": { + "properties": { + "active_tab": { + "$ref": "#/components/schemas/TabState" + }, + "databases": { + "additionalProperties": { + "$ref": "#/components/schemas/ImportV1Database" + }, + "type": "object" + }, + "queries": { + "additionalProperties": { + "$ref": "#/components/schemas/QueryResult" + }, + "type": "object" + }, + "tab_state_ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "SavedQueryRestApi.get": { + "properties": { + "catalog": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "changed_by": { + "$ref": "#/components/schemas/SavedQueryRestApi.get.User" + }, + "changed_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "changed_on_delta_humanized": { + "readOnly": true + }, + "created_by": { + "$ref": "#/components/schemas/SavedQueryRestApi.get.User1" + }, + "database": { + "$ref": "#/components/schemas/SavedQueryRestApi.get.Database" + }, + "description": { + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + }, + "label": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "schema": { + "maxLength": 128, + "nullable": true, + "type": "string" + }, + "sql": { + "nullable": true, + "type": "string" + }, + "sql_tables": { + "readOnly": true + }, + "template_parameters": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "SavedQueryRestApi.get.Database": { + "properties": { + "database_name": { + "maxLength": 250, + "type": "string" + }, + "id": { + "type": "integer" + } + }, + "required": [ + "database_name" + ], + "type": "object" + }, + "SavedQueryRestApi.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" + }, + "SavedQueryRestApi.get.User1": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "SavedQueryRestApi.get_list": { + "properties": { + "catalog": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "changed_by": { + "$ref": "#/components/schemas/SavedQueryRestApi.get_list.User" + }, + "changed_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "changed_on_delta_humanized": { + "readOnly": true + }, + "created_by": { + "$ref": "#/components/schemas/SavedQueryRestApi.get_list.User1" + }, + "created_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "database": { + "$ref": "#/components/schemas/SavedQueryRestApi.get_list.Database" + }, + "db_id": { + "nullable": true, + "type": "integer" + }, + "description": { + "nullable": true, + "type": "string" + }, + "extra": { + "readOnly": true + }, + "id": { + "type": "integer" + }, + "label": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "last_run_delta_humanized": { + "readOnly": true + }, + "rows": { + "nullable": true, + "type": "integer" + }, + "schema": { + "maxLength": 128, + "nullable": true, + "type": "string" + }, + "sql": { + "nullable": true, + "type": "string" + }, + "sql_tables": { + "readOnly": true + }, + "tags": { + "$ref": "#/components/schemas/SavedQueryRestApi.get_list.Tag" + } + }, + "type": "object" + }, + "SavedQueryRestApi.get_list.Database": { + "properties": { + "database_name": { + "maxLength": 250, + "type": "string" + }, + "id": { + "type": "integer" + } + }, + "required": [ + "database_name" + ], + "type": "object" + }, + "SavedQueryRestApi.get_list.Tag": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "maxLength": 250, + "nullable": true, + "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] + } + }, + "type": "object" + }, + "SavedQueryRestApi.get_list.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "SavedQueryRestApi.get_list.User1": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "SavedQueryRestApi.post": { + "properties": { + "catalog": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "db_id": { + "nullable": true, + "type": "integer" + }, + "description": { + "nullable": true, + "type": "string" + }, + "extra_json": { + "nullable": true, + "type": "string" + }, + "label": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "schema": { + "maxLength": 128, + "nullable": true, + "type": "string" + }, + "sql": { + "nullable": true, + "type": "string" + }, + "template_parameters": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "SavedQueryRestApi.put": { + "properties": { + "catalog": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "db_id": { + "nullable": true, + "type": "integer" + }, + "description": { + "nullable": true, + "type": "string" + }, + "extra_json": { + "nullable": true, + "type": "string" + }, + "label": { + "maxLength": 256, + "nullable": true, + "type": "string" + }, + "schema": { + "maxLength": 128, + "nullable": true, + "type": "string" + }, + "sql": { + "nullable": true, + "type": "string" + }, + "template_parameters": { + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "SchemasResponseSchema": { + "properties": { + "result": { + "items": { + "description": "A database schema name", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "SelectStarResponseSchema": { + "properties": { + "result": { + "description": "SQL select star", + "type": "string" + } + }, + "type": "object" + }, + "Slice": { + "properties": { + "cache_timeout": { + "description": "Duration (in seconds) of the caching timeout for this chart.", + "type": "integer" + }, + "certification_details": { + "description": "Details of the certification.", + "type": "string" + }, + "certified_by": { + "description": "Person or group that has certified this dashboard.", + "type": "string" + }, + "changed_on": { + "description": "Timestamp of the last modification.", + "format": "date-time", + "type": "string" + }, + "changed_on_humanized": { + "description": "Timestamp of the last modification in human readable form.", + "type": "string" + }, + "datasource": { + "description": "Datasource identifier.", + "type": "string" + }, + "description": { + "description": "Slice description.", + "type": "string" + }, + "description_markeddown": { + "description": "Sanitized HTML version of the chart description.", + "type": "string" + }, + "edit_url": { + "description": "The URL for editing the slice.", + "type": "string" + }, + "form_data": { + "description": "Form data associated with the slice.", + "type": "object" + }, + "is_managed_externally": { + "description": "If the chart is managed outside externally.", + "type": "boolean" + }, + "modified": { + "description": "Last modification in human readable form.", + "type": "string" + }, + "owners": { + "description": "Owners identifiers.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "query_context": { + "description": "The context associated with the query.", + "type": "object" + }, + "slice_id": { + "description": "The slice ID.", + "type": "integer" + }, + "slice_name": { + "description": "The slice name.", + "type": "string" + }, + "slice_url": { + "description": "The slice URL.", + "type": "string" + } + }, + "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": { + "properties": { + "active": { + "type": "boolean" + }, + "autorun": { + "type": "boolean" + }, + "database_id": { + "type": "integer" + }, + "extra_json": { + "type": "object" + }, + "hide_left_bar": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "latest_query": { + "$ref": "#/components/schemas/QueryResult" + }, + "query_limit": { + "type": "integer" + }, + "saved_query": { + "nullable": true, + "type": "object" + }, + "schema": { + "type": "string" + }, + "sql": { + "type": "string" + }, + "table_schemas": { + "items": { + "$ref": "#/components/schemas/Table" + }, + "type": "array" + }, + "user_id": { + "type": "integer" + } + }, + "type": "object" + }, + "Table": { + "properties": { + "database_id": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "expanded": { + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "schema": { + "type": "string" + }, + "tab_state_id": { + "type": "integer" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "TableExtraMetadataResponseSchema": { + "properties": { + "clustering": { + "type": "object" + }, + "metadata": { + "type": "object" + }, + "partitions": { + "type": "object" + } + }, + "type": "object" + }, + "TableMetadataColumnsResponse": { + "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", + "type": "string" + } + }, + "type": "object" + }, + "TableMetadataForeignKeysIndexesResponse": { + "properties": { + "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" + }, + "options": { + "$ref": "#/components/schemas/TableMetadataOptionsResponse" + }, + "referred_columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "referred_schema": { + "type": "string" + }, + "referred_table": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "TableMetadataOptionsResponse": { + "properties": { + "deferrable": { + "type": "boolean" + }, + "initially": { + "type": "boolean" + }, + "match": { + "type": "boolean" + }, + "ondelete": { + "type": "boolean" + }, + "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" + }, + "name": { + "description": "The primary key index name", + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "TableMetadataResponseSchema": { + "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" + }, + "name": { + "description": "The name of the table", + "type": "string" + }, + "primaryKey": { + "allOf": [ + { + "$ref": "#/components/schemas/TableMetadataPrimaryKeyResponse" + } + ], + "description": "Primary keys metadata" + }, + "selectStar": { + "description": "SQL select star", + "type": "string" + } + }, + "type": "object" + }, + "Tables": { + "properties": { + "id": { + "type": "integer" + }, + "schema": { + "type": "string" + }, + "table_name": { + "type": "string" + } + }, + "type": "object" + }, + "TabsPayloadSchema": { + "properties": { + "all_tabs": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "tab_tree": { + "items": { + "$ref": "#/components/schemas/Tab" + }, + "type": "array" + } + }, + "type": "object" + }, + "Tag": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] + } + }, + "type": "object" + }, + "TagGetResponseSchema": { + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "TagObject": { + "properties": { + "description": { + "nullable": true, + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "objects_to_tag": { + "description": "Objects to tag", + "items": {}, + "type": "array" + } + }, + "type": "object" + }, + "TagPostBulkResponseObject": { + "properties": { + "objects_skipped": { + "description": "Objects to tag", + "items": {}, + "type": "array" + }, + "objects_tagged": { + "description": "Objects to tag", + "items": {}, + "type": "array" + } + }, + "type": "object" + }, + "TagPostBulkResponseSchema": { + "properties": { + "result": { + "$ref": "#/components/schemas/TagPostBulkResponseObject" + } + }, + "type": "object" + }, + "TagPostBulkSchema": { + "properties": { + "tags": { + "items": { + "$ref": "#/components/schemas/TagObject" + }, + "type": "array" + } + }, + "type": "object" + }, + "TagRestApi.get": { + "properties": { + "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" + }, + "TagRestApi.get.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "TagRestApi.get.User1": { + "properties": { + "active": { + "nullable": true, + "type": "boolean" + }, + "changed_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "created_on": { + "format": "date-time", + "nullable": true, + "type": "string" + }, + "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": [ + "email", + "first_name", + "last_name", + "username" + ], + "type": "object" + }, + "TagRestApi.get_list": { + "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 + }, + "description": { + "nullable": true, + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "maxLength": 250, + "nullable": true, + "type": "string" + }, + "type": { + "enum": [ + 1, + 2, + 3, + 4 + ] + } + }, + "type": "object" + }, + "TagRestApi.get_list.User": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "TagRestApi.get_list.User1": { + "properties": { + "first_name": { + "maxLength": 64, + "type": "string" + }, + "last_name": { + "maxLength": 64, + "type": "string" + } + }, + "required": [ + "first_name", + "last_name" + ], + "type": "object" + }, + "TagRestApi.post": { + "properties": { + "description": { + "nullable": true, + "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" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "objects_to_tag": { + "description": "Objects to tag", + "items": {}, + "type": "array" + } + }, + "type": "object" + }, + "TaggedObjectEntityResponseSchema": { + "properties": { + "changed_on": { + "format": "date-time", + "type": "string" + }, + "created_by": { + "$ref": "#/components/schemas/User" + }, + "creator": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "owners": { + "items": { + "$ref": "#/components/schemas/User1" + }, + "type": "array" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/TagGetResponseSchema" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "TemporaryCachePostSchema": { + "properties": { + "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": { + "$ref": "#/components/schemas/UploadFileMetadataItem" + }, + "type": "array" + } + }, + "type": "object" + }, + "UploadFileMetadataItem": { + "properties": { + "column_names": { + "description": "A list of columns names in the sheet", + "items": { + "type": "string" + }, + "type": "array" + }, + "sheet_name": { + "description": "The name of the sheet", + "type": "string" + } + }, + "type": "object" + }, + "User": { + "properties": { + "first_name": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "last_name": { + "type": "string" + } + }, + "type": "object" + }, + "User1": { + "properties": { + "first_name": { "type": "string" }, - "validator_config_json": { - "$ref": "#/components/schemas/ValidatorConfigJSON" + "id": { + "type": "integer" }, - "validator_type": { - "description": "Determines when to trigger alert based off value from alert query. Alerts will be triggered with these validator types:\n- Not Null - When the return value is Not NULL, Empty, or 0\n- Operator - When `sql_return_value comparison_operator threshold` is True e.g. `50 <= 75`
Supports the comparison operators <, <=, >, >=, ==, and !=", - "enum": ["not null", "operator"], + "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" }, - "working_timeout": { - "description": "If an alert is staled at a working state, how long until it's state is reseted to error", - "example": 3600, - "minimum": 1, + "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" }, - "Resource": { + "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" + }, + "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" + } + }, + "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": { - "id": { - "type": "string" + "columns": { + "items": { + "type": "string" + }, + "type": "array" }, - "type": { - "enum": ["dashboard"] + "keys": { + "items": { + "enum": [ + "show_columns", + "description_columns", + "label_columns", + "show_title", + "none" + ], + "type": "string" + }, + "type": "array" } }, - "required": ["id", "type"], "type": "object" }, - "RlsRule": { + "get_list_schema": { "properties": { - "clause": { + "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" }, - "dataset": { + "order_direction": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "page": { "type": "integer" - } - }, - "required": ["clause"], - "type": "object" - }, - "Roles": { - "properties": { - "id": { + }, + "page_size": { "type": "integer" }, - "name": { - "type": "string" + "select_columns": { + "items": { + "type": "string" + }, + "type": "array" } }, "type": "object" }, - "Roles1": { + "get_recent_activity_schema": { "properties": { - "id": { - "type": "integer" + "actions": { + "items": { + "type": "string" + }, + "type": "array" }, - "name": { - "type": "string" + "distinct": { + "type": "boolean" + }, + "page": { + "type": "number" + }, + "page_size": { + "type": "number" } }, "type": "object" }, - "SavedQueryRestApi.get": { + "get_related_schema": { "properties": { - "changed_on_delta_humanized": { - "readOnly": true - }, - "created_by": { - "$ref": "#/components/schemas/SavedQueryRestApi.get.User" - }, - "database": { - "$ref": "#/components/schemas/SavedQueryRestApi.get.Database" - }, - "description": { - "nullable": true, - "type": "string" - }, - "id": { - "type": "integer" - }, - "label": { - "maxLength": 256, - "nullable": true, - "type": "string" - }, - "schema": { - "maxLength": 128, - "nullable": true, + "filter": { "type": "string" }, - "sql": { - "nullable": true, - "type": "string" + "include_ids": { + "items": { + "type": "integer" + }, + "type": "array" }, - "sql_tables": { - "readOnly": true + "page": { + "type": "integer" }, - "template_parameters": { - "nullable": true, - "type": "string" + "page_size": { + "type": "integer" } }, "type": "object" }, - "SavedQueryRestApi.get.Database": { + "queries_get_updated_since_schema": { "properties": { - "database_name": { - "maxLength": 250, - "type": "string" - }, - "id": { - "type": "integer" + "last_updated_ms": { + "type": "number" } }, - "required": ["database_name"], + "required": [ + "last_updated_ms" + ], "type": "object" }, - "SavedQueryRestApi.get.User": { + "screenshot_query_schema": { "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "force": { + "type": "boolean" }, - "id": { - "type": "integer" + "thumb_size": { + "items": { + "type": "integer" + }, + "type": "array" }, - "last_name": { - "maxLength": 64, - "type": "string" + "window_size": { + "items": { + "type": "integer" + }, + "type": "array" } }, - "required": ["first_name", "last_name"], "type": "object" }, - "SavedQueryRestApi.get_list": { + "sql_lab_get_results_schema": { "properties": { - "changed_on_delta_humanized": { - "readOnly": true - }, - "created_by": { - "$ref": "#/components/schemas/SavedQueryRestApi.get_list.User" - }, - "created_on": { - "format": "date-time", - "nullable": true, - "type": "string" - }, - "database": { - "$ref": "#/components/schemas/SavedQueryRestApi.get_list.Database" - }, - "db_id": { - "nullable": true, - "type": "integer" - }, - "description": { - "nullable": true, + "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." }, - "extra": { - "readOnly": true + "400": { + "$ref": "#/components/responses/400" }, - "id": { - "type": "integer" + "401": { + "$ref": "#/components/responses/401" }, - "label": { - "maxLength": 256, - "nullable": true, - "type": "string" + "403": { + "$ref": "#/components/responses/403" }, - "last_run_delta_humanized": { - "readOnly": true + "404": { + "$ref": "#/components/responses/404" }, - "rows": { - "nullable": true, - "type": "integer" + "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." }, - "schema": { - "maxLength": 128, - "nullable": true, - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "sql": { - "nullable": true, - "type": "string" + "403": { + "$ref": "#/components/responses/403" }, - "sql_tables": { - "readOnly": true + "404": { + "$ref": "#/components/responses/404" }, - "tags": { - "$ref": "#/components/schemas/SavedQueryRestApi.get_list.Tag" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "SavedQueryRestApi.get_list.Database": { - "properties": { - "database_name": { - "maxLength": 250, - "type": "string" - }, - "id": { - "type": "integer" + "security": [ + { + "jwt": [] } - }, - "required": ["database_name"], - "type": "object" - }, - "SavedQueryRestApi.get_list.Tag": { - "properties": { - "id": { - "type": "integer" + ], + "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" }, - "name": { - "maxLength": 250, - "nullable": true, - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "type": { - "enum": [1, 2, 3, 4] - } - }, - "type": "object" - }, - "SavedQueryRestApi.get_list.User": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "404": { + "$ref": "#/components/responses/404" }, - "id": { - "type": "integer" + "422": { + "$ref": "#/components/responses/422" }, - "last_name": { - "maxLength": 64, - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "required": ["first_name", "last_name"], - "type": "object" + "security": [ + { + "jwt": [] + } + ], + "summary": "Delete multiple annotation layers in a bulk operation", + "tags": [ + "Annotation Layers" + ] }, - "SavedQueryRestApi.post": { - "properties": { - "db_id": { - "nullable": true, - "type": "integer" - }, - "description": { - "nullable": true, - "type": "string" + "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" }, - "label": { - "maxLength": 256, - "nullable": true, - "type": "string" + "400": { + "$ref": "#/components/responses/400" }, - "schema": { - "maxLength": 128, - "nullable": true, - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "sql": { - "nullable": true, - "type": "string" + "422": { + "$ref": "#/components/responses/422" }, - "template_parameters": { - "nullable": true, - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" + "security": [ + { + "jwt": [] + } + ], + "summary": "Get a list of annotation layers", + "tags": [ + "Annotation Layers" + ] }, - "SavedQueryRestApi.put": { - "properties": { - "db_id": { - "nullable": true, - "type": "integer" + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + } + } }, - "description": { - "nullable": true, - "type": "string" + "description": "Annotation Layer schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + } + }, + "type": "object" + } + } + }, + "description": "Annotation added" }, - "label": { - "maxLength": 256, - "nullable": true, - "type": "string" + "400": { + "$ref": "#/components/responses/400" }, - "schema": { - "maxLength": 128, - "nullable": true, - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "sql": { - "nullable": true, - "type": "string" + "404": { + "$ref": "#/components/responses/404" }, - "template_parameters": { - "nullable": true, - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "SchemasResponseSchema": { - "properties": { - "result": { - "items": { - "description": "A database schema name", - "type": "string" - }, - "type": "array" + "security": [ + { + "jwt": [] } - }, - "type": "object" - }, - "SelectStarResponseSchema": { - "properties": { - "result": { - "description": "SQL select star", - "type": "string" + ], + "summary": "Create an annotation layer", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/_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" } - }, - "type": "object" - }, - "Slice": { - "properties": { - "cache_timeout": { - "description": "Duration (in seconds) of the caching timeout for this chart.", - "type": "integer" - }, - "certification_details": { - "description": "Details of the certification.", - "type": "string" - }, - "certified_by": { - "description": "Person or group that has certified this dashboard.", - "type": "string" - }, - "changed_on": { - "description": "Timestamp of the last modification.", - "format": "date-time", - "type": "string" - }, - "changed_on_humanized": { - "description": "Timestamp of the last modification in human readable form.", - "type": "string" - }, - "datasource": { - "description": "Datasource identifier.", - "type": "string" - }, - "description": { - "description": "Slice description.", - "type": "string" - }, - "description_markeddown": { - "description": "Sanitized HTML version of the chart description.", - "type": "string" - }, - "edit_url": { - "description": "The URL for editing the slice.", - "type": "string" - }, - "form_data": { - "description": "Form data associated with the slice.", - "type": "object" - }, - "is_managed_externally": { - "description": "If the chart is managed outside externally.", - "type": "boolean" - }, - "modified": { - "description": "Last modification in human readable form.", - "type": "string" - }, - "owners": { - "description": "Owners identifiers.", - "items": { - "type": "integer" + ], + "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" + } + } }, - "type": "array" + "description": "Item from Model" }, - "query_context": { - "description": "The context associated with the query.", - "type": "object" + "400": { + "$ref": "#/components/responses/400" }, - "slice_id": { - "description": "The slice ID.", - "type": "integer" + "401": { + "$ref": "#/components/responses/401" }, - "slice_name": { - "description": "The slice name.", - "type": "string" + "422": { + "$ref": "#/components/responses/422" }, - "slice_url": { - "description": "The slice URL.", - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "StopQuerySchema": { - "properties": { - "client_id": { - "type": "string" + "security": [ + { + "jwt": [] } - }, - "type": "object" - }, - "TableExtraMetadataResponseSchema": { - "properties": { - "clustering": { - "type": "object" - }, - "metadata": { - "type": "object" + ], + "summary": "Get metadata information about this API resource", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/related/{column_name}": { + "get": { + "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" + } }, - "partitions": { - "type": "object" + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } - }, - "type": "object" - }, - "TableMetadataColumnsResponse": { - "properties": { - "duplicates_constraint": { - "type": "string" - }, - "keys": { - "description": "", - "items": { - "type": "string" + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RelatedResponseSchema" + } + } }, - "type": "array" + "description": "Related column data" }, - "longType": { - "description": "The actual backend long type for the column", - "type": "string" + "400": { + "$ref": "#/components/responses/400" }, - "name": { - "description": "The column name", - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "type": { - "description": "The column type", - "type": "string" + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "TableMetadataForeignKeysIndexesResponse": { - "properties": { - "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" - }, - "options": { - "$ref": "#/components/schemas/TableMetadataOptionsResponse" - }, - "referred_columns": { - "items": { - "type": "string" + "security": [ + { + "jwt": [] + } + ], + "summary": "Get related fields data", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/{pk}": { + "delete": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } }, - "type": "array" + "description": "Item deleted" }, - "referred_schema": { - "type": "string" + "404": { + "$ref": "#/components/responses/404" }, - "referred_table": { - "type": "string" + "422": { + "$ref": "#/components/responses/422" }, - "type": { - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" + "security": [ + { + "jwt": [] + } + ], + "summary": "Delete annotation layer", + "tags": [ + "Annotation Layers" + ] }, - "TableMetadataOptionsResponse": { - "properties": { - "deferrable": { - "type": "boolean" + "get": { + "description": "Get an item model", + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } }, - "initially": { - "type": "boolean" + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "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": { + "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" + } + }, + "type": "object" + } + } + }, + "description": "Item from Model" + }, + "400": { + "$ref": "#/components/responses/400" }, - "match": { - "type": "boolean" + "401": { + "$ref": "#/components/responses/401" }, - "ondelete": { - "type": "boolean" + "404": { + "$ref": "#/components/responses/404" }, - "onupdate": { - "type": "boolean" + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" + "security": [ + { + "jwt": [] + } + ], + "summary": "Get an annotation layer", + "tags": [ + "Annotation Layers" + ] }, - "TableMetadataPrimaryKeyResponse": { - "properties": { - "column_names": { - "items": { - "description": "A list of column names that compose the primary key", - "type": "string" + "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.put" + } + } + }, + "description": "Annotation schema", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationLayerRestApi.put" + } + }, + "type": "object" + } + } }, - "type": "array" + "description": "Annotation changed" }, - "name": { - "description": "The primary key index name", - "type": "string" + "400": { + "$ref": "#/components/responses/400" }, - "type": { - "type": "string" + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "TableMetadataResponseSchema": { - "properties": { - "columns": { - "description": "A list of columns and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataColumnsResponse" - }, - "type": "array" + "security": [ + { + "jwt": [] + } + ], + "summary": "Update an annotation layer", + "tags": [ + "Annotation Layers" + ] + } + }, + "/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" + } }, - "foreignKeys": { - "description": "A list of foreign keys and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" + } + } }, - "type": "array" - }, - "indexes": { - "description": "A list of indexes and their metadata", - "items": { - "$ref": "#/components/schemas/TableMetadataForeignKeysIndexesResponse" + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } }, - "type": "array" - }, - "name": { - "description": "The name of the table", - "type": "string" + "description": "Annotations bulk delete" }, - "primaryKey": { - "allOf": [ - { - "$ref": "#/components/schemas/TableMetadataPrimaryKeyResponse" - } - ], - "description": "Primary keys metadata" + "401": { + "$ref": "#/components/responses/401" }, - "selectStar": { - "description": "SQL select star", - "type": "string" - } - }, - "type": "object" - }, - "Tables": { - "properties": { - "id": { - "type": "integer" + "404": { + "$ref": "#/components/responses/404" }, - "schema": { - "type": "string" + "422": { + "$ref": "#/components/responses/422" }, - "table_name": { - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" + "security": [ + { + "jwt": [] + } + ], + "summary": "Bulk delete annotation layers", + "tags": [ + "Annotation Layers" + ] }, - "Tag": { - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" + "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": "pk", + "required": true, + "schema": { + "type": "integer" + } }, - "type": { - "enum": [1, 2, 3, 4] + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } + } + }, + "in": "query", + "name": "q" } - }, - "type": "object" - }, - "Tag1": { - "properties": { - "id": { - "type": "integer" + ], + "responses": { + "200": { + "content": { + "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" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "Items from Annotations" }, - "name": { - "type": "string" + "400": { + "$ref": "#/components/responses/400" }, - "type": { - "enum": [1, 2, 3, 4] - } - }, - "type": "object" - }, - "TagGetResponseSchema": { - "properties": { - "id": { - "type": "integer" + "401": { + "$ref": "#/components/responses/401" }, - "name": { - "type": "string" + "422": { + "$ref": "#/components/responses/422" }, - "type": { - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" + "security": [ + { + "jwt": [] + } + ], + "summary": "Get a list of annotation layers", + "tags": [ + "Annotation Layers" + ] }, - "TagRestApi.get": { - "properties": { - "changed_by": { - "$ref": "#/components/schemas/TagRestApi.get.User1" + "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" + } + } }, - "changed_on_delta_humanized": { - "readOnly": true + "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" }, - "created_by": { - "$ref": "#/components/schemas/TagRestApi.get.User" + "400": { + "$ref": "#/components/responses/400" }, - "id": { - "type": "integer" + "401": { + "$ref": "#/components/responses/401" }, - "name": { - "maxLength": 250, - "nullable": true, - "type": "string" + "404": { + "$ref": "#/components/responses/404" }, - "type": { - "enum": [1, 2, 3, 4] + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "TagRestApi.get.User": { - "properties": { - "active": { - "nullable": true, - "type": "boolean" - }, - "changed_on": { - "format": "date-time", - "nullable": true, - "type": "string" - }, - "created_on": { - "format": "date-time", - "nullable": true, - "type": "string" - }, - "email": { - "maxLength": 64, - "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" + "security": [ + { + "jwt": [] + } + ], + "summary": "Create an annotation layer", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/annotation_layer/{pk}/annotation/{annotation_id}": { + "delete": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } }, - "last_name": { - "maxLength": 64, - "type": "string" + { + "description": "The annotation pk for this annotation", + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Item deleted" }, - "login_count": { - "nullable": true, - "type": "integer" + "404": { + "$ref": "#/components/responses/404" }, - "password": { - "maxLength": 256, - "nullable": true, - "type": "string" + "422": { + "$ref": "#/components/responses/422" }, - "username": { - "maxLength": 64, - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "required": ["email", "first_name", "last_name", "username"], - "type": "object" + "security": [ + { + "jwt": [] + } + ], + "summary": "Delete annotation layer", + "tags": [ + "Annotation Layers" + ] }, - "TagRestApi.get.User1": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "get": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } }, - "last_name": { - "maxLength": 64, - "type": "string" + { + "description": "The annotation pk", + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_item_schema" + } + } + }, + "in": "query", + "name": "q" } - }, - "required": ["first_name", "last_name"], - "type": "object" - }, - "TagRestApi.get_list": { - "properties": { - "changed_by": { - "$ref": "#/components/schemas/TagRestApi.get_list.User1" + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "description": "The item id", + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/AnnotationRestApi.get" + } + }, + "type": "object" + } + } + }, + "description": "Item from Model" }, - "changed_on_delta_humanized": { - "readOnly": true + "400": { + "$ref": "#/components/responses/400" }, - "created_by": { - "$ref": "#/components/schemas/TagRestApi.get_list.User" + "401": { + "$ref": "#/components/responses/401" }, - "id": { - "type": "integer" + "404": { + "$ref": "#/components/responses/404" }, - "name": { - "maxLength": 250, - "nullable": true, - "type": "string" + "422": { + "$ref": "#/components/responses/422" }, - "type": { - "enum": [1, 2, 3, 4] + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "TagRestApi.get_list.User": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" - }, - "last_name": { - "maxLength": 64, - "type": "string" + "security": [ + { + "jwt": [] } - }, - "required": ["first_name", "last_name"], - "type": "object" + ], + "summary": "Get an annotation layer", + "tags": [ + "Annotation Layers" + ] }, - "TagRestApi.get_list.User1": { - "properties": { - "first_name": { - "maxLength": 64, - "type": "string" + "put": { + "parameters": [ + { + "description": "The annotation layer pk for this annotation", + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } }, - "last_name": { - "maxLength": 64, - "type": "string" + { + "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/AnnotationRestApi.put" + } + } + }, + "description": "Annotation schema", + "required": true }, - "required": ["first_name", "last_name"], - "type": "object" - }, - "TagRestApi.post": { - "properties": { - "tags": { - "items": { - "type": "string" + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/AnnotationRestApi.put" + } + }, + "type": "object" + } + } }, - "type": "array" - } - }, - "type": "object" - }, - "TagRestApi.put": { - "properties": { - "id": { - "type": "integer" - } - }, - "type": "object" - }, - "TaggedObjectEntityResponseSchema": { - "properties": { - "changed_on": { - "format": "date-time", - "type": "string" - }, - "created_by": { - "$ref": "#/components/schemas/User" - }, - "creator": { - "type": "string" + "description": "Annotation changed" }, - "id": { - "type": "integer" + "400": { + "$ref": "#/components/responses/400" }, - "name": { - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "type": { - "type": "string" + "404": { + "$ref": "#/components/responses/404" }, - "url": { - "type": "string" - } - }, - "type": "object" - }, - "TemporaryCachePostSchema": { - "properties": { - "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" + "500": { + "$ref": "#/components/responses/500" } }, - "required": ["value"], - "type": "object" - }, - "User": { - "properties": { - "first_name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "last_name": { - "type": "string" + "security": [ + { + "jwt": [] } - }, - "type": "object" - }, - "User1": { - "properties": { - "first_name": { - "type": "string" - }, - "id": { - "type": "integer" + ], + "summary": "Update an annotation layer", + "tags": [ + "Annotation Layers" + ] + } + }, + "/api/v1/apple/health": { + "get": { + "description": "Endpoint for checking the health status of the metastore and cache", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppleHealthResponseSchema" + } + } + }, + "description": "The" }, - "last_name": { - "type": "string" + "400": { + "$ref": "#/components/responses/400" }, - "username": { - "type": "string" - } - }, - "type": "object" - }, - "User2": { - "properties": { - "first_name": { - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "last_name": { - "type": "string" + "403": { + "$ref": "#/components/responses/403" }, - "username": { - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "UserResponseSchema": { - "properties": { - "email": { - "type": "string" - }, - "first_name": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "is_active": { - "type": "boolean" + "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": { + "content": { + "application/zip": { + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "description": "ZIP file" }, - "is_anonymous": { - "type": "boolean" + "401": { + "$ref": "#/components/responses/401" }, - "last_name": { - "type": "string" + "404": { + "$ref": "#/components/responses/404" }, - "username": { - "type": "string" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "ValidateSQLRequest": { - "properties": { - "schema": { - "nullable": true, - "type": "string" - }, - "sql": { - "description": "SQL statement to validate", - "type": "string" - }, - "template_params": { - "nullable": true, - "type": "object" + "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" + }, + "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 }, - "required": ["sql"], - "type": "object" - }, - "ValidateSQLResponse": { - "properties": { - "end_column": { - "type": "integer" + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Assets import result" }, - "line_number": { - "type": "integer" + "400": { + "$ref": "#/components/responses/400" }, - "message": { - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "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" + "422": { + "$ref": "#/components/responses/422" }, - "threshold": { - "type": "number" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "advanced_data_type_convert_schema": { - "properties": { - "type": { - "default": "port", - "type": "string" - }, - "values": { - "items": { - "default": "http" + "security": [ + { + "jwt": [] + } + ], + "summary": "Import multiple assets", + "tags": [ + "Import/export" + ] + } + }, + "/api/v1/async_event/": { + "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", + "in": "query", + "name": "last_id", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "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" + } + } }, - "minItems": 1, - "type": "array" + "description": "Async event results" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "$ref": "#/components/responses/500" } }, - "required": ["type", "values"], - "type": "object" - }, - "database_schemas_query_schema": { - "properties": { - "force": { - "type": "boolean" + "security": [ + { + "jwt": [] } - }, - "type": "object" - }, - "database_tables_query_schema": { - "properties": { - "force": { - "type": "boolean" + ], + "summary": "Read off of the Redis events stream", + "tags": [ + "AsyncEventsRestApi" + ] + } + }, + "/api/v1/available_domains/": { + "get": { + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "$ref": "#/components/schemas/AvailableDomainsSchema" + } + }, + "type": "object" + } + } + }, + "description": "a list of available domains" }, - "schema_name": { - "type": "string" + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" } }, - "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" + "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 }, - "type": "array" - }, - "get_fav_star_ids_schema": { - "items": { - "type": "integer" + "responses": { + "201": { + "description": "cache was successfully invalidated" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "500": { + "$ref": "#/components/responses/500" + } }, - "type": "array" - }, - "get_info_schema": { - "properties": { - "add_columns": { - "additionalProperties": { - "properties": { - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "security": [ + { + "jwt": [] + } + ], + "summary": "Invalidate cache records and remove the database records", + "tags": [ + "CacheRestApi" + ] + } + }, + "/api/v1/chart/": { + "delete": { + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_delete_ids_schema" } - }, - "type": "object" + } }, - "type": "object" - }, - "edit_columns": { - "additionalProperties": { - "properties": { - "page": { - "type": "integer" - }, - "page_size": { - "type": "integer" + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } - }, - "type": "object" + } }, - "type": "object" + "description": "Charts bulk delete" }, - "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" + "401": { + "$ref": "#/components/responses/401" }, - "keys": { - "items": { - "enum": [ - "show_columns", - "description_columns", - "label_columns", - "show_title", - "none" - ], - "type": "string" - }, - "type": "array" + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" + "security": [ + { + "jwt": [] + } + ], + "summary": "Bulk delete charts", + "tags": [ + "Charts" + ] }, - "get_list_schema": { - "properties": { - "columns": { - "items": { - "type": "string" + "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" + } + } }, - "type": "array" - }, - "filters": { - "items": { - "properties": { - "col": { - "type": "string" - }, - "opr": { - "type": "string" - }, - "value": { - "anyOf": [ - { + "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" }, - { - "type": "boolean" + "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" } - }, - "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" + "description": "Items from Model" }, - "order_column": { - "type": "string" + "400": { + "$ref": "#/components/responses/400" }, - "order_direction": { - "enum": ["asc", "desc"], - "type": "string" + "401": { + "$ref": "#/components/responses/401" }, - "page": { - "type": "integer" + "422": { + "$ref": "#/components/responses/422" }, - "page_size": { - "type": "integer" + "500": { + "$ref": "#/components/responses/500" } }, - "type": "object" - }, - "get_recent_activity_schema": { - "properties": { - "actions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "distinct": { - "type": "boolean" - }, - "page": { - "type": "number" - }, - "page_size": { - "type": "number" + "security": [ + { + "jwt": [] } - }, - "type": "object" + ], + "summary": "Get a list of charts", + "tags": [ + "Charts" + ] }, - "get_related_schema": { - "properties": { - "filter": { - "type": "string" + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartRestApi.post" + } + } }, - "include_ids": { - "items": { - "type": "integer" + "description": "Chart schema", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/ChartRestApi.post" + } + }, + "type": "object" + } + } }, - "type": "array" + "description": "Chart added" }, - "page": { - "type": "integer" + "400": { + "$ref": "#/components/responses/400" }, - "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" + "401": { + "$ref": "#/components/responses/401" }, - "thumb_size": { - "items": { - "type": "integer" - }, - "type": "array" + "403": { + "$ref": "#/components/responses/403" }, - "window_size": { - "items": { - "type": "integer" - }, - "type": "array" - } - }, - "type": "object" - }, - "sql_lab_get_results_schema": { - "properties": { - "key": { - "type": "string" + "422": { + "$ref": "#/components/responses/422" + }, + "500": { + "$ref": "#/components/responses/500" } }, - "required": ["key"], - "type": "object" - }, - "thumbnail_query_schema": { - "properties": { - "force": { - "type": "boolean" + "security": [ + { + "jwt": [] } - }, - "type": "object" + ], + "summary": "Create a new chart", + "tags": [ + "Charts" + ] } }, - "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/chart/_info": { "get": { + "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" } } }, @@ -9775,11 +13342,106 @@ "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" + }, + "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": [ + "Charts" + ] + } + }, + "/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/ChartDataResponseSchema" + } + } + }, + "description": "Query result" + }, + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" + } + } + }, + "description": "Async job details" }, "400": { "$ref": "#/components/responses/400" @@ -9787,9 +13449,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -9799,31 +13458,38 @@ "jwt": [] } ], - "summary": "Returns a AdvancedDataTypeResponse object populated with the passed in args.", - "tags": ["Advanced Data Type"] + "summary": "Return payload data response for the given query", + "tags": [ + "Charts" + ] } }, - "/api/v1/advanced_data_type/types": { + "/api/v1/chart/data/{cache_key}": { "get": { - "description": "Returns a list of available advanced data types.", + "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" + } + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/ChartDataResponseSchema" } } }, - "description": "a successful return of the available advanced data types has taken place." + "description": "Query result" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -9831,6 +13497,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -9840,18 +13509,20 @@ "jwt": [] } ], - "tags": ["Advanced Data Type"] + "summary": "Return payload data response for the given query", + "tags": [ + "Charts" + ] } }, - "/api/v1/annotation_layer/": { - "delete": { - "description": "Deletes multiple annotation layers in a bulk operation.", + "/api/v1/chart/export/": { + "get": { "parameters": [ { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/get_delete_ids_schema" + "$ref": "#/components/schemas/get_export_ids_schema" } } }, @@ -9862,18 +13533,17 @@ "responses": { "200": { "content": { - "application/json": { + "application/zip": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "format": "binary", + "type": "string" } } }, - "description": "CSS templates bulk delete" + "description": "A zip file with chart(s), dataset(s) and database(s) as YAML" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" @@ -9881,9 +13551,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -9893,16 +13560,20 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] - }, + "summary": "Download multiple charts as YAML files", + "tags": [ + "Charts" + ] + } + }, + "/api/v1/chart/favorite_status/": { "get": { - "description": "Get 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" + "$ref": "#/components/schemas/get_fav_star_ids_schema" } } }, @@ -9915,70 +13586,11 @@ "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" + "$ref": "#/components/schemas/GetFavStarIdsSchema" } } }, - "description": "Items from Model" + "description": "None" }, "400": { "$ref": "#/components/responses/400" @@ -9986,8 +13598,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -9998,123 +13610,66 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] - }, + "summary": "Check favorited charts for current user", + "tags": [ + "Charts" + ] + } + }, + "/api/v1/chart/import/": { "post": { - "description": "Create an Annotation layer", "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.post" + "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": "Annotation Layer schema", "required": true }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.post" - } - }, - "type": "object" - } - } - }, - "description": "Annotation added" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "tags": ["Annotation Layers"] - } - }, - "/api/v1/annotation_layer/_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" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Chart import result" }, "400": { "$ref": "#/components/responses/400" @@ -10134,11 +13689,15 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] + "summary": "Import chart(s) with associated datasets and databases", + "tags": [ + "Charts" + ] } }, - "/api/v1/annotation_layer/related/{column_name}": { + "/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", @@ -10189,15 +13748,62 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] + "summary": "Get related fields data", + "tags": [ + "Charts" + ] } }, - "/api/v1/annotation_layer/{pk}": { + "/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" + } + } + }, + "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": { + "$ref": "#/components/schemas/ChartCacheWarmUpResponseSchema" + } + } + }, + "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 the chart", + "tags": [ + "Charts" + ] + } + }, + "/api/v1/chart/{pk}": { "delete": { - "description": "Delete Annotation layer", "parameters": [ { - "description": "The annotation layer pk for this annotation", "in": "path", "name": "pk", "required": true, @@ -10220,7 +13826,13 @@ } } }, - "description": "Item deleted" + "description": "Chart delete" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" }, "404": { "$ref": "#/components/responses/404" @@ -10237,10 +13849,13 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] + "summary": "Delete a chart", + "tags": [ + "Charts" + ] }, "get": { - "description": "Get an Annotation layer", + "description": "Get an item model", "parameters": [ { "in": "path", @@ -10293,7 +13908,7 @@ "type": "object" }, "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.get" + "$ref": "#/components/schemas/ChartRestApi.get" }, "show_columns": { "description": "A list of columns", @@ -10335,13 +13950,224 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] - }, - "put": { - "description": "Update an Annotation layer", + "summary": "Get a chart detail information", + "tags": [ + "Charts" + ] + }, + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartRestApi.put" + } + } + }, + "description": "Chart schema", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/ChartRestApi.put" + } + }, + "type": "object" + } + } + }, + "description": "Chart 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" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Update a chart", + "tags": [ + "Charts" + ] + } + }, + "/api/v1/chart/{pk}/cache_screenshot/": { + "get": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/screenshot_query_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" + } + } + }, + "description": "Chart async result" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Compute and cache a screenshot", + "tags": [ + "Charts" + ] + } + }, + "/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/ChartDataResponseSchema" + } + } + }, + "description": "Query result" + }, + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" + } + } + }, + "description": "Async job details" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Return payload data response for a chart", + "tags": [ + "Charts" + ] + } + }, + "/api/v1/chart/{pk}/favorites/": { + "delete": { "parameters": [ { - "description": "The annotation layer pk for this annotation", "in": "path", "name": "pk", "required": true, @@ -10350,38 +14176,21 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.put" - } - } - }, - "description": "Annotation schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/AnnotationLayerRestApi.put" + "type": "object" } }, "type": "object" } } }, - "description": "Annotation changed" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Chart removed from favorites" }, "401": { "$ref": "#/components/responses/401" @@ -10398,32 +14207,20 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] - } - }, - "/api/v1/annotation_layer/{pk}/annotation/": { - "delete": { - "description": "Deletes multiple annotation in a bulk operation.", + "summary": "Remove the chart from the user favorite list", + "tags": [ + "Charts" + ] + }, + "post": { "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_delete_ids_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -10432,15 +14229,15 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "type": "object" } }, "type": "object" } } }, - "description": "Annotations bulk delete" + "description": "Chart added to favorites" }, "401": { "$ref": "#/components/responses/401" @@ -10448,9 +14245,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -10460,13 +14254,16 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] - }, + "summary": "Mark the chart as favorite for the current user", + "tags": [ + "Charts" + ] + } + }, + "/api/v1/chart/{pk}/screenshot/{digest}/": { "get": { - "description": "Get 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": "pk", "required": true, @@ -10475,47 +14272,25 @@ } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { "200": { "content": { - "application/json": { + "image/*": { "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" - }, - "type": "array" - } - }, - "type": "object" + "format": "binary", + "type": "string" } } }, - "description": "Items from Annotations" + "description": "Chart thumbnail image" }, "400": { "$ref": "#/components/responses/400" @@ -10523,8 +14298,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -10535,50 +14310,47 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] - }, - "post": { - "description": "Create an Annotation layer", + "summary": "Get a computed screenshot from cache", + "tags": [ + "Charts" + ] + } + }, + "/api/v1/chart/{pk}/thumbnail/{digest}/": { + "get": { + "description": "Compute or get already computed chart thumbnail from cache.", "parameters": [ { - "description": "The annotation layer pk for this annotation", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } + }, + { + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AnnotationRestApi.post" - } - } - }, - "description": "Annotation schema", - "required": true - }, "responses": { - "201": { + "200": { "content": { - "application/json": { + "image/*": { "schema": { - "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/AnnotationRestApi.post" - } - }, - "type": "object" + "format": "binary", + "type": "string" } } }, - "description": "Annotation added" + "description": "Chart thumbnail image" + }, + "302": { + "description": "Redirects to the current digest" }, "400": { "$ref": "#/components/responses/400" @@ -10598,30 +14370,25 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] + "summary": "Get chart thumbnail", + "tags": [ + "Charts" + ] } }, - "/api/v1/annotation_layer/{pk}/annotation/{annotation_id}": { + "/api/v1/css_template/": { "delete": { - "description": "Delete Annotation layer", "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": { @@ -10638,7 +14405,10 @@ } } }, - "description": "Item deleted" + "description": "CSS templates bulk delete" + }, + "401": { + "$ref": "#/components/responses/401" }, "404": { "$ref": "#/components/responses/404" @@ -10655,34 +14425,19 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] + "summary": "Bulk delete CSS templates", + "tags": [ + "CSS Templates" + ] }, "get": { - "description": "Get an Annotation layer", + "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": [ - { - "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" } } }, @@ -10696,19 +14451,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/CssTemplateRestApi.get_list" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -10716,9 +14521,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -10731,59 +14533,41 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] + "summary": "Get a list of CSS templates", + "tags": [ + "CSS Templates" + ] }, - "put": { - "description": "Update an Annotation layer", - "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/CssTemplateRestApi.post" } } }, - "description": "Annotation schema", + "description": "Model schema", "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { "id": { - "type": "number" + "type": "string" }, "result": { - "$ref": "#/components/schemas/AnnotationRestApi.put" + "$ref": "#/components/schemas/CssTemplateRestApi.post" } }, "type": "object" } } }, - "description": "Annotation changed" + "description": "Item inserted" }, "400": { "$ref": "#/components/responses/400" @@ -10791,8 +14575,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -10803,29 +14587,83 @@ "jwt": [] } ], - "tags": ["Annotation Layers"] + "summary": "Create a CSS template", + "tags": [ + "CSS Templates" + ] } }, - "/api/v1/assets/export/": { + "/api/v1/css_template/_info": { "get": { - "description": "Returns a ZIP file with all the Superset assets (databases, datasets, charts, dashboards, saved queries) as YAML files.", + "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/zip": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "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": "ZIP file" + "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" @@ -10836,59 +14674,45 @@ "jwt": [] } ], - "tags": ["Import/export"] + "summary": "Get metadata information about this API resource", + "tags": [ + "CSS Templates" + ] } }, - "/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/css_template/related/{column_name}": { + "get": { + "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Assets import result" + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -10896,8 +14720,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -10908,19 +14732,21 @@ "jwt": [] } ], - "tags": ["Import/export"] + "summary": "Get related fields data", + "tags": [ + "CSS Templates" + ] } }, - "/api/v1/async_event/": { - "get": { - "description": "Reads off of the Redis events stream, using the user's JWT token and optional query params for last event received.", + "/api/v1/css_template/{pk}": { + "delete": { "parameters": [ { - "description": "Last ID received by the client", - "in": "query", - "name": "last_id", + "in": "path", + "name": "pk", + "required": true, "schema": { - "type": "string" + "type": "integer" } } ], @@ -10930,47 +14756,21 @@ "application/json": { "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" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Async event results" + "description": "Item deleted" }, - "401": { - "$ref": "#/components/responses/401" + "404": { + "$ref": "#/components/responses/404" + }, + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -10981,33 +14781,100 @@ "jwt": [] } ], - "tags": ["AsyncEventsRestApi"] - } - }, - "/api/v1/available_domains/": { - "get": { - "description": "Get all available domains", + "summary": "Delete a CSS template", + "tags": [ + "CSS Templates" + ] + }, + "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" + } + } + }, + "in": "query", + "name": "q" + } + ], "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": { + "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/AvailableDomainsSchema" + "$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": "a list of available domains" + "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" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -11015,30 +14882,61 @@ "jwt": [] } ], - "tags": ["Available Domains"] - } - }, - "/api/v1/cachekey/invalidate": { - "post": { - "description": "Takes a list of datasources, finds the associated cache records and invalidates them and removes the database records", + "summary": "Get a CSS template", + "tags": [ + "CSS Templates" + ] + }, + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CacheInvalidationRequestSchema" + "$ref": "#/components/schemas/CssTemplateRestApi.put" } } }, - "description": "A list of datasources uuid or the tuples of database and datasource names", + "description": "Model schema", "required": true }, "responses": { - "201": { - "description": "cache was successfully invalidated" + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "$ref": "#/components/schemas/CssTemplateRestApi.put" + } + }, + "type": "object" + } + } + }, + "description": "Item changed" }, "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" } @@ -11048,12 +14946,14 @@ "jwt": [] } ], - "tags": ["CacheRestApi"] + "summary": "Update a CSS template", + "tags": [ + "CSS Templates" + ] } }, - "/api/v1/chart/": { + "/api/v1/dashboard/": { "delete": { - "description": "Deletes multiple Charts in a bulk operation.", "parameters": [ { "content": { @@ -11081,7 +14981,7 @@ } } }, - "description": "Charts bulk delete" + "description": "Dashboard bulk delete" }, "401": { "$ref": "#/components/responses/401" @@ -11104,10 +15004,13 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Bulk delete dashboards", + "tags": [ + "Dashboards" + ] }, "get": { - "description": "Get a list of charts, 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": { @@ -11180,7 +15083,7 @@ "result": { "description": "The result from the get list query", "items": { - "$ref": "#/components/schemas/ChartRestApi.get_list" + "$ref": "#/components/schemas/DashboardRestApi.get_list" }, "type": "array" } @@ -11209,19 +15112,21 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Get a list of dashboards", + "tags": [ + "Dashboards" + ] }, "post": { - "description": "Create a new Chart.", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartRestApi.post" + "$ref": "#/components/schemas/DashboardRestApi.post" } } }, - "description": "Chart schema", + "description": "Dashboard schema", "required": true }, "responses": { @@ -11234,14 +15139,14 @@ "type": "number" }, "result": { - "$ref": "#/components/schemas/ChartRestApi.post" + "$ref": "#/components/schemas/DashboardRestApi.post" } }, "type": "object" } } }, - "description": "Chart added" + "description": "Dashboard added" }, "400": { "$ref": "#/components/responses/400" @@ -11249,11 +15154,8 @@ "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" @@ -11264,12 +15166,15 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Create a new dashboard", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/chart/_info": { + "/api/v1/dashboard/_info": { "get": { - "description": "Several metadata information about chart API endpoints.", + "description": "Get metadata information about this API resource", "parameters": [ { "content": { @@ -11298,135 +15203,37 @@ "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": "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": [] - } - ], - "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.", - "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/ChartDataResponseSchema" - } - } - }, - "description": "Query result" - }, - "202": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" - } - } - }, - "description": "Async job details" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "tags": ["Charts"] - } - }, - "/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" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartDataResponseSchema" + "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": "Query result" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -11434,9 +15241,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -11449,12 +15253,14 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Get metadata information about this API resource", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/chart/export/": { + "/api/v1/dashboard/export/": { "get": { - "description": "Exports multiple charts and downloads them as YAML files", "parameters": [ { "content": { @@ -11471,14 +15277,13 @@ "responses": { "200": { "content": { - "application/zip": { + "text/plain": { "schema": { - "format": "binary", "type": "string" } } }, - "description": "A zip file with chart(s), dataset(s) and database(s) as YAML" + "description": "Dashboard export" }, "400": { "$ref": "#/components/responses/400" @@ -11489,6 +15294,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -11498,12 +15306,14 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Download multiple dashboards as YAML files", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/chart/favorite_status/": { + "/api/v1/dashboard/favorite_status/": { "get": { - "description": "Check favorited dashboards for current user", "parameters": [ { "content": { @@ -11546,10 +15356,13 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Check favorited dashboards for current user", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/chart/import/": { + "/api/v1/dashboard/import/": { "post": { "requestBody": { "content": { @@ -11557,12 +15370,12 @@ "schema": { "properties": { "formData": { - "description": "upload file (ZIP)", + "description": "upload file (ZIP or JSON)", "format": "binary", "type": "string" }, "overwrite": { - "description": "overwrite existing charts?", + "description": "overwrite existing dashboards?", "type": "boolean" }, "passwords": { @@ -11602,7 +15415,7 @@ } } }, - "description": "Chart import result" + "description": "Dashboard import result" }, "400": { "$ref": "#/components/responses/400" @@ -11622,31 +15435,22 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Import dashboard(s) with associated charts/datasets/databases", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/chart/related/{column_name}": { + "/api/v1/dashboard/permalink/{key}": { "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": "key", "required": true, "schema": { "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -11654,11 +15458,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "properties": { + "state": { + "description": "The stored state", + "type": "object" + } + }, + "type": "object" } } }, - "description": "Related column data" + "description": "Returns the stored state." }, "400": { "$ref": "#/components/responses/400" @@ -11669,6 +15479,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -11678,64 +15491,34 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Get dashboard's permanent link state", + "tags": [ + "Dashboard Permanent Link" + ] } }, - "/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/dashboard/related/{column_name}": { + "get": { + "description": "Get a list of all possible owners for a dashboard.", + "parameters": [ + { + "in": "path", + "name": "column_name", + "required": true, + "schema": { + "type": "string" } }, - "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": { - "$ref": "#/components/schemas/ChartCacheWarmUpResponseSchema" + "$ref": "#/components/schemas/get_related_schema" } } }, - "description": "Each chart's warmup status" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "404": { - "$ref": "#/components/responses/404" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Warms up the cache for the chart", - "tags": ["Charts"] - } - }, - "/api/v1/chart/{pk}": { - "delete": { - "description": "Deletes a Chart.", - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } + "in": "query", + "name": "q" } ], "responses": { @@ -11743,29 +15526,21 @@ "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Chart 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" } @@ -11775,29 +15550,23 @@ "jwt": [] } ], - "tags": ["Charts"] - }, + "summary": "Get related fields data", + "tags": [ + "Dashboards" + ] + } + }, + "/api/v1/dashboard/{id_or_slug}": { "get": { - "description": "Get a chart detail information.", "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" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_item_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -11806,51 +15575,15 @@ "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/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" + "$ref": "#/components/schemas/DashboardGetResponseSchema" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Dashboard" }, "400": { "$ref": "#/components/responses/400" @@ -11858,14 +15591,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": [ @@ -11873,49 +15603,42 @@ "jwt": [] } ], - "tags": ["Charts"] - }, - "put": { - "description": "Changes a Chart.", + "summary": "Get a dashboard detail information", + "tags": [ + "Dashboards" + ] + } + }, + "/api/v1/dashboard/{id_or_slug}/charts": { + "get": { "parameters": [ { "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartRestApi.put" - } - } - }, - "description": "Chart schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/ChartRestApi.put" + "items": { + "$ref": "#/components/schemas/ChartEntityResponseSchema" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Chart changed" + "description": "Dashboard chart definitions" }, "400": { "$ref": "#/components/responses/400" @@ -11928,12 +15651,6 @@ }, "404": { "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" } }, "security": [ @@ -11941,43 +15658,53 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Get a dashboard's chart definitions.", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/chart/{pk}/cache_screenshot/": { - "get": { - "description": "Compute and cache a screenshot.", + "/api/v1/dashboard/{id_or_slug}/copy/": { + "post": { "parameters": [ { + "description": "The dashboard id or slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/screenshot_query_schema" - } - } - }, - "in": "query", - "name": "q" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardCopySchema" + } + } + }, + "required": true + }, "responses": { - "202": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartCacheScreenshotResponseSchema" + "properties": { + "id": { + "type": "number" + }, + "last_modified_time": { + "type": "number" + } + }, + "type": "object" } } }, - "description": "Chart async result" + "description": "Id of new dashboard and last modified time" }, "400": { "$ref": "#/components/responses/400" @@ -11985,6 +15712,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -11997,45 +15727,24 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Create a copy of an existing dashboard", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/chart/{pk}/data/": { + "/api/v1/dashboard/{id_or_slug}/datasets": { "get": { - "description": "Takes a chart ID and uses the query context stored when the chart was saved to return payload data response.", + "description": "Returns a list of a dashboard's datasets. Each dataset includes only the information necessary to render the dashboard's charts.", "parameters": [ { - "description": "The chart ID", + "description": "Either the id of the dashboard, or its slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "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": { @@ -12043,21 +15752,19 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChartDataResponseSchema" - } - } - }, - "description": "Query result" - }, - "202": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChartDataAsyncResponseSchema" + "properties": { + "result": { + "items": { + "$ref": "#/components/schemas/DashboardDatasetSchema" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Async job details" + "description": "Dashboard dataset definitions" }, "400": { "$ref": "#/components/responses/400" @@ -12065,8 +15772,11 @@ "401": { "$ref": "#/components/responses/401" }, - "500": { - "$ref": "#/components/responses/500" + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" } }, "security": [ @@ -12074,19 +15784,22 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Get dashboard's datasets", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/chart/{pk}/favorites/": { + "/api/v1/dashboard/{id_or_slug}/embedded": { "delete": { - "description": "Remove the chart from the user favorite list", "parameters": [ { + "description": "The dashboard id or slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], @@ -12096,22 +15809,19 @@ "application/json": { "schema": { "properties": { - "result": { - "type": "object" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Chart removed from favorites" + "description": "Successfully removed the configuration" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -12121,17 +15831,20 @@ "jwt": [] } ], - "tags": ["Charts"] + "summary": "Delete a dashboard's embedded configuration", + "tags": [ + "Dashboards" + ] }, - "post": { - "description": "Marks the chart as favorite for the current user", + "get": { "parameters": [ { + "description": "The dashboard id or slug", "in": "path", - "name": "pk", + "name": "id_or_slug", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], @@ -12142,21 +15855,18 @@ "schema": { "properties": { "result": { - "type": "object" + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" } }, "type": "object" } } }, - "description": "Chart added to favorites" + "description": "Result contains the embedded dashboard config" }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -12166,51 +15876,53 @@ "jwt": [] } ], - "tags": ["Charts"] - } - }, - "/api/v1/chart/{pk}/screenshot/{digest}/": { - "get": { - "description": "Get a computed screenshot from cache.", + "summary": "Get the dashboard's embedded configuration", + "tags": [ + "Dashboards" + ] + }, + "post": { "parameters": [ { + "description": "The dashboard id or slug", "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "path", - "name": "digest", + "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": { - "image/*": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "properties": { + "result": { + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + } + }, + "type": "object" } } }, - "description": "Chart thumbnail image" - }, - "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" } @@ -12220,54 +15932,54 @@ "jwt": [] } ], - "tags": ["Charts"] - } - }, - "/api/v1/chart/{pk}/thumbnail/{digest}/": { - "get": { - "description": "Compute or get already computed chart thumbnail from cache.", + "summary": "Set a dashboard's embedded configuration", + "tags": [ + "Dashboards" + ] + }, + "put": { + "description": "Sets a dashboard's embedded configuration.", "parameters": [ { + "description": "The dashboard id or slug", "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" - } - }, - { - "in": "path", - "name": "digest", + "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": { - "image/*": { + "application/json": { "schema": { - "format": "binary", - "type": "string" + "properties": { + "result": { + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + } + }, + "type": "object" } } }, - "description": "Chart thumbnail image" - }, - "302": { - "description": "Redirects to the current digest" - }, - "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" } @@ -12277,23 +15989,23 @@ "jwt": [] } ], - "tags": ["Charts"] + "tags": [ + "Dashboards" + ] } }, - "/api/v1/css_template/": { - "delete": { - "description": "Deletes multiple css templates in a bulk operation.", + "/api/v1/dashboard/{id_or_slug}/tabs": { + "get": { + "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_delete_ids_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": { @@ -12302,27 +16014,30 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "items": { + "$ref": "#/components/schemas/TabsPayloadSchema" + }, + "type": "object" } }, "type": "object" } } }, - "description": "CSS templates bulk delete" + "description": "Dashboard tabs" + }, + "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" } }, "security": [ @@ -12330,21 +16045,22 @@ "jwt": [] } ], - "tags": ["CSS Templates"] - }, - "get": { - "description": "Get a list of CSS templates, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "summary": "Get dashboard's tabs", + "tags": [ + "Dashboards" + ] + } + }, + "/api/v1/dashboard/{pk}": { + "delete": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -12353,76 +16069,25 @@ "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", + "message": { "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": "Items from Model" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dashboard deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -12435,39 +16100,54 @@ "jwt": [] } ], - "tags": ["CSS Templates"] + "summary": "Delete a dashboard", + "tags": [ + "Dashboards" + ] }, - "post": { - "description": "Create a CSS template", + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CssTemplateRestApi.post" + "$ref": "#/components/schemas/DashboardRestApi.put" } } }, - "description": "Model schema", + "description": "Dashboard schema", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { "id": { - "type": "string" + "type": "number" + }, + "last_modified_time": { + "type": "number" }, "result": { - "$ref": "#/components/schemas/CssTemplateRestApi.post" + "$ref": "#/components/schemas/DashboardRestApi.put" } }, "type": "object" } } }, - "description": "Item inserted" + "description": "Dashboard changed" }, "400": { "$ref": "#/components/responses/400" @@ -12475,6 +16155,12 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -12487,71 +16173,43 @@ "jwt": [] } ], - "tags": ["CSS Templates"] + "summary": "Update a dashboard", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/css_template/_info": { - "get": { - "description": "Get metadata information about this API resource", + "/api/v1/dashboard/{pk}/cache_dashboard_screenshot/": { + "post": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardScreenshotPostSchema" + } + } + } + }, "responses": { - "200": { + "202": { "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/DashboardCacheScreenshotResponseSchema" } } }, - "description": "Item from Model" + "description": "Dashboard async result" }, "400": { "$ref": "#/components/responses/400" @@ -12559,8 +16217,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -12571,30 +16229,22 @@ "jwt": [] } ], - "tags": ["CSS Templates"] + "summary": "Compute and cache a screenshot", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/css_template/related/{column_name}": { - "get": { + "/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": { @@ -12602,14 +16252,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" @@ -12626,12 +16278,12 @@ "jwt": [] } ], - "tags": ["CSS Templates"] - } - }, - "/api/v1/css_template/{pk}": { - "delete": { - "description": "Delete CSS template", + "summary": "Remove the dashboard from the user favorite list", + "tags": [ + "Dashboards" + ] + }, + "post": { "parameters": [ { "in": "path", @@ -12648,22 +16300,22 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "result": { + "type": "object" } }, "type": "object" } } }, - "description": "Item deleted" + "description": "Dashboard added to favorites" + }, + "401": { + "$ref": "#/components/responses/401" }, "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -12673,10 +16325,14 @@ "jwt": [] } ], - "tags": ["CSS Templates"] - }, - "get": { - "description": "Get a CSS template", + "summary": "Mark the dashboard as favorite for the current user", + "tags": [ + "Dashboards" + ] + } + }, + "/api/v1/dashboard/{pk}/filter_state": { + "post": { "parameters": [ { "in": "path", @@ -12687,60 +16343,31 @@ } }, { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_item_schema" - } - } - }, "in": "query", - "name": "q" + "name": "tab_id", + "schema": { + "type": "integer" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TemporaryCachePostSchema" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "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": { - "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", + "key": { + "description": "The key to retrieve the value.", "type": "string" } }, @@ -12748,7 +16375,7 @@ } } }, - "description": "Item from Model" + "description": "The value was stored successfully." }, "400": { "$ref": "#/components/responses/400" @@ -12756,9 +16383,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -12771,10 +16395,14 @@ "jwt": [] } ], - "tags": ["CSS Templates"] - }, - "put": { - "description": "Update a CSS template", + "summary": "Create a dashboard's filter state", + "tags": [ + "Dashboard Filter State" + ] + } + }, + "/api/v1/dashboard/{pk}/filter_state/{key}": { + "delete": { "parameters": [ { "in": "path", @@ -12783,34 +16411,33 @@ "schema": { "type": "integer" } + }, + { + "description": "The value key.", + "in": "path", + "name": "key", + "required": true, + "schema": { + "type": "string" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CssTemplateRestApi.put" - } - } - }, - "description": "Model schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "result": { - "$ref": "#/components/schemas/CssTemplateRestApi.put" + "message": { + "description": "The result of the operation", + "type": "string" } }, "type": "object" } } }, - "description": "Item changed" + "description": "Deleted the stored value." }, "400": { "$ref": "#/components/responses/400" @@ -12833,23 +16460,28 @@ "jwt": [] } ], - "tags": ["CSS Templates"] - } - }, - "/api/v1/dashboard/": { - "delete": { - "description": "Deletes multiple Dashboards in a bulk operation.", + "summary": "Delete a dashboard's filter state value", + "tags": [ + "Dashboard Filter State" + ] + }, + "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" + } + }, + { + "in": "path", + "name": "key", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { @@ -12858,7 +16490,8 @@ "application/json": { "schema": { "properties": { - "message": { + "value": { + "description": "The stored value", "type": "string" } }, @@ -12866,14 +16499,14 @@ } } }, - "description": "Dashboard bulk delete" + "description": "Returns the stored value." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -12889,92 +16522,63 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Get a dashboard's filter state value", + "tags": [ + "Dashboard Filter State" + ] }, - "get": { - "description": "Get a list of dashboards, 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": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "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/TemporaryCachePutSchema" + } + } + }, + "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" + "content": { + "application/json": { + "schema": { + "properties": { + "key": { + "description": "The key to retrieve the value.", + "type": "string" } }, "type": "object" } } }, - "description": "Items from Model" + "description": "The value was stored successfully." }, "400": { "$ref": "#/components/responses/400" @@ -12982,6 +16586,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -12994,39 +16601,50 @@ "jwt": [] } ], - "tags": ["Dashboards"] - }, - "post": { - "description": "Create a new Dashboard.", + "summary": "Update a dashboard's filter state value", + "tags": [ + "Dashboard Filter State" + ] + } + }, + "/api/v1/dashboard/{pk}/filters": { + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DashboardRestApi.post" + "$ref": "#/components/schemas/DashboardNativeFiltersConfigUpdateSchema" } } }, - "description": "Dashboard schema", + "description": "Native filters configuration", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, "result": { - "$ref": "#/components/schemas/DashboardRestApi.post" + "type": "array" } }, "type": "object" } } }, - "description": "Dashboard added" + "description": "Dashboard native filters updated" }, "400": { "$ref": "#/components/responses/400" @@ -13034,9 +16652,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" } @@ -13046,71 +16670,54 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Update native filters configuration for a dashboard.", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/dashboard/_info": { - "get": { - "description": "Several metadata information about dashboard API endpoints.", + "/api/v1/dashboard/{pk}/permalink": { + "post": { "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_info_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DashboardPermalinkStateSchema" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "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" + "key": { + "description": "The key to retrieve the permanent link data.", + "type": "string" }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "url": { + "description": "permanent link.", + "type": "string" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "The permanent link was stored successfully." }, "400": { "$ref": "#/components/responses/400" @@ -13130,35 +16737,43 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Create a new dashboard's permanent link", + "tags": [ + "Dashboard Permanent Link" + ] } }, - "/api/v1/dashboard/export/": { + "/api/v1/dashboard/{pk}/screenshot/{digest}/": { "get": { - "description": "Exports multiple Dashboards and downloads them as YAML files.", "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" + } + }, + { + "in": "path", + "name": "digest", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { "200": { "content": { - "text/plain": { + "image/*": { "schema": { + "format": "binary", "type": "string" } } }, - "description": "Dashboard export" + "description": "Dashboard thumbnail image" }, "400": { "$ref": "#/components/responses/400" @@ -13169,9 +16784,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -13181,18 +16793,38 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Get a computed screenshot from cache", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/dashboard/favorite_status/": { + "/api/v1/dashboard/{pk}/thumbnail/{digest}/": { "get": { - "description": "Check favorited dashboards for current user", + "description": "Computes async or get already computed dashboard thumbnail from cache.", "parameters": [ + { + "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/get_fav_star_ids_schema" + "$ref": "#/components/schemas/thumbnail_query_schema" } } }, @@ -13202,17 +16834,33 @@ ], "responses": { "200": { + "content": { + "image/*": { + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "description": "Dashboard thumbnail image" + }, + "202": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetFavStarIdsSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "None" + "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" @@ -13220,6 +16868,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -13229,63 +16880,97 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Get dashboard's thumbnail", + "tags": [ + "Dashboards" + ] } }, - "/api/v1/dashboard/import/": { - "post": { - "requestBody": { - "content": { - "multipart/form-data": { - "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" + "/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": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_list_schema" + } } - } - }, - "required": true - }, + }, + "in": "query", + "name": "q" + } + ], "responses": { "200": { "content": { "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 import result" + "description": "Items from Model" }, "400": { "$ref": "#/components/responses/400" @@ -13305,38 +16990,41 @@ "jwt": [] } ], - "tags": ["Dashboards"] - } - }, - "/api/v1/dashboard/permalink/{key}": { - "get": { - "description": "Retrives dashboard state associated with a permanent link.", - "parameters": [ - { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" + "summary": "Get a list of databases", + "tags": [ + "Database" + ] + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseRestApi.post" + } } - } - ], + }, + "description": "Database schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "state": { - "description": "The stored state", - "type": "object" + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatabaseRestApi.post" } }, "type": "object" } } }, - "description": "Returns the stored state." + "description": "Database added" }, "400": { "$ref": "#/components/responses/400" @@ -13347,9 +17035,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -13359,26 +17044,21 @@ "jwt": [] } ], - "tags": ["Dashboard Permanent Link"] + "summary": "Create a new database", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/related/{column_name}": { + "/api/v1/database/_info": { "get": { - "description": "Get a list of all possible owners for a dashboard.", + "description": "Get metadata information about this API resource", "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_info_schema" } } }, @@ -13391,11 +17071,47 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "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": "Related column data" + "description": "Item from Model" }, "400": { "$ref": "#/components/responses/400" @@ -13403,8 +17119,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -13415,50 +17131,80 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Get metadata information about this API resource", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{id_or_slug}": { + "/api/v1/database/available/": { "get": { - "description": "Get a dashboard detail information.", - "parameters": [ - { - "description": "Either the id of the dashboard, or its slug", - "in": "path", - "name": "id_or_slug", - "required": true, - "schema": { - "type": "string" - } - } - ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/DashboardGetResponseSchema" - } + "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" + "description": "Database names" }, "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": [ @@ -13466,22 +17212,24 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Get names of databases currently available", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{id_or_slug}/charts": { - "get": { - "description": "Get the chart definitions for a given dashboard", - "parameters": [ - { - "in": "path", - "name": "id_or_slug", - "required": true, - "schema": { - "type": "string" + "/api/v1/database/columnar_metadata/": { + "post": { + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/ColumnarMetadataUploadFilePostSchema" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "content": { @@ -13489,17 +17237,14 @@ "schema": { "properties": { "result": { - "items": { - "$ref": "#/components/schemas/ChartEntityResponseSchema" - }, - "type": "array" + "$ref": "#/components/schemas/UploadFileMetadata" } }, "type": "object" } } }, - "description": "Dashboard chart definitions" + "description": "Columnar upload response" }, "400": { "$ref": "#/components/responses/400" @@ -13507,11 +17252,11 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -13519,27 +17264,19 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Upload a Columnar file and returns file metadata", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{id_or_slug}/filters/": { - "put": { - "description": "Update the filters for a given dashboard", - "parameters": [ - { - "in": "path", - "name": "id_or_slug", - "required": true, - "schema": { - "type": "string" - } - } - ], + "/api/v1/database/csv_metadata/": { + "post": { "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DashboardNativeFiltersConfigUpdateSchema" + "$ref": "#/components/schemas/CSVMetadataUploadFilePostSchema" } } }, @@ -13552,17 +17289,14 @@ "schema": { "properties": { "result": { - "type": "array", - "items": { - "type": "object" - } + "$ref": "#/components/schemas/UploadFileMetadata" } }, "type": "object" } } }, - "description": "Successfully updated the filters" + "description": "Columnar upload response" }, "400": { "$ref": "#/components/responses/400" @@ -13570,9 +17304,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -13585,27 +17316,19 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Upload an CSV file and returns file metadata", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{id_or_slug}/copy/": { + "/api/v1/database/excel_metadata/": { "post": { - "parameters": [ - { - "description": "The dashboard id or slug", - "in": "path", - "name": "id_or_slug", - "required": true, - "schema": { - "type": "string" - } - } - ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DashboardCopySchema" + "$ref": "#/components/schemas/ExcelMetadataUploadFilePostSchema" } } }, @@ -13617,18 +17340,15 @@ "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "last_modified_time": { - "type": "number" + "result": { + "$ref": "#/components/schemas/UploadFileMetadata" } }, "type": "object" } } }, - "description": "Id of new dashboard and last modified time" + "description": "Columnar upload response" }, "400": { "$ref": "#/components/responses/400" @@ -13636,9 +17356,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -13651,54 +17368,47 @@ "jwt": [] } ], - "summary": "Makes a copy of an existing dashboard", - "tags": ["Dashboards"] + "summary": "Upload an Excel file and returns file metadata", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{id_or_slug}/datasets": { + "/api/v1/database/export/": { "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", - "required": true, - "schema": { - "type": "string" - } + "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": { - "items": { - "$ref": "#/components/schemas/DashboardDatasetSchema" - }, - "type": "array" - } - }, - "type": "object" + "format": "binary", + "type": "string" } } }, - "description": "Dashboard dataset definitions" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "A zip file with database(s) and dataset(s) as YAML" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" } }, "security": [ @@ -13706,23 +17416,51 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Download database(s) and associated dataset(s) as a zip file", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{id_or_slug}/embedded": { - "delete": { - "description": "Removes a dashboard's embedded configuration.", - "parameters": [ - { - "description": "The dashboard id or slug", - "in": "path", - "name": "id_or_slug", - "required": true, - "schema": { - "type": "string" + "/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" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "content": { @@ -13737,11 +17475,17 @@ } } }, - "description": "Successfully removed the configuration" + "description": "Database import result" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -13751,16 +17495,40 @@ "jwt": [] } ], - "tags": ["Dashboards"] - }, + "summary": "Import database(s) with associated datasets", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/oauth2/": { "get": { - "description": "Returns the dashboard's embedded configuration", + "description": "-> Receive and store personal access tokens from OAuth for user-level authorization", "parameters": [ { - "description": "The dashboard id or slug", - "in": "path", - "name": "id_or_slug", - "required": true, + "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", "schema": { "type": "string" } @@ -13769,21 +17537,19 @@ "responses": { "200": { "content": { - "application/json": { + "text/html": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" - } - }, - "type": "object" + "type": "string" } } }, - "description": "Result contains the embedded dashboard config" + "description": "A dummy self-closing HTML page" }, - "401": { - "$ref": "#/components/responses/401" + "400": { + "$ref": "#/components/responses/400" + }, + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -13794,51 +17560,55 @@ "jwt": [] } ], - "tags": ["Dashboards"] - }, - "post": { - "description": "Sets a dashboard's embedded configuration.", + "summary": "Receive personal access tokens from OAuth2", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/related/{column_name}": { + "get": { "parameters": [ { - "description": "The dashboard id or slug", "in": "path", - "name": "id_or_slug", + "name": "column_name", "required": true, "schema": { "type": "string" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_related_schema" + } + } + }, + "in": "query", + "name": "q" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EmbeddedDashboardConfig" - } - } - }, - "description": "The embedded configuration to set", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" - } - }, - "type": "object" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Successfully set the configuration" + "description": "Related column data" + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "500": { "$ref": "#/components/responses/500" } @@ -13848,30 +17618,23 @@ "jwt": [] } ], - "tags": ["Dashboards"] - }, - "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" - } - } - ], + "summary": "Get related fields data", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/test_connection/": { + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmbeddedDashboardConfig" + "$ref": "#/components/schemas/DatabaseTestConnectionSchema" } } }, - "description": "The embedded configuration to set", + "description": "Database schema", "required": true }, "responses": { @@ -13880,18 +17643,21 @@ "application/json": { "schema": { "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Successfully set the configuration" + "description": "Database Test Connection" }, - "401": { - "$ref": "#/components/responses/401" + "400": { + "$ref": "#/components/responses/400" + }, + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -13902,22 +17668,25 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Test a database connection", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{pk}": { - "delete": { - "description": "Deletes a Dashboard.", - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "/api/v1/database/validate_parameters/": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseValidateParametersSchema" + } } - } - ], + }, + "description": "DB-specific parameters", + "required": true + }, "responses": { "200": { "content": { @@ -13932,16 +17701,10 @@ } } }, - "description": "Dashboard deleted" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "403": { - "$ref": "#/components/responses/403" + "description": "Database Test Connection" }, - "404": { - "$ref": "#/components/responses/404" + "400": { + "$ref": "#/components/responses/400" }, "422": { "$ref": "#/components/responses/422" @@ -13955,10 +17718,14 @@ "jwt": [] } ], - "tags": ["Dashboards"] - }, - "put": { - "description": "Changes a Dashboard.", + "summary": "Validate database connection parameters", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/{pk}": { + "delete": { "parameters": [ { "in": "path", @@ -13969,41 +17736,21 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DashboardRestApi.put" - } - } - }, - "description": "Dashboard schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "last_modified_time": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DashboardRestApi.put" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Dashboard changed" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Database deleted" }, "401": { "$ref": "#/components/responses/401" @@ -14026,14 +17773,15 @@ "jwt": [] } ], - "tags": ["Dashboards"] - } - }, - "/api/v1/dashboard/{pk}/favorites/": { - "delete": { - "description": "Remove the dashboard from the user favorite list", + "summary": "Delete a database", + "tags": [ + "Database" + ] + }, + "get": { "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, @@ -14047,22 +17795,20 @@ "content": { "application/json": { "schema": { - "properties": { - "result": { - "type": "object" - } - }, "type": "object" } } }, - "description": "Dashboard removed from favorites" + "description": "Database" + }, + "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" @@ -14073,10 +17819,12 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Get a database", + "tags": [ + "Database" + ] }, - "post": { - "description": "Marks the dashboard as favorite for the current user", + "put": { "parameters": [ { "in": "path", @@ -14087,28 +17835,51 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseRestApi.put" + } + } + }, + "description": "Database schema", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { + "id": { + "type": "number" + }, "result": { - "type": "object" + "$ref": "#/components/schemas/DatabaseRestApi.put" } }, "type": "object" } } }, - "description": "Dashboard added to favorites" + "description": "Database 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" } @@ -14118,14 +17889,17 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Change a database", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{pk}/filter_state": { - "post": { - "description": "Stores a new value.", + "/api/v1/database/{pk}/catalogs/": { + "get": { "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, @@ -14134,39 +17908,27 @@ } }, { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/database_catalogs_query_schema" + } + } + }, "in": "query", - "name": "tab_id", - "schema": { - "type": "integer" - } + "name": "q" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TemporaryCachePostSchema" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "key": { - "description": "The key to retrieve the value.", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/CatalogsResponseSchema" } } }, - "description": "The value was stored successfully." + "description": "A List of all catalogs from the database" }, "400": { "$ref": "#/components/responses/400" @@ -14174,8 +17936,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -14186,12 +17948,14 @@ "jwt": [] } ], - "tags": ["Dashboard Filter State"] + "summary": "Get all catalogs from a database", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{pk}/filter_state/{key}": { - "delete": { - "description": "Deletes a value.", + "/api/v1/database/{pk}/columnar_upload/": { + "post": { "parameters": [ { "in": "path", @@ -14200,25 +17964,25 @@ "schema": { "type": "integer" } - }, - { - "description": "The value key.", - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } } ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/ColumnarUploadPostSchema" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { "message": { - "description": "The result of the operation", "type": "string" } }, @@ -14226,7 +17990,7 @@ } } }, - "description": "Deleted the stored value." + "description": "Columnar upload response" }, "400": { "$ref": "#/components/responses/400" @@ -14249,26 +18013,23 @@ "jwt": [] } ], - "tags": ["Dashboard Filter State"] - }, + "summary": "Upload a Columnar file to a database table", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/{pk}/connection": { "get": { - "description": "Retrives a value.", "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } - }, - { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { @@ -14276,17 +18037,11 @@ "content": { "application/json": { "schema": { - "properties": { - "value": { - "description": "The stored value", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatabaseConnectionSchema" } } }, - "description": "Returns the stored value." + "description": "Database with connection info" }, "400": { "$ref": "#/components/responses/400" @@ -14294,9 +18049,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -14309,10 +18061,14 @@ "jwt": [] } ], - "tags": ["Dashboard Filter State"] - }, - "put": { - "description": "Updates an existing value.", + "summary": "Get a database connection info", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/{pk}/csv_upload/": { + "post": { "parameters": [ { "in": "path", @@ -14321,41 +18077,25 @@ "schema": { "type": "integer" } - }, - { - "in": "path", - "name": "key", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "tab_id", - "schema": { - "type": "integer" - } } ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/TemporaryCachePutSchema" + "$ref": "#/components/schemas/CSVUploadPostSchema" } } }, "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the value.", + "message": { "type": "string" } }, @@ -14363,7 +18103,7 @@ } } }, - "description": "The value was stored successfully." + "description": "CSV upload response" }, "400": { "$ref": "#/components/responses/400" @@ -14386,27 +18126,29 @@ "jwt": [] } ], - "tags": ["Dashboard Filter State"] + "summary": "Upload a CSV file to a database table", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{pk}/permalink": { + "/api/v1/database/{pk}/excel_upload/": { "post": { - "description": "Stores a new permanent link.", "parameters": [ { "in": "path", "name": "pk", "required": true, "schema": { - "type": "string" + "type": "integer" } } ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DashboardPermalinkStateSchema" + "$ref": "#/components/schemas/ExcelUploadPostSchema" } } }, @@ -14418,12 +18160,7 @@ "application/json": { "schema": { "properties": { - "key": { - "description": "The key to retrieve the permanent link data.", - "type": "string" - }, - "url": { - "description": "permanent link.", + "message": { "type": "string" } }, @@ -14431,7 +18168,7 @@ } } }, - "description": "The permanent link was stored successfully." + "description": "Excel upload response" }, "400": { "$ref": "#/components/responses/400" @@ -14439,6 +18176,9 @@ "401": { "$ref": "#/components/responses/401" }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -14451,12 +18191,14 @@ "jwt": [] } ], - "tags": ["Dashboard Permanent Link"] + "summary": "Upload an Excel file to a database table", + "tags": [ + "Database" + ] } }, - "/api/v1/dashboard/{pk}/thumbnail/{digest}/": { + "/api/v1/database/{pk}/function_names/": { "get": { - "description": "Compute async or get already computed dashboard thumbnail from cache.", "parameters": [ { "in": "path", @@ -14465,57 +18207,18 @@ "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" + "$ref": "#/components/schemas/DatabaseFunctionNamesResponse" } } }, - "description": "Thumbnail does not exist on cache, fired async to compute" - }, - "302": { - "description": "Redirects to the current digest" + "description": "Query result" }, "401": { "$ref": "#/components/responses/401" @@ -14523,9 +18226,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -14535,23 +18235,22 @@ "jwt": [] } ], - "tags": ["Dashboards"] + "summary": "Get function names supported by a database", + "tags": [ + "Database" + ] } }, - "/api/v1/database/": { + "/api/v1/database/{pk}/related_objects/": { "get": { - "description": "Get a list of models", "parameters": [ { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_list_schema" - } - } - }, - "in": "query", - "name": "q" + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -14559,79 +18258,17 @@ "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/DatabaseRestApi.get_list" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatabaseRelatedObjectsResponse" } } }, - "description": "Items from Model" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Query result" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -14642,39 +18279,46 @@ "jwt": [] } ], - "tags": ["Database"] - }, - "post": { - "description": "Create a new Database.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseRestApi.post" - } + "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" } }, - "description": "Database schema", - "required": true - }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/database_schemas_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/SchemasResponseSchema" } } }, - "description": "Database added" + "description": "A List of all schemas from the database" }, "400": { "$ref": "#/components/responses/400" @@ -14694,80 +18338,40 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Get all schemas from a database", + "tags": [ + "Database" + ] } }, - "/api/v1/database/_info": { + "/api/v1/database/{pk}/schemas_access_for_file_upload/": { "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" + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseSchemaAccessForFileUploadResponse" } } }, - "description": "Item from Model" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "The list of the database schemas where to upload information" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -14778,76 +18382,66 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "The list of the database schemas where to upload information", + "tags": [ + "Database" + ] } }, - "/api/v1/database/available/": { + "/api/v1/database/{pk}/select_star/{table_name}/": { "get": { - "description": "Get names of databases currently available", + "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": { "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/SelectStarResponseSchema" } } }, - "description": "Database names" + "description": "SQL statement for a select star for 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" } @@ -14857,36 +18451,56 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Get database select star for table", + "tags": [ + "Database" + ] } }, - "/api/v1/database/export/": { + "/api/v1/database/{pk}/select_star/{table_name}/{schema_name}/": { "get": { - "description": "Download database(s) and associated dataset(s) as a zip file", "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" @@ -14894,6 +18508,9 @@ "404": { "$ref": "#/components/responses/404" }, + "422": { + "$ref": "#/components/responses/422" + }, "500": { "$ref": "#/components/responses/500" } @@ -14903,48 +18520,24 @@ "jwt": [] } ], - "tags": ["Database"] + "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": { @@ -14959,14 +18552,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" }, @@ -14979,42 +18575,63 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Delete a SSH tunnel", + "tags": [ + "Database" + ] } }, - "/api/v1/database/test_connection/": { - "post": { - "description": "Tests a database connection", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseTestConnectionSchema" - } + "/api/v1/database/{pk}/table/{table_name}/{schema_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" } }, - "description": "Database schema", - "required": true - }, + { + "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/TableMetadataResponseSchema" } } }, - "description": "Database Test Connection" + "description": "Table metadata information" }, "400": { "$ref": "#/components/responses/400" }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -15027,42 +18644,64 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Get database table metadata", + "tags": [ + "Database" + ] } }, - "/api/v1/database/validate_parameters/": { - "post": { - "description": "Validates parameters used to connect to a database", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseValidateParametersSchema" - } + "/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": "DB-specific parameters", - "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" }, @@ -15075,20 +18714,49 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Get table extra metadata", + "tags": [ + "Database" + ] } }, - "/api/v1/database/{pk}": { - "delete": { - "description": "Deletes a Database.", + "/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": "Table name", + "in": "query", + "name": "table", + "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": { @@ -15096,29 +18764,18 @@ "content": { "application/json": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" } } }, - "description": "Database deleted" + "description": "Table 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" } @@ -15128,10 +18785,15 @@ "jwt": [] } ], - "tags": ["Database"] - }, + "summary": "Get table metadata", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/{pk}/table_metadata/extra/": { "get": { - "description": "Get a database", + "description": "Extra metadata associated with the table (partitions, description, etc.)", "parameters": [ { "description": "The database id", @@ -15141,6 +18803,31 @@ "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": { @@ -15148,20 +18835,17 @@ "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/TableExtraMetadataResponseSchema" } } }, - "description": "Database" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Table extra metadata information" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -15172,49 +18856,58 @@ "jwt": [] } ], - "tags": ["Database"] - }, - "put": { - "description": "Changes a Database.", + "summary": "Get table extra metadata", + "tags": [ + "Database" + ] + } + }, + "/api/v1/database/{pk}/tables/": { + "get": { "parameters": [ { + "description": "The database id", "in": "path", "name": "pk", "required": true, "schema": { "type": "integer" } + }, + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/database_tables_query_schema" + } + } + }, + "in": "query", + "name": "q" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatabaseRestApi.put" - } - } - }, - "description": "Database schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" + "count": { + "type": "integer" }, "result": { - "$ref": "#/components/schemas/DatabaseRestApi.put" + "description": "A List of tables for given database", + "items": { + "$ref": "#/components/schemas/DatabaseTablesResponse" + }, + "type": "array" } }, "type": "object" } } }, - "description": "Database changed" + "description": "Tables list" }, "400": { "$ref": "#/components/responses/400" @@ -15222,9 +18915,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -15240,14 +18930,17 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Get a list of tables for given database", + "tags": [ + "Database" + ] } }, - "/api/v1/database/{pk}/connection": { - "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, @@ -15256,16 +18949,36 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateSQLRequest" + } + } + }, + "description": "Validate SQL request", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseConnectionSchema" + "properties": { + "result": { + "description": "A List of SQL errors found on the statement", + "items": { + "$ref": "#/components/schemas/ValidateSQLResponse" + }, + "type": "array" + } + }, + "type": "object" } } }, - "description": "Database with connection info" + "description": "Validation result" }, "400": { "$ref": "#/components/responses/400" @@ -15273,8 +18986,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -15285,21 +18998,25 @@ "jwt": [] } ], - "summary": "Get a database connection info", - "tags": ["Database"] + "summary": "Validate arbitrary SQL", + "tags": [ + "Database" + ] } }, - "/api/v1/database/{pk}/function_names/": { - "get": { - "description": "Get function names supported by a database", + "/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" } ], "responses": { @@ -15307,18 +19024,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseFunctionNamesResponse" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Query result" + "description": "Dataset bulk delete" + }, + "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" } @@ -15328,20 +19059,24 @@ "jwt": [] } ], - "tags": ["Database"] - } - }, - "/api/v1/database/{pk}/related_objects/": { + "summary": "Bulk delete datasets", + "tags": [ + "Datasets" + ] + }, "get": { - "description": "Get charts and dashboards count associated to a database", + "description": "Gets a list of datasets, 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": { @@ -15349,17 +19084,79 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseRelatedObjectsResponse" + "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": "Query result" + "description": "Items 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" @@ -15370,44 +19167,41 @@ "jwt": [] } ], - "tags": ["Database"] - } - }, - "/api/v1/database/{pk}/schemas/": { - "get": { - "description": "Get all schemas from a database", - "parameters": [ - { - "description": "The database id", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "summary": "Get a list of datasets", + "tags": [ + "Datasets" + ] + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetRestApi.post" + } } }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/database_schemas_query_schema" - } - } - }, - "in": "query", - "name": "q" - } - ], + "description": "Dataset schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SchemasResponseSchema" + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatasetRestApi.post" + } + }, + "type": "object" } } }, - "description": "A List of all schemas from the database" + "description": "Dataset added" }, "400": { "$ref": "#/components/responses/400" @@ -15415,8 +19209,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "422": { + "$ref": "#/components/responses/422" }, "500": { "$ref": "#/components/responses/500" @@ -15427,19 +19221,26 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Create a new dataset", + "tags": [ + "Datasets" + ] } }, - "/api/v1/database/{pk}/schemas_access_for_file_upload/": { + "/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" } ], "responses": { @@ -15447,17 +19248,56 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatabaseSchemaAccessForFileUploadResponse" + "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 list of the database schemas where to upload information" + "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" @@ -15468,40 +19308,33 @@ "jwt": [] } ], - "summary": "The list of the database schemas where to upload information", - "tags": ["Database"] + "summary": "Get metadata information about this API resource", + "tags": [ + "Datasets" + ] } }, - "/api/v1/database/{pk}/select_star/{table_name}/": { + "/api/v1/dataset/distinct/{column_name}": { "get": { - "description": "Get database select star for table", "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": { @@ -15509,11 +19342,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SelectStarResponseSchema" + "$ref": "#/components/schemas/DistincResponseSchema" } } }, - "description": "SQL statement for a select star for table" + "description": "Distinct field data" }, "400": { "$ref": "#/components/responses/400" @@ -15524,9 +19357,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -15536,51 +19366,43 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Get distinct values from field data", + "tags": [ + "Datasets" + ] } }, - "/api/v1/database/{pk}/select_star/{table_name}/{schema_name}/": { - "get": { - "description": "Get database select star for table", - "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/duplicate": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetDuplicateSchema" + } } }, - { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } - } - ], + "description": "Dataset schema", + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SelectStarResponseSchema" + "properties": { + "id": { + "type": "number" + }, + "result": { + "$ref": "#/components/schemas/DatasetDuplicateSchema" + } + }, + "type": "object" } } }, - "description": "SQL statement for a select star for table" + "description": "Dataset duplicated" }, "400": { "$ref": "#/components/responses/400" @@ -15588,6 +19410,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -15603,50 +19428,47 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Duplicate a dataset", + "tags": [ + "Datasets" + ] } }, - "/api/v1/database/{pk}/ssh_tunnel/": { - "delete": { - "description": "Deletes a SSH Tunnel.", + "/api/v1/dataset/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": { + "text/plain": { "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "type": "object" + "type": "string" } } }, - "description": "SSH Tunnel deleted" + "description": "Dataset export" + }, + "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" } @@ -15656,51 +19478,44 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Download multiple datasets as YAML files", + "tags": [ + "Datasets" + ] } }, - "/api/v1/database/{pk}/table/{table_name}/{schema_name}/": { - "get": { - "description": "Get database table metadata", - "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/get_or_create/": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOrCreateDatasetSchema" + } } }, - { - "description": "Table schema", - "in": "path", - "name": "schema_name", - "required": true, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TableMetadataResponseSchema" + "properties": { + "result": { + "properties": { + "table_id": { + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" } } }, - "description": "Table metadata information" + "description": "The ID of the table" }, "400": { "$ref": "#/components/responses/400" @@ -15708,9 +19523,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -15723,51 +19535,74 @@ "jwt": [] } ], - "tags": ["Database"] + "summary": "Retrieve a table by name, or create it if it does not exist", + "tags": [ + "Datasets" + ] } }, - "/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": "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/TableExtraMetadataResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Table extra metadata information" + "description": "Dataset import result" }, "400": { "$ref": "#/components/responses/400" @@ -15775,9 +19610,6 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "422": { "$ref": "#/components/responses/422" }, @@ -15790,27 +19622,28 @@ "jwt": [] } ], - "summary": "Get table extra metadata", - "tags": ["Database"] + "summary": "Import dataset(s) with associated databases", + "tags": [ + "Datasets" + ] } }, - "/api/v1/database/{pk}/tables/": { + "/api/v1/dataset/related/{column_name}": { "get": { "parameters": [ { - "description": "The database id", "in": "path", - "name": "pk", + "name": "column_name", "required": true, "schema": { - "type": "integer" + "type": "string" } }, { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/database_tables_query_schema" + "$ref": "#/components/schemas/get_related_schema" } } }, @@ -15823,23 +19656,11 @@ "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" + "$ref": "#/components/schemas/RelatedResponseSchema" } } }, - "description": "Tables list" + "description": "Related column data" }, "400": { "$ref": "#/components/responses/400" @@ -15850,9 +19671,6 @@ "404": { "$ref": "#/components/responses/404" }, - "422": { - "$ref": "#/components/responses/422" - }, "500": { "$ref": "#/components/responses/500" } @@ -15862,32 +19680,24 @@ "jwt": [] } ], - "summary": "Get a list of tables for given database", - "tags": ["Database"] + "summary": "Get related fields data", + "tags": [ + "Datasets" + ] } }, - "/api/v1/database/{pk}/validate_sql/": { - "post": { - "description": "Validates arbitrary SQL.", - "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/ValidateSQLRequest" + "$ref": "#/components/schemas/DatasetCacheWarmUpRequestSchema" } } }, - "description": "Validate SQL request", + "description": "Identifies the database and table to warm up cache for, and any additional dashboard or filter context to use.", "required": true }, "responses": { @@ -15895,27 +19705,15 @@ "content": { "application/json": { "schema": { - "properties": { - "result": { - "description": "A List of SQL errors found on the statement", - "items": { - "$ref": "#/components/schemas/ValidateSQLResponse" - }, - "type": "array" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatasetCacheWarmUpResponseSchema" } } }, - "description": "Validation result" + "description": "Each chart's warmup status" }, "400": { "$ref": "#/components/responses/400" }, - "401": { - "$ref": "#/components/responses/401" - }, "404": { "$ref": "#/components/responses/404" }, @@ -15928,24 +19726,22 @@ "jwt": [] } ], - "summary": "Validates that arbitrary sql is acceptable for the given database", - "tags": ["Database"] + "summary": "Warm up the cache for each chart powered by the given table", + "tags": [ + "Datasets" + ] } }, - "/api/v1/dataset/": { + "/api/v1/dataset/{pk}": { "delete": { - "description": "Deletes multiple Datasets in a bulk operation.", "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": { @@ -15962,10 +19758,7 @@ } } }, - "description": "Dataset bulk delete" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Dataset delete" }, "401": { "$ref": "#/components/responses/401" @@ -15988,21 +19781,41 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Delete a dataset", + "tags": [ + "Datasets" + ] }, "get": { - "description": "Get a list of models", + "description": "Get a dataset by ID", "parameters": [ + { + "description": "The dataset ID", + "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" } } }, "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": { @@ -16011,69 +19824,19 @@ "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", + "id": { + "description": "The item id", "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" + "$ref": "#/components/schemas/DatasetRestApi.get" } }, "type": "object" } } }, - "description": "Items from Model" + "description": "Dataset object has been returned." }, "400": { "$ref": "#/components/responses/400" @@ -16093,123 +19856,58 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Get a dataset", + "tags": [ + "Datasets" + ] }, - "post": { - "description": "Create a new Dataset", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetRestApi.post" - } + "put": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } }, - "description": "Dataset schema", - "required": true - }, - "responses": { - "201": { - "content": { - "application/json": { - "schema": { - "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatasetRestApi.post" - } - }, - "type": "object" - } - } - }, - "description": "Dataset added" - }, - "400": { - "$ref": "#/components/responses/400" - }, - "401": { - "$ref": "#/components/responses/401" - }, - "422": { - "$ref": "#/components/responses/422" - }, - "500": { - "$ref": "#/components/responses/500" - } - }, - "security": [ - { - "jwt": [] - } - ], - "tags": ["Datasets"] - } - }, - "/api/v1/dataset/_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" + "name": "override_columns", + "schema": { + "type": "boolean" + } } ], - "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" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatasetRestApi.put" + } + } + }, + "description": "Dataset schema", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "id": { + "type": "number" }, - "permissions": { - "description": "The user permissions for this API resource", - "items": { - "type": "string" - }, - "type": "array" + "result": { + "$ref": "#/components/schemas/DatasetRestApi.put" } }, "type": "object" } } }, - "description": "Item from Model" + "description": "Dataset changed" }, "400": { "$ref": "#/components/responses/400" @@ -16217,6 +19915,12 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, "422": { "$ref": "#/components/responses/422" }, @@ -16229,30 +19933,32 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Update a dataset", + "tags": [ + "Datasets" + ] } }, - "/api/v1/dataset/distinct/{column_name}": { - "get": { + "/api/v1/dataset/{pk}/column/{column_id}": { + "delete": { "parameters": [ { + "description": "The dataset pk for this column", "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" + "description": "The column id for this dataset", + "in": "path", + "name": "column_id", + "required": true, + "schema": { + "type": "integer" + } } ], "responses": { @@ -16260,21 +19966,29 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DistincResponseSchema" + "properties": { + "message": { + "type": "string" + } + }, + "type": "object" } } }, - "description": "Distinct field data" - }, - "400": { - "$ref": "#/components/responses/400" + "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" } @@ -16284,44 +19998,49 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Delete a dataset column", + "tags": [ + "Datasets" + ] } }, - "/api/v1/dataset/duplicate": { - "post": { - "description": "Duplicates a Dataset", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetDuplicateSchema" - } + "/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" } }, - "description": "Dataset schema", - "required": true - }, + { + "description": "The metric id for this dataset", + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "type": "integer" + } + } + ], "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatasetDuplicateSchema" + "message": { + "type": "string" } }, "type": "object" } } }, - "description": "Dataset duplicated" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Metric deleted" }, "401": { "$ref": "#/components/responses/401" @@ -16344,45 +20063,52 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Delete a dataset metric", + "tags": [ + "Datasets" + ] } }, - "/api/v1/dataset/export/": { - "get": { - "description": "Exports multiple datasets and downloads them as YAML files", + "/api/v1/dataset/{pk}/refresh": { + "put": { "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": "Dataset export" - }, - "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" } @@ -16392,126 +20118,121 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Refresh and update columns of a dataset", + "tags": [ + "Datasets" + ] } }, - "/api/v1/dataset/get_or_create/": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetOrCreateDatasetSchema" - } + "/api/v1/dataset/{pk}/related_objects": { + "get": { + "parameters": [ + { + "in": "path", + "name": "pk", + "required": true, + "schema": { + "type": "integer" } - }, - "required": true - }, + } + ], "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "result": { - "properties": { - "table_id": { - "type": "integer" - } - }, - "type": "object" - } - }, - "type": "object" + "$ref": "#/components/schemas/DatasetRelatedObjectsResponse" } } }, - "description": "The ID of the table" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Query result" }, "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "404": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" } - }, - "security": [ - { - "jwt": [] - } - ], - "summary": "Retrieve a table by name, or create it if it does not exist", - "tags": ["Datasets"] - } - }, - "/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" - } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get charts and dashboards count associated to a dataset", + "tags": [ + "Datasets" + ] + } + }, + "/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" } }, - "required": true - }, + { + "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": { - "message": { - "type": "string" + "result": { + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "object" + } + ] + }, + "type": "array" } }, "type": "object" } } }, - "description": "Dataset import result" + "description": "A List of distinct values for the column" }, "400": { "$ref": "#/components/responses/400" @@ -16519,8 +20240,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" @@ -16531,30 +20255,23 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Get possible values for a datasource column", + "tags": [ + "Datasources" + ] } }, - "/api/v1/dataset/related/{column_name}": { + "/api/v1/embedded_dashboard/{uuid}": { "get": { "parameters": [ { + "description": "The embedded configuration uuid", "in": "path", - "name": "column_name", + "name": "uuid", "required": true, "schema": { "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_related_schema" - } - } - }, - "in": "query", - "name": "q" } ], "responses": { @@ -16562,14 +20279,16 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RelatedResponseSchema" + "properties": { + "result": { + "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" + } + }, + "type": "object" } } }, - "description": "Related column data" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Result contains the embedded dashboard configuration" }, "401": { "$ref": "#/components/responses/401" @@ -16586,40 +20305,75 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Get a report schedule log", + "tags": [ + "Embedded Dashboard" + ] } }, - "/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" - } + "/api/v1/explore/": { + "get": { + "description": "Assembles Explore related information (form_data, slice, dataset) in a single endpoint.

The information can be assembled from:
- The cache using a form_data_key
- The metadata database using a permalink_key
- Build from scratch using dataset or slice identifiers.", + "parameters": [ + { + "in": "query", + "name": "form_data_key", + "schema": { + "type": "string" } }, - "description": "Identifies the database and table to warm up cache for, and any additional dashboard or filter context to use.", - "required": true - }, + { + "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": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatasetCacheWarmUpResponseSchema" + "$ref": "#/components/schemas/ExploreContextSchema" } } }, - "description": "Each chart's warmup status" + "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" } @@ -16629,30 +20383,41 @@ "jwt": [] } ], - "summary": "Warms up the cache for each chart powered by the given table", - "tags": ["Datasets"] + "summary": "Assemble Explore related information in a single endpoint", + "tags": [ + "Explore" + ] } }, - "/api/v1/dataset/{pk}": { - "delete": { - "description": "Deletes a Dataset", + "/api/v1/explore/form_data": { + "post": { "parameters": [ { - "in": "path", - "name": "pk", - "required": true, + "in": "query", + "name": "tab_id", "schema": { "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FormDataPostSchema" + } + } + }, + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "message": { + "key": { + "description": "The key to retrieve the form_data.", "type": "string" } }, @@ -16660,17 +20425,14 @@ } } }, - "description": "Dataset delete" + "description": "The form_data was stored successfully." + }, + "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" }, @@ -16683,74 +20445,33 @@ "jwt": [] } ], - "tags": ["Datasets"] - }, - "get": { - "description": "Get an item model", + "summary": "Create a new form_data", + "tags": [ + "Explore Form Data" + ] + } + }, + "/api/v1/explore/form_data/{key}": { + "delete": { "parameters": [ { + "description": "The form_data key.", "in": "path", - "name": "pk", + "name": "key", "required": true, "schema": { - "type": "integer" + "type": "string" } - }, - { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/get_item_schema" - } - } - }, - "in": "query", - "name": "q" } ], "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": { - "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.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", + "schema": { + "properties": { + "message": { + "description": "The result of the operation", "type": "string" } }, @@ -16758,7 +20479,7 @@ } } }, - "description": "Item from Model" + "description": "Deleted the stored form_data." }, "400": { "$ref": "#/components/responses/400" @@ -16781,56 +20502,38 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Delete a form_data", + "tags": [ + "Explore Form Data" + ] }, - "put": { - "description": "Changes a Dataset", + "get": { "parameters": [ { "in": "path", - "name": "pk", + "name": "key", "required": true, "schema": { - "type": "integer" - } - }, - { - "in": "query", - "name": "override_columns", - "schema": { - "type": "boolean" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetRestApi.put" - } - } - }, - "description": "Dataset schema", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "id": { - "type": "number" - }, - "result": { - "$ref": "#/components/schemas/DatasetRestApi.put" + "form_data": { + "description": "The stored form_data", + "type": "string" } }, "type": "object" } } }, - "description": "Dataset changed" + "description": "Returns the stored form_data." }, "400": { "$ref": "#/components/responses/400" @@ -16838,9 +20541,6 @@ "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -16856,39 +20556,47 @@ "jwt": [] } ], - "tags": ["Datasets"] - } - }, - "/api/v1/dataset/{pk}/column/{column_id}": { - "delete": { - "description": "Delete a Dataset column", + "summary": "Get a form_data", + "tags": [ + "Explore Form Data" + ] + }, + "put": { "parameters": [ { - "description": "The dataset pk for this column", "in": "path", - "name": "pk", + "name": "key", "required": true, "schema": { - "type": "integer" + "type": "string" } }, { - "description": "The column id for this dataset", - "in": "path", - "name": "column_id", - "required": true, + "in": "query", + "name": "tab_id", "schema": { "type": "integer" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FormDataPutSchema" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { - "message": { + "key": { + "description": "The key to retrieve the form_data.", "type": "string" } }, @@ -16896,14 +20604,14 @@ } } }, - "description": "Column deleted" + "description": "The form_data was stored successfully." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -16919,39 +20627,36 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Update an existing form_data", + "tags": [ + "Explore Form Data" + ] } }, - "/api/v1/dataset/{pk}/metric/{metric_id}": { - "delete": { - "description": "Delete a Dataset metric", - "parameters": [ - { - "description": "The dataset pk for this column", - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "/api/v1/explore/permalink": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExplorePermalinkStateSchema" + } } }, - { - "description": "The metric id for this dataset", - "in": "path", - "name": "metric_id", - "required": true, - "schema": { - "type": "integer" - } - } - ], + "required": true + }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { "properties": { - "message": { + "key": { + "description": "The key to retrieve the permanent link data.", + "type": "string" + }, + "url": { + "description": "permanent link.", "type": "string" } }, @@ -16959,17 +20664,14 @@ } } }, - "description": "Metric deleted" + "description": "The permanent link was stored successfully." + }, + "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" }, @@ -16982,19 +20684,21 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Create a new permanent link", + "tags": [ + "Explore Permanent Link" + ] } }, - "/api/v1/dataset/{pk}/refresh": { - "put": { - "description": "Refreshes and updates columns of a dataset", + "/api/v1/explore/permalink/{key}": { + "get": { "parameters": [ { "in": "path", - "name": "pk", + "name": "key", "required": true, "schema": { - "type": "integer" + "type": "string" } } ], @@ -17004,22 +20708,23 @@ "application/json": { "schema": { "properties": { - "message": { - "type": "string" + "state": { + "description": "The stored state", + "type": "object" } }, "type": "object" } } }, - "description": "Dataset delete" + "description": "Returns the stored form_data." + }, + "400": { + "$ref": "#/components/responses/400" }, "401": { "$ref": "#/components/responses/401" }, - "403": { - "$ref": "#/components/responses/403" - }, "404": { "$ref": "#/components/responses/404" }, @@ -17035,77 +20740,144 @@ "jwt": [] } ], - "tags": ["Datasets"] + "summary": "Get chart's permanent link state", + "tags": [ + "Explore Permanent Link" + ] } }, - "/api/v1/dataset/{pk}/related_objects": { - "get": { - "description": "Get charts and dashboards count associated to a dataset", - "parameters": [ - { - "in": "path", - "name": "pk", - "required": true, - "schema": { - "type": "integer" + "/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": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DatasetRelatedObjectsResponse" + "$ref": "#/components/schemas/IASLoginTokenResponseSchema" } } }, "description": "Query result" }, + "400": { + "$ref": "#/components/responses/400" + }, "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, "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" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IASProfilesResponseSchema" + } + } + }, + "description": "IAS Tokens" + } + }, "security": [ { "jwt": [] } ], - "tags": ["Datasets"] + "tags": [ + "IAS" + ] } }, - "/api/v1/datasource/{datasource_type}/{datasource_id}/column/{column_name}/values/": { + "/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.", "parameters": [ { - "description": "The type of datasource", - "in": "path", - "name": "datasource_type", - "required": true, + "description": "The name of the IAS profile", + "in": "query", + "name": "profile", + "required": false, "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IASTokensResponseSchema" + } + } + }, + "description": "IAS Tokens" }, + "400": { + "$ref": "#/components/responses/400" + } + }, + "security": [ + { + "jwt": [] + } + ], + "tags": [ + "IAS" + ] + } + }, + "/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.", + "parameters": [ { - "description": "The id of the datasource", "in": "path", - "name": "datasource_id", + "name": "pk", "required": true, "schema": { - "type": "integer" + "type": "string" } }, { - "description": "The name of the column to get values for", - "in": "path", - "name": "column_name", - "required": true, + "description": "The name of the IAS profile", + "in": "query", + "name": "profile", + "required": false, "schema": { "type": "string" } @@ -17116,38 +20888,39 @@ "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/IASTokensResponseSchema" + } + } + }, + "description": "IAS Tokens" + }, + "400": { + "$ref": "#/components/responses/400" + } + }, + "security": [ + { + "jwt": [] + } + ], + "tags": [ + "IAS" + ] + } + }, + "/api/v1/lakehouse": { + "get": { + "description": "Disconnect a Lakehouse.", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LakehouseGetListResponseSchema" } } }, - "description": "A List of distinct values for the column" - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Lakehouse has been deleted" }, "401": { "$ref": "#/components/responses/401" @@ -17155,9 +20928,6 @@ "403": { "$ref": "#/components/responses/403" }, - "404": { - "$ref": "#/components/responses/404" - }, "500": { "$ref": "#/components/responses/500" } @@ -17167,18 +20937,20 @@ "jwt": [] } ], - "summary": "Get possible values for a datasource column", - "tags": ["Datasources"] + "summary": "Get a list of all connected Lakehouses", + "tags": [ + "Lakehouse" + ] } }, - "/api/v1/embedded_dashboard/{uuid}": { - "get": { - "description": "Get a report schedule log", + "/api/v1/lakehouse/{lakehouse_id}": { + "delete": { + "description": "Disconnect a Lakehouse.", "parameters": [ { - "description": "The embedded configuration uuid", + "description": "The unique id of the lakehouse", "in": "path", - "name": "uuid", + "name": "lakehouse_id", "required": true, "schema": { "type": "string" @@ -17190,20 +20962,18 @@ "content": { "application/json": { "schema": { - "properties": { - "result": { - "$ref": "#/components/schemas/EmbeddedDashboardResponseSchema" - } - }, - "type": "object" + "$ref": "#/components/schemas/LakehouseDisconnectResponseSchema" } } }, - "description": "Result contains the embedded dashboard configuration" + "description": "Lakehouse has been deleted" }, "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -17216,44 +20986,19 @@ "jwt": [] } ], - "tags": ["Embedded Dashboard"] - } - }, - "/api/v1/explore/": { + "summary": "Disconnect a Lakehouse and all catalogs", + "tags": [ + "Lakehouse" + ] + }, "get": { - "description": "Assembles Explore related information (form_data, slice, dataset)\\n in a single endpoint.

\\nThe information can be assembled from:
- The cache using a form_data_key
- The metadata database using a permalink_key
- Build from scratch using dataset or slice identifiers.", + "description": "Get information regarding a connected Lakehouse", "parameters": [ { - "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", + "description": "The unique id of the lakehouse", + "in": "path", + "name": "lakehouse_id", + "required": true, "schema": { "type": "string" } @@ -17264,24 +21009,21 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExploreContextSchema" + "$ref": "#/components/schemas/LakehouseGetResponseSchema" } } }, - "description": "Returns the initial context." - }, - "400": { - "$ref": "#/components/responses/400" + "description": "Lakehouses" }, "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" } @@ -17291,19 +21033,21 @@ "jwt": [] } ], - "summary": "Assembles Explore related information (form_data, slice, dataset)\\n in a single endpoint.", - "tags": ["Explore"] - } - }, - "/api/v1/explore/form_data": { + "summary": "Get information about a specific Lakehouse", + "tags": [ + "Lakehouse" + ] + }, "post": { - "description": "Stores a new form_data.", + "description": "Endpoint for connecting a Lakehouse and associated catalogs to the ACS Superset instance.", "parameters": [ { - "in": "query", - "name": "tab_id", + "description": "The unique id of the lakehouse", + "in": "path", + "name": "lakehouse_id", + "required": true, "schema": { - "type": "integer" + "type": "string" } } ], @@ -17311,28 +21055,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FormDataPostSchema" + "$ref": "#/components/schemas/LakehouseConnectRequestSchema" } } }, + "description": "Payload containing connection parameters.", "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "properties": { - "key": { - "description": "The key to retrieve the form_data.", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/LakehouseConnectResponseSchema" } } }, - "description": "The form_data was stored successfully." + "description": "The connection task has been scheduled." }, "400": { "$ref": "#/components/responses/400" @@ -17340,8 +21079,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" }, "500": { "$ref": "#/components/responses/500" @@ -17352,21 +21091,40 @@ "jwt": [] } ], - "tags": ["Explore Form Data"] + "summary": "Schedule a task to connect a Lakehouse and catalogs", + "tags": [ + "Lakehouse" + ] } }, - "/api/v1/explore/form_data/{key}": { - "delete": { - "description": "Deletes a form_data.", + "/api/v1/lakehouse/{lakehouse_id}/dataset": { + "get": { + "description": "Endpoint for listing all virtual datasets on a Lakehouse", "parameters": [ { - "description": "The form_data key.", + "description": "The unique id of the lakehouse", "in": "path", - "name": "key", + "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", + "in": "query", + "name": "schema", + "schema": { + "type": "string" + } } ], "responses": { @@ -17374,17 +21132,11 @@ "content": { "application/json": { "schema": { - "properties": { - "message": { - "description": "The result of the operation", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/LakehouseDatasetListResponseSchema" } } }, - "description": "Deleted the stored form_data." + "description": "All virtual datasets satisfying the query params." }, "400": { "$ref": "#/components/responses/400" @@ -17392,11 +21144,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" - }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/403" }, "500": { "$ref": "#/components/responses/500" @@ -17407,36 +21156,45 @@ "jwt": [] } ], - "tags": ["Explore Form Data"] + "summary": "Get a list of virtual datasets", + "tags": [ + "Lakehouse" + ] }, - "get": { - "description": "Retrives a form_data.", + "post": { + "description": "Endpoint for creating a virtual dataset from a query", "parameters": [ { + "description": "The unique id of the lakehouse", "in": "path", - "name": "key", + "name": "lakehouse_id", "required": true, "schema": { "type": "string" } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LakehouseDatasetRequestSchema" + } + } + }, + "description": "Payload containing virtual dataset parameters.", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "form_data": { - "description": "The stored form_data", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/LakehouseDatasetResponseSchema" } } }, - "description": "Returns the stored form_data." + "description": "The virtual dataset has been created." }, "400": { "$ref": "#/components/responses/400" @@ -17444,8 +21202,8 @@ "401": { "$ref": "#/components/responses/401" }, - "404": { - "$ref": "#/components/responses/404" + "403": { + "$ref": "#/components/responses/403" }, "422": { "$ref": "#/components/responses/422" @@ -17459,53 +21217,45 @@ "jwt": [] } ], - "tags": ["Explore Form Data"] - }, - "put": { - "description": "Updates an existing form_data.", + "summary": "Create a virtual dataset out of a query", + "tags": [ + "Lakehouse" + ] + } + }, + "/api/v1/lakehouse/{lakehouse_id}/task/{task_id}/cancel": { + "post": { + "description": "Endpoint for cancelling a scheduled connection request.", "parameters": [ { + "description": "The unique id of the lakehouse", "in": "path", - "name": "key", + "name": "lakehouse_id", "required": true, "schema": { "type": "string" } }, { - "in": "query", - "name": "tab_id", + "description": "The id of the connection task", + "in": "path", + "name": "task_id", + "required": true, "schema": { - "type": "integer" + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FormDataPutSchema" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "properties": { - "key": { - "description": "The key to retrieve the form_data.", - "type": "string" - } - }, - "type": "object" + "$ref": "#/components/schemas/LakehouseConnectStatusResponseSchema" } } }, - "description": "The form_data was stored successfully." + "description": "The status of the task." }, "400": { "$ref": "#/components/responses/400" @@ -17513,12 +21263,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" } @@ -17528,42 +21278,45 @@ "jwt": [] } ], - "tags": ["Explore Form Data"] + "summary": "Cancel a running task", + "tags": [ + "Lakehouse" + ] } }, - "/api/v1/explore/permalink": { - "post": { - "description": "Stores a new permanent link.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExplorePermalinkStateSchema" - } + "/api/v1/lakehouse/{lakehouse_id}/task/{task_id}/result": { + "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", + "required": true, + "schema": { + "type": "string" } }, - "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 id of the connection task", + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LakehouseConnectResultResponseSchema" } } }, - "description": "The permanent link was stored successfully." + "description": "The status of the task." }, "400": { "$ref": "#/components/responses/400" @@ -17571,8 +21324,8 @@ "401": { "$ref": "#/components/responses/401" }, - "422": { - "$ref": "#/components/responses/422" + "403": { + "$ref": "#/components/responses/404" }, "500": { "$ref": "#/components/responses/500" @@ -17583,16 +21336,29 @@ "jwt": [] } ], - "tags": ["Explore Permanent Link"] + "summary": "Get the payload of a completed connection task", + "tags": [ + "Lakehouse" + ] } }, - "/api/v1/explore/permalink/{key}": { + "/api/v1/lakehouse/{lakehouse_id}/task/{task_id}/status": { "get": { - "description": "Retrives chart state associated with a permanent link.", + "description": "Endpoint for checking what the status of a scheduled connection request is.", "parameters": [ { + "description": "The unique id of the lakehouse", "in": "path", - "name": "key", + "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" @@ -17604,17 +21370,11 @@ "content": { "application/json": { "schema": { - "properties": { - "state": { - "description": "The stored state", - "type": "object" - } - }, - "type": "object" + "$ref": "#/components/schemas/LakehouseConnectStatusResponseSchema" } } }, - "description": "Returns the stored form_data." + "description": "The status of the task." }, "400": { "$ref": "#/components/responses/400" @@ -17622,12 +21382,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" } @@ -17637,12 +21397,15 @@ "jwt": [] } ], - "tags": ["Explore Permanent Link"] + "summary": "Check the status of a connection task", + "tags": [ + "Lakehouse" + ] } }, "/api/v1/log/": { "get": { - "description": "Get a list of models", + "description": "Gets a list of logs, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { "content": { @@ -17744,7 +21507,10 @@ "jwt": [] } ], - "tags": ["LogRestApi"] + "summary": "Get a list of logs", + "tags": [ + "LogRestApi" + ] }, "post": { "requestBody": { @@ -17795,7 +21561,9 @@ "jwt": [] } ], - "tags": ["LogRestApi"] + "tags": [ + "LogRestApi" + ] } }, "/api/v1/log/recent_activity/": { @@ -17852,7 +21620,9 @@ } ], "summary": "Get recent activity data for a user", - "tags": ["LogRestApi"] + "tags": [ + "LogRestApi" + ] } }, "/api/v1/log/{pk}": { @@ -17952,12 +21722,15 @@ "jwt": [] } ], - "tags": ["LogRestApi"] + "summary": "Get a log detail information", + "tags": [ + "LogRestApi" + ] } }, "/api/v1/me/": { "get": { - "description": "Returns the user object corresponding to the agent making the request, or returns a 401 error if the user is unauthenticated.", + "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": { @@ -17978,12 +21751,15 @@ "$ref": "#/components/responses/401" } }, - "tags": ["Current User"] + "summary": "Get the user object", + "tags": [ + "Current User" + ] } }, "/api/v1/me/roles/": { "get": { - "description": "Returns the user roles corresponding to the agent making the request, or returns a 401 error if the user is unauthenticated.", + "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": { @@ -18004,7 +21780,10 @@ "$ref": "#/components/responses/401" } }, - "tags": ["Current User"] + "summary": "Get the user roles", + "tags": [ + "Current User" + ] } }, "/api/v1/menu/": { @@ -18063,12 +21842,14 @@ "jwt": [] } ], - "tags": ["Menu"] + "tags": [ + "Menu" + ] } }, "/api/v1/query/": { "get": { - "description": "Get a list of queries, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "description": "Gets a list of queries, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { "content": { @@ -18170,7 +21951,10 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get a list of queries", + "tags": [ + "Queries" + ] } }, "/api/v1/query/distinct/{column_name}": { @@ -18225,7 +22009,10 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get distinct values from field data", + "tags": [ + "Queries" + ] } }, "/api/v1/query/related/{column_name}": { @@ -18280,7 +22067,10 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get related fields data", + "tags": [ + "Queries" + ] } }, "/api/v1/query/stop": { @@ -18331,7 +22121,9 @@ } ], "summary": "Manually stop a query with client_id", - "tags": ["Queries"] + "tags": [ + "Queries" + ] } }, "/api/v1/query/updated_since": { @@ -18388,12 +22180,14 @@ } ], "summary": "Get a list of queries that changed after last_updated_ms", - "tags": ["Queries"] + "tags": [ + "Queries" + ] } }, "/api/v1/query/{pk}": { "get": { - "description": "Get query detail information.", + "description": "Get an item model", "parameters": [ { "in": "path", @@ -18488,12 +22282,14 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get query detail information", + "tags": [ + "Queries" + ] } }, "/api/v1/report/": { "delete": { - "description": "Deletes multiple report schedules in a bulk operation.", "parameters": [ { "content": { @@ -18544,10 +22340,13 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Bulk delete report schedules", + "tags": [ + "Report Schedules" + ] }, "get": { - "description": "Get a list of report schedules, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "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": { @@ -18649,10 +22448,12 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Get a list of report schedules", + "tags": [ + "Report Schedules" + ] }, "post": { - "description": "Create a report schedule", "requestBody": { "content": { "application/json": { @@ -18704,7 +22505,10 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Create a report schedule", + "tags": [ + "Report Schedules" + ] } }, "/api/v1/report/_info": { @@ -18788,7 +22592,10 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Get metadata information about this API resource", + "tags": [ + "Report Schedules" + ] } }, "/api/v1/report/related/{column_name}": { @@ -18843,12 +22650,84 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Get related fields data", + "tags": [ + "Report Schedules" + ] + } + }, + "/api/v1/report/slack_channels/": { + "get": { + "description": "Get slack channels", + "parameters": [ + { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/get_slack_channels_schema" + } + } + }, + "in": "query", + "name": "q" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "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": [ + { + "jwt": [] + } + ], + "summary": "Get slack channels", + "tags": [ + "Report Schedules" + ] } }, "/api/v1/report/{pk}": { "delete": { - "description": "Delete a report schedule", "parameters": [ { "description": "The report schedule pk", @@ -18894,10 +22773,13 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Delete a report schedule", + "tags": [ + "Report Schedules" + ] }, "get": { - "description": "Get a report schedule", + "description": "Get an item model", "parameters": [ { "in": "path", @@ -18992,10 +22874,12 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Get a report schedule", + "tags": [ + "Report Schedules" + ] }, "put": { - "description": "Update a report schedule", "parameters": [ { "description": "The Report Schedule pk", @@ -19061,12 +22945,15 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Update a report schedule", + "tags": [ + "Report Schedules" + ] } }, "/api/v1/report/{pk}/log/": { "get": { - "description": "Get a list of report schedule logs, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "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 report schedule id for these logs", @@ -19138,12 +23025,14 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Get a list of report schedule logs", + "tags": [ + "Report Schedules" + ] } }, "/api/v1/report/{pk}/log/{log_id}": { "get": { - "description": "Get a report schedule log", "parameters": [ { "description": "The report schedule pk for log", @@ -19216,12 +23105,14 @@ "jwt": [] } ], - "tags": ["Report Schedules"] + "summary": "Get a report schedule log", + "tags": [ + "Report Schedules" + ] } }, "/api/v1/rowlevelsecurity/": { "delete": { - "description": "Deletes multiple RLS rules in a bulk operation.", "parameters": [ { "content": { @@ -19272,10 +23163,13 @@ "jwt": [] } ], - "tags": ["Row Level Security"] + "summary": "Bulk delete RLS rules", + "tags": [ + "Row Level Security" + ] }, "get": { - "description": "Get a list of models", + "description": "Gets a list of RLS, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", "parameters": [ { "content": { @@ -19377,10 +23271,12 @@ "jwt": [] } ], - "tags": ["Row Level Security"] + "summary": "Get a list of RLS", + "tags": [ + "Row Level Security" + ] }, "post": { - "description": "Create a new RLS Rule", "requestBody": { "content": { "application/json": { @@ -19432,7 +23328,10 @@ "jwt": [] } ], - "tags": ["Row Level Security"] + "summary": "Create a new RLS rule", + "tags": [ + "Row Level Security" + ] } }, "/api/v1/rowlevelsecurity/_info": { @@ -19516,7 +23415,10 @@ "jwt": [] } ], - "tags": ["Row Level Security"] + "summary": "Get metadata information about this API resource", + "tags": [ + "Row Level Security" + ] } }, "/api/v1/rowlevelsecurity/related/{column_name}": { @@ -19571,7 +23473,10 @@ "jwt": [] } ], - "tags": ["Row Level Security"] + "summary": "Get related fields data", + "tags": [ + "Row Level Security" + ] } }, "/api/v1/rowlevelsecurity/{pk}": { @@ -19617,7 +23522,10 @@ "jwt": [] } ], - "tags": ["Row Level Security"] + "summary": "Delete an RLS", + "tags": [ + "Row Level Security" + ] }, "get": { "description": "Get an item model", @@ -19715,10 +23623,12 @@ "jwt": [] } ], - "tags": ["Row Level Security"] + "summary": "Get an RLS", + "tags": [ + "Row Level Security" + ] }, "put": { - "description": "Updates an RLS Rule", "parameters": [ { "description": "The Rule pk", @@ -19784,12 +23694,14 @@ "jwt": [] } ], - "tags": ["Row Level Security"] + "summary": "Update an RLS rule", + "tags": [ + "Row Level Security" + ] } }, "/api/v1/saved_query/": { "delete": { - "description": "Deletes multiple saved queries in a bulk operation.", "parameters": [ { "content": { @@ -19837,10 +23749,13 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Bulk delete saved queries", + "tags": [ + "Queries" + ] }, "get": { - "description": "Get a list of saved queries, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", + "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": [ { "content": { @@ -19942,10 +23857,12 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get a list of saved queries", + "tags": [ + "Queries" + ] }, "post": { - "description": "Create a saved query", "requestBody": { "content": { "application/json": { @@ -19994,7 +23911,10 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Create a saved query", + "tags": [ + "Queries" + ] } }, "/api/v1/saved_query/_info": { @@ -20078,7 +23998,10 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get metadata information about this API resource", + "tags": [ + "Queries" + ] } }, "/api/v1/saved_query/distinct/{column_name}": { @@ -20133,12 +24056,14 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get distinct values from field data", + "tags": [ + "Queries" + ] } }, "/api/v1/saved_query/export/": { "get": { - "description": "Exports multiple saved queries and downloads them as YAML files", "parameters": [ { "content": { @@ -20182,7 +24107,10 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Download multiple saved queries as YAML files", + "tags": [ + "Queries" + ] } }, "/api/v1/saved_query/import/": { @@ -20258,7 +24186,10 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Import saved queries with associated databases", + "tags": [ + "Queries" + ] } }, "/api/v1/saved_query/related/{column_name}": { @@ -20313,12 +24244,14 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get related fields data", + "tags": [ + "Queries" + ] } }, "/api/v1/saved_query/{pk}": { "delete": { - "description": "Delete saved query", "parameters": [ { "in": "path", @@ -20360,10 +24293,13 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Delete a saved query", + "tags": [ + "Queries" + ] }, "get": { - "description": "Get a saved query", + "description": "Get an item model", "parameters": [ { "in": "path", @@ -20458,10 +24394,12 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Get a saved query", + "tags": [ + "Queries" + ] }, "put": { - "description": "Update a saved query", "parameters": [ { "in": "path", @@ -20520,12 +24458,14 @@ "jwt": [] } ], - "tags": ["Queries"] + "summary": "Update a saved query", + "tags": [ + "Queries" + ] } }, "/api/v1/security/csrf_token/": { "get": { - "description": "Fetch the CSRF token", "responses": { "200": { "content": { @@ -20554,12 +24494,14 @@ "jwt": [] } ], - "tags": ["Security"] + "summary": "Get the CSRF token", + "tags": [ + "Security" + ] } }, "/api/v1/security/guest_token/": { "post": { - "description": "Fetches a guest token", "requestBody": { "content": { "application/json": { @@ -20602,7 +24544,10 @@ "jwt": [] } ], - "tags": ["Security"] + "summary": "Get a guest token", + "tags": [ + "Security" + ] } }, "/api/v1/security/login": { @@ -20620,7 +24565,10 @@ }, "provider": { "description": "Choose an authentication provider", - "enum": ["db", "ldap"], + "enum": [ + "db", + "ldap" + ], "example": "db", "type": "string" }, @@ -20670,7 +24618,9 @@ "$ref": "#/components/responses/500" } }, - "tags": ["Security"] + "tags": [ + "Security" + ] } }, "/api/v1/security/refresh": { @@ -20705,7 +24655,47 @@ "jwt_refresh": [] } ], - "tags": ["Security"] + "tags": [ + "Security" + ] + } + }, + "/api/v1/sqllab/": { + "get": { + "description": "Assembles SQLLab bootstrap data (active_tab, databases, queries, tab_state_ids) in a single endpoint. The data can be assembled from the current user's id.", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SQLLabBootstrapSchema" + } + } + }, + "description": "Returns the initial bootstrap data for SqlLab" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Get the bootstrap data for SqlLab page", + "tags": [ + "SQL Lab" + ] } }, "/api/v1/sqllab/estimate/": { @@ -20755,13 +24745,14 @@ "jwt": [] } ], - "summary": "Estimates the SQL query execution cost", - "tags": ["SQL Lab"] + "summary": "Estimate the SQL query execution cost", + "tags": [ + "SQL Lab" + ] } }, "/api/v1/sqllab/execute/": { "post": { - "description": "Starts the execution of a SQL query", "requestBody": { "content": { "application/json": { @@ -20815,7 +24806,10 @@ "jwt": [] } ], - "tags": ["SQL Lab"] + "summary": "Execute a SQL query", + "tags": [ + "SQL Lab" + ] } }, "/api/v1/sqllab/export/{client_id}/": { @@ -20863,8 +24857,63 @@ "jwt": [] } ], - "summary": "Exports the SQL query results to a CSV", - "tags": ["SQL Lab"] + "summary": "Export the SQL query results to a CSV", + "tags": [ + "SQL Lab" + ] + } + }, + "/api/v1/sqllab/format_sql/": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FormatQueryPayloadSchema" + } + } + }, + "description": "SQL query", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "result": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Format SQL result" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Format SQL code", + "tags": [ + "SQL Lab" + ] } }, "/api/v1/sqllab/results/": { @@ -20917,13 +24966,15 @@ "jwt": [] } ], - "summary": "Gets the result of a SQL query execution", - "tags": ["SQL Lab"] + "summary": "Get the result of a SQL query execution", + "tags": [ + "SQL Lab" + ] } }, "/api/v1/tag/": { "delete": { - "description": "Deletes multiple Tags. This will remove all tagged objects with this tag", + "description": "Bulk deletes tags. This will remove all tagged objects with this tag.", "parameters": [ { "content": { @@ -20974,7 +25025,10 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Bulk delete tags", + "tags": [ + "Tags" + ] }, "get": { "description": "Get a list of tags, use Rison or JSON query parameters for filtering, sorting, pagination and for selecting specific columns and metadata.", @@ -21079,9 +25133,13 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Get a list of tags", + "tags": [ + "Tags" + ] }, "post": { + "description": "Create a new Tag", "requestBody": { "content": { "application/json": { @@ -21090,7 +25148,7 @@ } } }, - "description": "Model schema", + "description": "Tag schema", "required": true }, "responses": { @@ -21100,7 +25158,7 @@ "schema": { "properties": { "id": { - "type": "string" + "type": "number" }, "result": { "$ref": "#/components/schemas/TagRestApi.post" @@ -21110,7 +25168,7 @@ } } }, - "description": "Item inserted" + "description": "Tag added" }, "400": { "$ref": "#/components/responses/400" @@ -21130,12 +25188,15 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Create a tag", + "tags": [ + "Tags" + ] } }, "/api/v1/tag/_info": { "get": { - "description": "Several metadata information about tag API endpoints.", + "description": "Get metadata information about this API resource", "parameters": [ { "content": { @@ -21214,12 +25275,66 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Get metadata information about tag API endpoints", + "tags": [ + "Tags" + ] + } + }, + "/api/v1/tag/bulk_create": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagPostBulkSchema" + } + } + }, + "description": "Tag schema", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagPostBulkResponseSchema" + } + } + }, + "description": "Bulk created tags and tagged objects" + }, + "302": { + "description": "Redirects to the current digest" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "500": { + "$ref": "#/components/responses/500" + } + }, + "security": [ + { + "jwt": [] + } + ], + "summary": "Bulk create tags and tagged objects", + "tags": [ + "Tags" + ] } }, "/api/v1/tag/favorite_status/": { "get": { - "description": "Check favorited dashboards for current user", + "description": "Get favorited tags for current user", "parameters": [ { "content": { @@ -21262,12 +25377,13 @@ "jwt": [] } ], - "tags": ["Tags"] + "tags": [ + "Tags" + ] } }, "/api/v1/tag/get_objects/": { "get": { - "description": "Gets all objects associated with a Tag.", "parameters": [ { "in": "path", @@ -21318,7 +25434,10 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Get all objects associated with a tag", + "tags": [ + "Tags" + ] } }, "/api/v1/tag/related/{column_name}": { @@ -21373,12 +25492,15 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Get related fields data", + "tags": [ + "Tags" + ] } }, "/api/v1/tag/{object_type}/{object_id}/": { "post": { - "description": "Add tags to an object..", + "description": "Adds tags to an object. Creates new tags if they do not already exist.", "parameters": [ { "in": "path", @@ -21442,12 +25564,14 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Add tags to an object", + "tags": [ + "Tags" + ] } }, "/api/v1/tag/{object_type}/{object_id}/{tag}/": { "delete": { - "description": "Deletes a Tagged Object.", "parameters": [ { "in": "path", @@ -21511,7 +25635,10 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Delete a tagged object", + "tags": [ + "Tags" + ] } }, "/api/v1/tag/{pk}": { @@ -21557,10 +25684,13 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Delete a tag", + "tags": [ + "Tags" + ] }, "get": { - "description": "Get a tag detail information.", + "description": "Get an item model", "parameters": [ { "in": "path", @@ -21655,9 +25785,13 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Get a tag detail information", + "tags": [ + "Tags" + ] }, "put": { + "description": "Changes a Tag.", "parameters": [ { "in": "path", @@ -21676,7 +25810,7 @@ } } }, - "description": "Model schema", + "description": "Chart schema", "required": true }, "responses": { @@ -21685,6 +25819,9 @@ "application/json": { "schema": { "properties": { + "id": { + "type": "number" + }, "result": { "$ref": "#/components/schemas/TagRestApi.put" } @@ -21693,7 +25830,7 @@ } } }, - "description": "Item changed" + "description": "Tag changed" }, "400": { "$ref": "#/components/responses/400" @@ -21701,6 +25838,9 @@ "401": { "$ref": "#/components/responses/401" }, + "403": { + "$ref": "#/components/responses/403" + }, "404": { "$ref": "#/components/responses/404" }, @@ -21716,7 +25856,10 @@ "jwt": [] } ], - "tags": ["Tags"] + "summary": "Update a tag", + "tags": [ + "Tags" + ] } }, "/api/v1/tag/{pk}/favorites/": { @@ -21766,7 +25909,9 @@ "jwt": [] } ], - "tags": ["Tags"] + "tags": [ + "Tags" + ] }, "post": { "description": "Marks the tag as favorite for the current user", @@ -21814,7 +25959,40 @@ "jwt": [] } ], - "tags": ["Tags"] + "tags": [ + "Tags" + ] + } + }, + "/api/v1/user/{user_id}/avatar.png": { + "get": { + "description": "Gets the avatar URL for the user with the given ID, or returns a 401 error if the user is unauthenticated.", + "parameters": [ + { + "description": "The ID of the user", + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "301": { + "description": "A redirect to the user's avatar URL" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "404": { + "$ref": "#/components/responses/404" + } + }, + "summary": "Get the user avatar", + "tags": [ + "User" + ] } }, "/api/{version}/_openapi": { @@ -21853,7 +26031,9 @@ "jwt": [] } ], - "tags": ["OpenApi"] + "tags": [ + "OpenApi" + ] } } },