Browse Source

HUE-8740 [sql] Fix create engine when credentials are provided.

(cherry picked from commit a8fa6b35c9bd42a562877b2b6f4cf5db08495665)
jdesjean 6 years ago
parent
commit
45dc9b3fd7
1 changed files with 11 additions and 6 deletions
  1. 11 6
      desktop/libs/notebook/src/notebook/connectors/sqlalchemyapi.py

+ 11 - 6
desktop/libs/notebook/src/notebook/connectors/sqlalchemyapi.py

@@ -94,10 +94,7 @@ class SqlAlchemyApi(Api):
     self.options = interpreter['options']
     self.engine = None # Currently instantiated by an execute()
 
-  @query_error_handler
-  def execute(self, notebook, snippet):
-    guid = uuid.uuid4().hex
-
+  def _create_engine(self):
     if '${' in self.options['url']: # URL parameters substitution
       vars = {'user': self.user.username}
       for _prop in self.options['session']['properties']:
@@ -105,10 +102,18 @@ class SqlAlchemyApi(Api):
           vars['USER'] = _prop['value']
         if _prop['name'] == 'password':
           vars['PASSWORD'] = _prop['value']
+      raw_url = Template(self.options['url'])
+      url = raw_url.safe_substitute(**vars)
+    else:
+      url = self.options['url']
+    return create_engine(url)
 
-    raw_url = Template(self.options['url'])
-    self.engine = create_engine(raw_url.safe_substitute(**vars))
+  @query_error_handler
+  def execute(self, notebook, snippet):
+    guid = uuid.uuid4().hex
 
+    if not self.engine:
+      self.engine = self._create_engine()
     connection = self.engine.connect()
     result = connection.execute(snippet['statement'])
     cache = {