mirror of
https://github.com/apache/superset.git
synced 2026-04-28 12:34:23 +00:00
Compare commits
19 Commits
feat/toolt
...
0.25.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a3fc4c865 | ||
|
|
1f572da063 | ||
|
|
95d7cce312 | ||
|
|
eedf725f2c | ||
|
|
9adc6d37ad | ||
|
|
32689adb82 | ||
|
|
b73f0d29f5 | ||
|
|
33602a4f90 | ||
|
|
e6c8e5d842 | ||
|
|
1d4277cc07 | ||
|
|
c7c2ac45bc | ||
|
|
5e32262778 | ||
|
|
93c96814ca | ||
|
|
be692399e5 | ||
|
|
31a70e0c66 | ||
|
|
c895a7dc72 | ||
|
|
f249d6d0be | ||
|
|
41e52469a9 | ||
|
|
a21f3330ac |
@@ -292,7 +292,7 @@ generated-members=
|
||||
# List of decorators that produce context managers, such as
|
||||
# contextlib.contextmanager. Add to this list to register other decorators that
|
||||
# produce valid context managers.
|
||||
contextmanager-decorators=contextlib.contextmanager
|
||||
contextmanager-decorators=contextlib.contextmanager,contextlib2.contextmanager
|
||||
|
||||
|
||||
[VARIABLES]
|
||||
|
||||
@@ -5,7 +5,7 @@ colorama==0.3.9
|
||||
cryptography==1.9
|
||||
flask==0.12.2
|
||||
flask-appbuilder==1.10.0
|
||||
flask-cache==0.13.1
|
||||
flask-caching==1.4.0
|
||||
flask-compress==1.4.0
|
||||
flask-migrate==2.1.1
|
||||
flask-script==2.0.6
|
||||
@@ -22,8 +22,8 @@ pandas==0.22.0
|
||||
parsedatetime==2.0.0
|
||||
pathlib2==2.3.0
|
||||
polyline==1.3.2
|
||||
pydruid==0.4.1
|
||||
pyhive==0.5.0
|
||||
pydruid==0.4.2
|
||||
pyhive==0.5.1
|
||||
python-dateutil==2.6.1
|
||||
python-geohash==0.8.5
|
||||
pyyaml==3.12
|
||||
@@ -37,3 +37,5 @@ thrift==0.11.0
|
||||
thrift-sasl==0.3.0
|
||||
unicodecsv==0.14.1
|
||||
unidecode==1.0.22
|
||||
contextlib2==0.5.5
|
||||
|
||||
|
||||
5
setup.py
5
setup.py
@@ -54,10 +54,11 @@ setup(
|
||||
'boto3>=1.4.6',
|
||||
'celery',
|
||||
'colorama',
|
||||
'contextlib2',
|
||||
'cryptography',
|
||||
'flask',
|
||||
'flask<1.0.0',
|
||||
'flask-appbuilder',
|
||||
'flask-cache',
|
||||
'flask-caching',
|
||||
'flask-compress',
|
||||
'flask-migrate',
|
||||
'flask-script',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "superset",
|
||||
"version": "0.23.0dev",
|
||||
"version": "0.25.5",
|
||||
"description": "Superset is a data exploration platform designed to be visual, intuitive, and interactive.",
|
||||
"license": "Apache-2.0",
|
||||
"directories": {
|
||||
|
||||
@@ -7,14 +7,14 @@ Create Date: 2015-11-21 11:18:00.650587
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy_utils import EncryptedType
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '289ce07647b'
|
||||
down_revision = '2929af7925ed'
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy_utils.types.encrypted import EncryptedType
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.add_column(
|
||||
@@ -22,7 +22,7 @@ def upgrade():
|
||||
sa.Column(
|
||||
'password',
|
||||
EncryptedType(sa.String(1024)),
|
||||
nullable=True))
|
||||
nullable=True))
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# pylint: disable=C,R,W
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from __future__ import print_function
|
||||
from __future__ import unicode_literals
|
||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||
|
||||
from datetime import datetime
|
||||
import json
|
||||
@@ -12,6 +9,7 @@ from time import sleep
|
||||
import uuid
|
||||
|
||||
from celery.exceptions import SoftTimeLimitExceeded
|
||||
from contextlib2 import contextmanager
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import sqlalchemy
|
||||
@@ -75,16 +73,28 @@ def get_query(query_id, session, retry_count=5):
|
||||
return query
|
||||
|
||||
|
||||
def get_session(nullpool):
|
||||
@contextmanager
|
||||
def session_scope(nullpool):
|
||||
"""Provide a transactional scope around a series of operations."""
|
||||
if nullpool:
|
||||
engine = sqlalchemy.create_engine(
|
||||
app.config.get('SQLALCHEMY_DATABASE_URI'), poolclass=NullPool)
|
||||
session_class = sessionmaker()
|
||||
session_class.configure(bind=engine)
|
||||
return session_class()
|
||||
session = db.session()
|
||||
session.commit() # HACK
|
||||
return session
|
||||
session = session_class()
|
||||
else:
|
||||
session = db.session()
|
||||
session.commit() # HACK
|
||||
|
||||
try:
|
||||
yield session
|
||||
session.commit()
|
||||
except Exception as e:
|
||||
session.rollback()
|
||||
logging.exception(e)
|
||||
raise
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
|
||||
def convert_results_to_df(cursor_description, data):
|
||||
@@ -109,30 +119,31 @@ def convert_results_to_df(cursor_description, data):
|
||||
|
||||
@celery_app.task(bind=True, soft_time_limit=SQLLAB_TIMEOUT)
|
||||
def get_sql_results(
|
||||
ctask, query_id, rendered_query, return_results=True, store_results=False,
|
||||
ctask, query_id, rendered_query, return_results=True, store_results=False,
|
||||
user_name=None):
|
||||
"""Executes the sql query returns the results."""
|
||||
try:
|
||||
return execute_sql(
|
||||
ctask, query_id, rendered_query, return_results, store_results, user_name)
|
||||
except Exception as e:
|
||||
logging.exception(e)
|
||||
stats_logger.incr('error_sqllab_unhandled')
|
||||
sesh = get_session(not ctask.request.called_directly)
|
||||
query = get_query(query_id, sesh)
|
||||
query.error_message = str(e)
|
||||
query.status = QueryStatus.FAILED
|
||||
query.tmp_table_name = None
|
||||
sesh.commit()
|
||||
raise
|
||||
with session_scope(not ctask.request.called_directly) as session:
|
||||
|
||||
try:
|
||||
return execute_sql(
|
||||
ctask, query_id, rendered_query, return_results, store_results, user_name,
|
||||
session=session)
|
||||
except Exception as e:
|
||||
logging.exception(e)
|
||||
stats_logger.incr('error_sqllab_unhandled')
|
||||
query = get_query(query_id, session)
|
||||
query.error_message = str(e)
|
||||
query.status = QueryStatus.FAILED
|
||||
query.tmp_table_name = None
|
||||
session.commit()
|
||||
raise
|
||||
|
||||
|
||||
def execute_sql(
|
||||
ctask, query_id, rendered_query, return_results=True, store_results=False,
|
||||
user_name=None,
|
||||
user_name=None, session=None,
|
||||
):
|
||||
"""Executes the sql query returns the results."""
|
||||
session = get_session(not ctask.request.called_directly)
|
||||
|
||||
query = get_query(query_id, session)
|
||||
payload = dict(query_id=query_id)
|
||||
|
||||
@@ -29,7 +29,7 @@ import celery
|
||||
from dateutil.parser import parse
|
||||
from flask import flash, Markup, render_template
|
||||
from flask_babel import gettext as __
|
||||
from flask_cache import Cache
|
||||
from flask_caching import Cache
|
||||
import markdown as md
|
||||
import numpy
|
||||
import pandas as pd
|
||||
|
||||
Reference in New Issue
Block a user