You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by dp...@apache.org on 2020/04/14 09:11:24 UTC

[incubator-superset] branch master updated: [api] refactor, remove unnecessary code, using command pattern now (#9520)

This is an automated email from the ASF dual-hosted git repository.

dpgaspar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to refs/heads/master by this push:
     new c343c2f  [api] refactor, remove unnecessary code, using command pattern now (#9520)
c343c2f is described below

commit c343c2ff1d4c96dd9f532ee53e1b9cd1398ffb73
Author: Daniel Vaz Gaspar <da...@gmail.com>
AuthorDate: Tue Apr 14 10:11:11 2020 +0100

    [api] refactor, remove unnecessary code, using command pattern now (#9520)
---
 superset/views/base_api.py | 178 ---------------------------------------------
 1 file changed, 178 deletions(-)

diff --git a/superset/views/base_api.py b/superset/views/base_api.py
index d0c027d..1023f7a 100644
--- a/superset/views/base_api.py
+++ b/superset/views/base_api.py
@@ -14,19 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-import functools
 import logging
 from typing import cast, Dict, Set, Tuple, Type, Union
 
-from flask import request
 from flask_appbuilder import ModelRestApi
 from flask_appbuilder.api import expose, protect, rison, safe
 from flask_appbuilder.models.filters import BaseFilter, Filters
 from flask_appbuilder.models.sqla.filters import FilterStartsWith
-from sqlalchemy.exc import SQLAlchemyError
-
-from superset.exceptions import SupersetSecurityException
-from superset.views.base import check_ownership
 
 logger = logging.getLogger(__name__)
 get_related_schema = {
@@ -39,26 +33,6 @@ get_related_schema = {
 }
 
 
-def check_ownership_and_item_exists(f):
-    """
-    A Decorator that checks if an object exists and is owned by the current user
-    """
-
-    def wraps(self, pk):
-        item = self.datamodel.get(
-            pk, self._base_filters  # pylint: disable=protected-access
-        )
-        if not item:
-            return self.response_404()
-        try:
-            check_ownership(item)
-        except SupersetSecurityException as ex:
-            return self.response(403, message=str(ex))
-        return f(self, item)
-
-    return functools.update_wrapper(wraps, f)
-
-
 class RelatedFieldFilter:
     # data class to specify what filter to use on a /related endpoint
     # pylint: disable=too-few-public-methods
@@ -235,155 +209,3 @@ class BaseSupersetModelRestApi(ModelRestApi):
             for value in values
         ]
         return self.response(200, count=count, result=result)
-
-
-class BaseOwnedModelRestApi(BaseSupersetModelRestApi):
-    @expose("/<pk>", methods=["PUT"])
-    @protect()
-    @check_ownership_and_item_exists
-    @safe
-    def put(self, item):  # pylint: disable=arguments-differ
-        """Changes a owned Model
-        ---
-        put:
-          parameters:
-          - in: path
-            schema:
-              type: integer
-            name: pk
-          requestBody:
-            description: Model schema
-            required: true
-            content:
-              application/json:
-                schema:
-                  $ref: '#/components/schemas/{{self.__class__.__name__}}.put'
-          responses:
-            200:
-              description: Item changed
-              content:
-                application/json:
-                  schema:
-                    type: object
-                    properties:
-                      result:
-                        $ref: '#/components/schemas/{{self.__class__.__name__}}.put'
-            400:
-              $ref: '#/components/responses/400'
-            401:
-              $ref: '#/components/responses/401'
-            403:
-              $ref: '#/components/responses/401'
-            404:
-              $ref: '#/components/responses/404'
-            422:
-              $ref: '#/components/responses/422'
-            500:
-              $ref: '#/components/responses/500'
-        """
-        if not request.is_json:
-            self.response_400(message="Request is not JSON")
-        item = self.edit_model_schema.load(request.json, instance=item)
-        if item.errors:
-            return self.response_422(message=item.errors)
-        try:
-            self.datamodel.edit(item.data, raise_exception=True)
-            return self.response(
-                200, result=self.edit_model_schema.dump(item.data, many=False).data
-            )
-        except SQLAlchemyError as ex:
-            logger.error(f"Error updating model {self.__class__.__name__}: {ex}")
-            return self.response_422(message=str(ex))
-
-    @expose("/", methods=["POST"])
-    @protect()
-    @safe
-    def post(self):
-        """Creates a new owned Model
-        ---
-        post:
-          requestBody:
-            description: Model schema
-            required: true
-            content:
-              application/json:
-                schema:
-                  $ref: '#/components/schemas/{{self.__class__.__name__}}.post'
-          responses:
-            201:
-              description: Model added
-              content:
-                application/json:
-                  schema:
-                    type: object
-                    properties:
-                      id:
-                        type: string
-                      result:
-                        $ref: '#/components/schemas/{{self.__class__.__name__}}.post'
-            400:
-              $ref: '#/components/responses/400'
-            401:
-              $ref: '#/components/responses/401'
-            422:
-              $ref: '#/components/responses/422'
-            500:
-              $ref: '#/components/responses/500'
-        """
-        if not request.is_json:
-            return self.response_400(message="Request is not JSON")
-        item = self.add_model_schema.load(request.json)
-        # This validates custom Schema with custom validations
-        if item.errors:
-            return self.response_422(message=item.errors)
-        try:
-            self.datamodel.add(item.data, raise_exception=True)
-            return self.response(
-                201,
-                result=self.add_model_schema.dump(item.data, many=False).data,
-                id=item.data.id,
-            )
-        except SQLAlchemyError as ex:
-            logger.error(f"Error creating model {self.__class__.__name__}: {ex}")
-            return self.response_422(message=str(ex))
-
-    @expose("/<pk>", methods=["DELETE"])
-    @protect()
-    @check_ownership_and_item_exists
-    @safe
-    def delete(self, item):  # pylint: disable=arguments-differ
-        """Deletes owned Model
-        ---
-        delete:
-          parameters:
-          - in: path
-            schema:
-              type: integer
-            name: pk
-          responses:
-            200:
-              description: Model delete
-              content:
-                application/json:
-                  schema:
-                    type: object
-                    properties:
-                      message:
-                        type: string
-            401:
-              $ref: '#/components/responses/401'
-            403:
-              $ref: '#/components/responses/401'
-            404:
-              $ref: '#/components/responses/404'
-            422:
-              $ref: '#/components/responses/422'
-            500:
-              $ref: '#/components/responses/500'
-        """
-        try:
-            self.datamodel.delete(item, raise_exception=True)
-            return self.response(200, message="OK")
-        except SQLAlchemyError as ex:
-            logger.error(f"Error deleting model {self.__class__.__name__}: {ex}")
-            return self.response_422(message=str(ex))