Преглед изворни кода

HUE-8330 [connector] APIs to update and delete connectors

Romain Rigaux пре 6 година
родитељ
комит
632ac45562

+ 9 - 20
apps/about/src/about/templates/admin_wizard.mako

@@ -19,10 +19,10 @@ from django.urls import reverse
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext as _
 
-from desktop.views import commonheader, commonfooter
 from metadata.conf import OPTIMIZER, has_optimizer
 
 from desktop.auth.backend import is_admin
+from desktop.views import commonheader, commonfooter
 %>
 
 <%namespace name="layout" file="/about_layout.mako" />
@@ -51,9 +51,9 @@ ${ layout.menubar(section='quick_start') }
            <div class="span2">
             <ul class="nav nav-pills nav-vertical-pills">
               <li class="active"><a href="#step1" class="step">${ _('Step 1:') } <i class="fa fa-cogs"></i> ${ _('Check Configuration') }</a></li>
-              <li><a href="#step2" class="step">${ _('Step 2:') } <i class="fa fa-book"></i> ${ _('Examples') }</a></li>
-              <li><a href="#step3" class="step">${ _('Step 3:') } <i class="fa fa-group"></i> ${ _('Users') }</a></li>
-              <li><a id="lastStep" href="#step4" class="step">${ _('Step 4:') } <i class="fa fa-flag"></i> ${_('Go!') }</a></li>
+              <li><a href="#step2" class="step">${ _('Step 2:') } <i class="fa fa-book"></i> ${ _('Connectors') }</a></li>
+              <li><a href="#step3" class="step">${ _('Step 3:') } <i class="fa fa-book"></i> ${ _('Examples') }</a></li>
+              <li><a id="lastStep" href="#step4" class="step">${ _('Step 4:') } <i class="fa fa-group"></i> ${ _('Users') }</a></li>
             </ul>
            </div>
 
@@ -73,6 +73,10 @@ ${ layout.menubar(section='quick_start') }
           </div>
 
           <div id="step2" class="stepDetails hide">
+
+          </div>
+
+          <div id="step3" class="stepDetails hide">
             <div>
               <h3>${ _('Install individual application examples') }</h3>
               <ul class="unstyled samples">
@@ -159,7 +163,7 @@ ${ layout.menubar(section='quick_start') }
             </div>
           </div>
 
-          <div id="step3" class="stepDetails hide">
+          <div id="step4" class="stepDetails hide">
             <div>
               <h3>${ _('Create or import users') }</h3>
               <a href="${ url('useradmin.views.list_users') }"
@@ -181,21 +185,6 @@ ${ layout.menubar(section='quick_start') }
                 </a>
               </label>
             </div>
-          </div>
-
-          <div id="step4" class="stepDetails hide">
-            <div>
-              <h3>${ _('Use the applications') }</h3>
-              % if is_embeddable:
-              <a href="/">
-                <i class="fa fa-home"></i> ${ _('Landing page') }
-              </a>
-              % else:
-                <a href="${ url('desktop_views_home2') }">
-                  <i class="fa fa-home"></i> ${ _('Home') }
-                </a>
-              % endif
-            </div>
 
             % if not is_embeddable:
             <div class="margin-top-30">

+ 45 - 8
desktop/core/src/desktop/lib/connectors/api.py

@@ -18,19 +18,21 @@
 import json
 import logging
 
-from desktop.lib.connectors.lib.impala import Impala
-from desktop.lib.connectors.lib.hive import Hive
+from django.utils.translation import ugettext as _
 
 from desktop.lib.django_util import JsonResponse, render
+from desktop.lib.connectors.lib.impala import Impala
+from desktop.lib.connectors.lib.hive import Hive
+from desktop.lib.exceptions_renderable import PopupException
 
 
 LOG = logging.getLogger(__name__)
 
 CONNECTOR_TYPES = [
   {'name': connector.NAME, 'settings': connector.PROPERTIES}
-  for connector in [
-    Impala(), Hive()
-  ]
+    for connector in [
+      Impala(), Hive()
+    ]
 ]
 
 CONNECTORS = {
@@ -80,10 +82,45 @@ def connectors(request):
   })
 
 
-def connector(request):
-  insance = json.loads(request.POST.get('id', 'null'))
+def get_connector(request, name):
+  instance = _get_connector(name)
+
+  return JsonResponse(instance)
+
+
+def update_connector(request):
+  connector = json.loads(request.POST.get('connector'), '{}')
+
+  instance = _get_connector(connector['name'])
+  instance.update(connector)
+
+  return JsonResponse(instance)
+
+
+def delete_connector(request):
+  global CONNECTOR_TYPES
+
+  connector = json.loads(request.POST.get('connector'), '{}')
+
+  size_before = len(CONNECTOR_TYPES)
+  CONNECTOR_TYPES = filter(lambda _connector: _connector['name'] != connector['name'], CONNECTOR_TYPES)
+  size_after = len(CONNECTOR_TYPES)
+
+  if size_before == size_after + 1:
+    return JsonResponse({})
+  else:
+    raise PopupException(_('No connector with the name %(name)s found.') % connector)
+
+
+def _get_connector(name):
+  global CONNECTOR_TYPES
+
+  instance = filter(lambda connector: connector['name'] == name, CONNECTOR_TYPES)
 
-  return JsonResponse(CONNECTOR_TYPES[0])
+  if instance:
+    return instance[0]
+  else:
+    raise PopupException(_('No connector with the name %s found.') % name)
 
 
 def connector_types(request):

+ 4 - 1
desktop/core/src/desktop/lib/connectors/urls.py

@@ -25,5 +25,8 @@ urlpatterns = [
 
   url(r'^api/instances/?$', api.connectors, name='connectors.api.connectors'),
   url(r'^api/types/?$', api.connector_types, name='connectors.api.connector_types'),
-  url(r'^api/instance/?$', api.connector, name='connectors.api.connector'),
+
+  url(r'^api/instance/get/(?P<name>\w+)$', api.get_connector, name='connectors.api.get_connector'),
+  url(r'^api/instance/delete/?$', api.delete_connector, name='connectors.api.delete_connector'),
+  url(r'^api/instance/update/?$', api.update_connector, name='connectors.api.update_connector'),
 ]

+ 17 - 3
desktop/core/src/desktop/templates/connectors.mako

@@ -85,11 +85,22 @@ else:
           self.instances(data.connectors);
         }});
       };
-      self.fetchConnector = function () {
-        self.apiHelper.simplePost('/desktop/connectors/api/instance/', {'id': 1}, {successCallback: function (data) {
+      self.fetchConnector = function (name) {
+        self.apiHelper.simpleGet('/desktop/connectors/api/instance/get/' + name, {successCallback: function (data) {
           self.instance(data.connector);
         }});
       };
+      self.deleteConnector = function (connector) {
+        self.apiHelper.simplePost('/desktop/connectors/api/instance/delete', {'connector': ko.mapping.toJSON(connector)}, {successCallback: function (data) {
+          self.section('connectors-page');
+          self.fetchConnectors();
+        }});
+      };
+      self.updateConnector = function (connector) {
+        self.apiHelper.simplePost('/desktop/connectors/api/instance/update', {'connector': ko.mapping.toJSON(connector)}, {successCallback: function (data) {
+          console.log('Success');
+        }});
+      };
       self.fetchConnectorTypes = function () {
         self.apiHelper.simpleGet('/desktop/connectors/api/types/', {}, {successCallback: function (data) {
           self.connectors(data.connectors);
@@ -163,6 +174,9 @@ ${layout.menubar(section='connectors')}
 <script type="text/html" id="connector-page">
   <div class="row-fluid">
     <span data-bind="text: name"></span>
+    <a href="javascript:void(0)" data-bind="click: $root.deleteConnector">
+      ${ _('Delete') }
+    </a>
     <table class="table table-condensed">
       <thead>
         <tr>
@@ -202,7 +216,7 @@ ${layout.menubar(section='connectors')}
       <div class="span10">
           <span class="pull-right">
             <a href="http://gethue.com" target="_blank">
-              <i class="fa fa-help"></i> ${ _('Help') }
+              <i class="fa fa-question-circle"></i> ${ _('Help') }
             </a>
           </span>