Compare commits

...

19 Commits

Author SHA1 Message Date
Maxime Beauchemin
3a3fc4c865 0.25.5 2018-05-17 14:45:24 -05:00
Maxime Beauchemin
1f572da063 add missing dep on contextlib2 2018-05-17 14:44:56 -05:00
Maxime Beauchemin
95d7cce312 0.25.4 2018-05-16 18:31:38 -05:00
Maxime Beauchemin
eedf725f2c Fix flask<1.0 2018-05-16 18:31:21 -05:00
Maxime Beauchemin
9adc6d37ad 0.25.3 2018-05-16 13:25:50 -05:00
Maxime Beauchemin
32689adb82 Fix EncryptedType error (#5007)
fixes https://github.com/apache/incubator-superset/issues/5005

(cherry picked from commit e72c9cded3)
2018-05-16 13:25:32 -05:00
Maxime Beauchemin
b73f0d29f5 0.25.2 2018-05-14 11:14:19 -05:00
Maxime Beauchemin
33602a4f90 Move from deprecated flask-cache to flask-caching (#4944)
It appears the officially maintained fork of flask-cache is
flask-caching https://github.com/sh4nks/flask-caching . It is fully
compatible with flask-cache.

(cherry picked from commit 45ffed9976)
2018-05-14 11:13:43 -05:00
Maxime Beauchemin
e6c8e5d842 0.25.1 2018-05-14 11:07:13 -05:00
Timi Fasubaa
1d4277cc07 bump pyhive version
(cherry picked from commit 6720255868)
2018-05-14 11:06:51 -05:00
grafke
c7c2ac45bc [sql lab] Use context manager for sqllab sessions (#4927)
* use session context manager

* contextlib2 added to requirements.txt

* Fixing error: Import statements are in the wrong order. from contextlib2 import contextmanager should be before import sqlalchemy

* Fixing return inside generator

* fixed C812 missing trailing comma

* E501 line too long

* fixed E127 continuation line over-indented for visual indent

* E722 do not use bare except

* reorganized imports

* added context manager contextlib2.contextmanager

* fixed import ordering

(cherry picked from commit 8591319bde)
2018-05-14 11:04:34 -05:00
Maxime Beauchemin
5e32262778 [deps] force flask<=1.0.0 (#4959)
flask 1.0 came out and has backwards incompatible changes. People
are reporting that fresh install doesn't work anymore.

fixes https://github.com/apache/incubator-superset/issues/4953

We should ship a 0.25.1 with this in

(cherry picked from commit 2c5200affd)
2018-05-14 11:02:47 -05:00
Maxime Beauchemin
93c96814ca 0.25.0 2018-05-07 22:20:05 -07:00
Maxime Beauchemin
be692399e5 Merge branch 'master' into 0.25 2018-05-07 22:19:18 -07:00
Maxime Beauchemin
31a70e0c66 0.25.0rc3 2018-04-27 16:18:39 -07:00
Maxime Beauchemin
c895a7dc72 Merge branch 'master' into 0.25 2018-04-27 16:18:01 -07:00
Maxime Beauchemin
f249d6d0be 0.25.0rc2 2018-04-26 21:21:58 -07:00
Maxime Beauchemin
41e52469a9 Merge branch 'master' into 0.25 2018-04-26 21:21:18 -07:00
Maxime Beauchemin
a21f3330ac 0.25.0rc1 2018-04-19 21:01:56 -07:00
7 changed files with 52 additions and 38 deletions

View File

@@ -292,7 +292,7 @@ generated-members=
# List of decorators that produce context managers, such as # List of decorators that produce context managers, such as
# contextlib.contextmanager. Add to this list to register other decorators that # contextlib.contextmanager. Add to this list to register other decorators that
# produce valid context managers. # produce valid context managers.
contextmanager-decorators=contextlib.contextmanager contextmanager-decorators=contextlib.contextmanager,contextlib2.contextmanager
[VARIABLES] [VARIABLES]

View File

@@ -5,7 +5,7 @@ colorama==0.3.9
cryptography==1.9 cryptography==1.9
flask==0.12.2 flask==0.12.2
flask-appbuilder==1.10.0 flask-appbuilder==1.10.0
flask-cache==0.13.1 flask-caching==1.4.0
flask-compress==1.4.0 flask-compress==1.4.0
flask-migrate==2.1.1 flask-migrate==2.1.1
flask-script==2.0.6 flask-script==2.0.6
@@ -22,8 +22,8 @@ pandas==0.22.0
parsedatetime==2.0.0 parsedatetime==2.0.0
pathlib2==2.3.0 pathlib2==2.3.0
polyline==1.3.2 polyline==1.3.2
pydruid==0.4.1 pydruid==0.4.2
pyhive==0.5.0 pyhive==0.5.1
python-dateutil==2.6.1 python-dateutil==2.6.1
python-geohash==0.8.5 python-geohash==0.8.5
pyyaml==3.12 pyyaml==3.12
@@ -37,3 +37,5 @@ thrift==0.11.0
thrift-sasl==0.3.0 thrift-sasl==0.3.0
unicodecsv==0.14.1 unicodecsv==0.14.1
unidecode==1.0.22 unidecode==1.0.22
contextlib2==0.5.5

View File

@@ -54,10 +54,11 @@ setup(
'boto3>=1.4.6', 'boto3>=1.4.6',
'celery', 'celery',
'colorama', 'colorama',
'contextlib2',
'cryptography', 'cryptography',
'flask', 'flask<1.0.0',
'flask-appbuilder', 'flask-appbuilder',
'flask-cache', 'flask-caching',
'flask-compress', 'flask-compress',
'flask-migrate', 'flask-migrate',
'flask-script', 'flask-script',

View File

@@ -1,6 +1,6 @@
{ {
"name": "superset", "name": "superset",
"version": "0.23.0dev", "version": "0.25.5",
"description": "Superset is a data exploration platform designed to be visual, intuitive, and interactive.", "description": "Superset is a data exploration platform designed to be visual, intuitive, and interactive.",
"license": "Apache-2.0", "license": "Apache-2.0",
"directories": { "directories": {

View File

@@ -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 identifiers, used by Alembic.
revision = '289ce07647b' revision = '289ce07647b'
down_revision = '2929af7925ed' down_revision = '2929af7925ed'
from alembic import op
import sqlalchemy as sa
from sqlalchemy_utils.types.encrypted import EncryptedType
def upgrade(): def upgrade():
op.add_column( op.add_column(
@@ -22,7 +22,7 @@ def upgrade():
sa.Column( sa.Column(
'password', 'password',
EncryptedType(sa.String(1024)), EncryptedType(sa.String(1024)),
nullable=True)) nullable=True))
def downgrade(): def downgrade():

View File

@@ -1,9 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# pylint: disable=C,R,W # pylint: disable=C,R,W
from __future__ import absolute_import from __future__ import absolute_import, division, print_function, unicode_literals
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from datetime import datetime from datetime import datetime
import json import json
@@ -12,6 +9,7 @@ from time import sleep
import uuid import uuid
from celery.exceptions import SoftTimeLimitExceeded from celery.exceptions import SoftTimeLimitExceeded
from contextlib2 import contextmanager
import numpy as np import numpy as np
import pandas as pd import pandas as pd
import sqlalchemy import sqlalchemy
@@ -75,16 +73,28 @@ def get_query(query_id, session, retry_count=5):
return query return query
def get_session(nullpool): @contextmanager
def session_scope(nullpool):
"""Provide a transactional scope around a series of operations."""
if nullpool: if nullpool:
engine = sqlalchemy.create_engine( engine = sqlalchemy.create_engine(
app.config.get('SQLALCHEMY_DATABASE_URI'), poolclass=NullPool) app.config.get('SQLALCHEMY_DATABASE_URI'), poolclass=NullPool)
session_class = sessionmaker() session_class = sessionmaker()
session_class.configure(bind=engine) session_class.configure(bind=engine)
return session_class() session = session_class()
session = db.session() else:
session.commit() # HACK session = db.session()
return 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): 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) @celery_app.task(bind=True, soft_time_limit=SQLLAB_TIMEOUT)
def get_sql_results( 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): user_name=None):
"""Executes the sql query returns the results.""" """Executes the sql query returns the results."""
try: with session_scope(not ctask.request.called_directly) as session:
return execute_sql(
ctask, query_id, rendered_query, return_results, store_results, user_name) try:
except Exception as e: return execute_sql(
logging.exception(e) ctask, query_id, rendered_query, return_results, store_results, user_name,
stats_logger.incr('error_sqllab_unhandled') session=session)
sesh = get_session(not ctask.request.called_directly) except Exception as e:
query = get_query(query_id, sesh) logging.exception(e)
query.error_message = str(e) stats_logger.incr('error_sqllab_unhandled')
query.status = QueryStatus.FAILED query = get_query(query_id, session)
query.tmp_table_name = None query.error_message = str(e)
sesh.commit() query.status = QueryStatus.FAILED
raise query.tmp_table_name = None
session.commit()
raise
def execute_sql( def execute_sql(
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, user_name=None, session=None,
): ):
"""Executes the sql query returns the results.""" """Executes the sql query returns the results."""
session = get_session(not ctask.request.called_directly)
query = get_query(query_id, session) query = get_query(query_id, session)
payload = dict(query_id=query_id) payload = dict(query_id=query_id)

View File

@@ -29,7 +29,7 @@ import celery
from dateutil.parser import parse from dateutil.parser import parse
from flask import flash, Markup, render_template from flask import flash, Markup, render_template
from flask_babel import gettext as __ from flask_babel import gettext as __
from flask_cache import Cache from flask_caching import Cache
import markdown as md import markdown as md
import numpy import numpy
import pandas as pd import pandas as pd