Skip to content

Commit

Permalink
Lyft view - amundsen edition
Browse files Browse the repository at this point in the history
(cherry picked from commit 9b3420c8ef51739206282514ca4a69fb01a2066f)
(cherry picked from commit 2df0fb8d286616cd4d5b9f582d337c726edd1d7a)
(cherry picked from commit 2829ead)
  • Loading branch information
mistercrunch committed Nov 8, 2018
1 parent 444ccb6 commit ac9dbef
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 0 deletions.
1 change: 1 addition & 0 deletions superset/views/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from . import lyft # noqa
from . import base # noqa
from . import api # noqa
from . import core # noqa
Expand Down
3 changes: 3 additions & 0 deletions superset/views/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -2436,6 +2436,9 @@ def stop_query(self):
@expose('/sql_json/', methods=['POST', 'GET'])
@log_this
def sql_json(self):
return self.sql_json_call(request)

def sql_json_call(self, request):
"""Runs arbitrary sql and returns and json"""
async_ = request.form.get('runAsync') == 'true'
sql = request.form.get('sql')
Expand Down
55 changes: 55 additions & 0 deletions superset/views/lyft.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from flask import Response, request, g
from flask_appbuilder import expose

from superset import app, appbuilder, security_manager
from superset.exceptions import SupersetException
import superset.models.core as models
from superset.views.core import Superset
from .base import json_error_response

config = app.config
stats_logger = config.get('STATS_LOGGER')
log_this = models.Log.log_this
DAR = models.DatasourceAccessRequest


class UserDontExistException(SupersetException):
pass


def json_success(json_msg, status=200):
return Response(json_msg, status=status, mimetype='application/json')


class Lyft(Superset):

def authorize(self):
"""Provides access if token, impersonates if specified"""
if not security_manager.has_tom_key():
raise SupersetException("Wrong key")

email = request.headers.get('IMPERSONATE')
if email:
user = security_manager.find_user(email=email)
if not user:
raise UserDontExistException("Email to impersonate not found")
g.user = user

@expose('/sql_json/', methods=['POST', 'GET'])
@log_this
def sql_json(self):
try:
self.authorize()
except UserDontExistException as e:
return json_error_response('{}'.format(e), status=412)
except Exception as e:
return json_error_response('{}'.format(e))
return self.sql_json_call(request)


appbuilder.add_view_no_menu(Lyft)

0 comments on commit ac9dbef

Please sign in to comment.