|
@@ -41,6 +41,8 @@ Note: this is currently supporting concurrent querying by one users as engine is
|
|
|
session at some point.
|
|
session at some point.
|
|
|
Note: using the task server would not leverage any caching.
|
|
Note: using the task server would not leverage any caching.
|
|
|
'''
|
|
'''
|
|
|
|
|
+from future import standard_library
|
|
|
|
|
+standard_library.install_aliases()
|
|
|
|
|
|
|
|
import datetime
|
|
import datetime
|
|
|
import json
|
|
import json
|
|
@@ -49,6 +51,7 @@ import uuid
|
|
|
import sys
|
|
import sys
|
|
|
|
|
|
|
|
from string import Template
|
|
from string import Template
|
|
|
|
|
+from urllib.parse import quote_plus
|
|
|
|
|
|
|
|
from django.utils.translation import ugettext as _
|
|
from django.utils.translation import ugettext as _
|
|
|
from sqlalchemy import create_engine, inspect
|
|
from sqlalchemy import create_engine, inspect
|
|
@@ -106,6 +109,12 @@ class SqlAlchemyApi(Api):
|
|
|
else:
|
|
else:
|
|
|
url = self.options['url']
|
|
url = self.options['url']
|
|
|
|
|
|
|
|
|
|
+ if url.startswith('awsathena+rest://'):
|
|
|
|
|
+ url = url.replace(url[17:37], quote_plus(url[17:37]))
|
|
|
|
|
+ url = url.replace(url[38:50], quote_plus(url[38:50]))
|
|
|
|
|
+ s3_staging_dir = url.rsplit('s3_staging_dir=', 1)[1]
|
|
|
|
|
+ url = url.replace(s3_staging_dir, quote_plus(s3_staging_dir))
|
|
|
|
|
+
|
|
|
options = self.options.copy()
|
|
options = self.options.copy()
|
|
|
options.pop('session', None)
|
|
options.pop('session', None)
|
|
|
options.pop('url', None)
|
|
options.pop('url', None)
|