From ebd38bc524c5468eda2d26297f9f51f1352da5c0 Mon Sep 17 00:00:00 2001 From: dpgaspar Date: Thu, 19 May 2022 11:10:43 +0100 Subject: [PATCH 1/5] fix: advanced data type API spec and permission name --- superset/advanced_data_type/api.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/superset/advanced_data_type/api.py b/superset/advanced_data_type/api.py index 9df46c1322430..f1ba8a466f7b2 100644 --- a/superset/advanced_data_type/api.py +++ b/superset/advanced_data_type/api.py @@ -40,26 +40,28 @@ class AdvancedDataTypeRestApi(BaseApi): allow_browser_login = True include_route_methods = {"get", "get_types"} resource_name = "advanced_data_type" + class_permission_name = "AdvancedDataType" openapi_spec_tag = "Advanced Data Type" apispec_parameter_schemas = { "advanced_data_type_convert_schema": advanced_data_type_convert_schema, } + openapi_spec_component_schemas = (AdvancedDataTypeResponse,) @protect() @safe @expose("/convert", methods=["GET"]) - @permission_name("get") + @permission_name("read") @event_logger.log_this_with_context( action=lambda self, *args, **kwargs: f"{self.__class__.__name__}.get", log_to_statsd=False, # pylint: disable-arguments-renamed ) - @rison() + @rison(advanced_data_type_convert_schema) def get(self, **kwargs: Any) -> Response: """Returns a AdvancedDataTypeResponse object populated with the passed in args --- get: - description: >- + summary: >- Returns a AdvancedDataTypeResponse object populated with the passed in args. parameters: - in: query @@ -77,16 +79,7 @@ def get(self, **kwargs: Any) -> Response: schema: type: object properties: - status: - type: string - values: - type: array - formatted_value: - type: string - error_message: - type: string - valid_filter_operators: - type: string + $ref: '#/components/schemas/AdvancedDataTypeResponse' 400: $ref: '#/components/responses/400' 401: From 8028c3b0f1057770bdf1cdd79a3fce16cbe3148b Mon Sep 17 00:00:00 2001 From: dpgaspar Date: Thu, 19 May 2022 12:09:32 +0100 Subject: [PATCH 2/5] fix openAPI spec --- superset/advanced_data_type/api.py | 17 +++++++++-------- superset/advanced_data_type/schemas.py | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/superset/advanced_data_type/api.py b/superset/advanced_data_type/api.py index f1ba8a466f7b2..72f6a364eb8c9 100644 --- a/superset/advanced_data_type/api.py +++ b/superset/advanced_data_type/api.py @@ -21,7 +21,10 @@ from flask_appbuilder.api import BaseApi, expose, permission_name, protect, rison, safe from flask_babel import lazy_gettext as _ -from superset.advanced_data_type.schemas import advanced_data_type_convert_schema +from superset.advanced_data_type.schemas import ( + advanced_data_type_convert_schema, + AdvancedDataTypeSchema, +) from superset.advanced_data_type.types import AdvancedDataTypeResponse from superset.extensions import event_logger @@ -46,7 +49,7 @@ class AdvancedDataTypeRestApi(BaseApi): apispec_parameter_schemas = { "advanced_data_type_convert_schema": advanced_data_type_convert_schema, } - openapi_spec_component_schemas = (AdvancedDataTypeResponse,) + openapi_spec_component_schemas = (AdvancedDataTypeSchema,) @protect() @safe @@ -77,9 +80,7 @@ def get(self, **kwargs: Any) -> Response: content: application/json: schema: - type: object - properties: - $ref: '#/components/schemas/AdvancedDataTypeResponse' + $ref: '#/components/schemas/AdvancedDataTypeSchema' 400: $ref: '#/components/responses/400' 401: @@ -117,7 +118,7 @@ def get(self, **kwargs: Any) -> Response: @protect() @safe @expose("/types", methods=["GET"]) - @permission_name("get") + @permission_name("read") @event_logger.log_this_with_context( action=lambda self, *args, **kwargs: f"{self.__class__.__name__}.get", log_to_statsd=False, # pylint: disable-arguments-renamed @@ -140,8 +141,8 @@ def get_types(self) -> Response: properties: result: type: array - 400: - $ref: '#/components/responses/400' + items: + type: string 401: $ref: '#/components/responses/401' 404: diff --git a/superset/advanced_data_type/schemas.py b/superset/advanced_data_type/schemas.py index 133e6ae47f7ab..bff390e8a9bb6 100644 --- a/superset/advanced_data_type/schemas.py +++ b/superset/advanced_data_type/schemas.py @@ -17,6 +17,8 @@ """ Schemas for advanced data types """ +from marshmallow import fields, Schema + advanced_data_type_convert_schema = { "type": "array", @@ -28,3 +30,16 @@ }, }, } + + +class AdvancedDataTypeSchema(Schema): + """ + AdvancedDataType response schema + """ + + error_message = fields.String() + values = fields.List(fields.String(description="parsed value (can be any value)")) + display_value = fields.String( + description="The string representation of the parsed values" + ) + valid_filter_operators = fields.List(fields.String()) From 6e6656ce9e822c696b07c609bbe7351b0c642818 Mon Sep 17 00:00:00 2001 From: dpgaspar Date: Thu, 19 May 2022 14:50:56 +0100 Subject: [PATCH 3/5] fix query schema --- superset/advanced_data_type/api.py | 12 +++--------- superset/advanced_data_type/schemas.py | 14 +++++++------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/superset/advanced_data_type/api.py b/superset/advanced_data_type/api.py index 72f6a364eb8c9..0fd3375ca0d30 100644 --- a/superset/advanced_data_type/api.py +++ b/superset/advanced_data_type/api.py @@ -90,15 +90,9 @@ def get(self, **kwargs: Any) -> Response: 500: $ref: '#/components/responses/500' """ - items = kwargs["rison"] - advanced_data_type = items.get("type") - if not advanced_data_type: - return self.response( - 400, message=_("Missing advanced data type in request") - ) - values = items["values"] - if not values: - return self.response(400, message=_("Missing values in request")) + item = kwargs["rison"] + advanced_data_type = item["type"] + values = item["values"] addon = ADVANCED_DATA_TYPES.get(advanced_data_type) if not addon: return self.response( diff --git a/superset/advanced_data_type/schemas.py b/superset/advanced_data_type/schemas.py index bff390e8a9bb6..420a0ebadcb33 100644 --- a/superset/advanced_data_type/schemas.py +++ b/superset/advanced_data_type/schemas.py @@ -19,16 +19,16 @@ """ from marshmallow import fields, Schema - advanced_data_type_convert_schema = { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": {"type": "string"}, - "values": {"type": "array"}, + "type": "object", + "properties": { + "type": {"type": "string"}, + "values": { + "type": "array", + "minItems": 1, }, }, + "required": ["types", "values"], } From 4a0b34ce33484593794603c2967c90da3e55557d Mon Sep 17 00:00:00 2001 From: dpgaspar Date: Thu, 19 May 2022 15:10:23 +0100 Subject: [PATCH 4/5] fix query schema --- superset/advanced_data_type/schemas.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/superset/advanced_data_type/schemas.py b/superset/advanced_data_type/schemas.py index 420a0ebadcb33..d7a6e5eab67bd 100644 --- a/superset/advanced_data_type/schemas.py +++ b/superset/advanced_data_type/schemas.py @@ -22,13 +22,14 @@ advanced_data_type_convert_schema = { "type": "object", "properties": { - "type": {"type": "string"}, + "type": {"type": "string", "default": "port"}, "values": { "type": "array", + "items": {"type": "string", "default": "http"}, "minItems": 1, }, }, - "required": ["types", "values"], + "required": ["type", "values"], } From 5112dbdc4fa104dd1976409ad6bd233a9a8cc765 Mon Sep 17 00:00:00 2001 From: dpgaspar Date: Thu, 19 May 2022 15:31:27 +0100 Subject: [PATCH 5/5] fix query schema --- superset/advanced_data_type/schemas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superset/advanced_data_type/schemas.py b/superset/advanced_data_type/schemas.py index d7a6e5eab67bd..2175541b31ac1 100644 --- a/superset/advanced_data_type/schemas.py +++ b/superset/advanced_data_type/schemas.py @@ -25,7 +25,7 @@ "type": {"type": "string", "default": "port"}, "values": { "type": "array", - "items": {"type": "string", "default": "http"}, + "items": {"default": "http"}, "minItems": 1, }, },