瀏覽代碼

HUE-1746 [metastore] Read header from file

Styled the use header button
Added breadcrumbs and database selector to the create table pages
Enrico Berti 12 年之前
父節點
當前提交
932498a

+ 12 - 3
apps/beeswax/src/beeswax/create_table.py

@@ -42,10 +42,11 @@ from beeswax.views import execute_directly
 
 LOG = logging.getLogger(__name__)
 
-
 def create_table(request, database='default'):
   """Create a table by specifying its attributes manually"""
   db = dbms.get(request.user)
+  dbs = db.get_databases()
+  databases = [{'name':db, 'url':reverse('beeswax:create_table', kwargs={'database': db})} for db in dbs]
 
   form = MultiForm(
       table=CreateTableForm,
@@ -63,6 +64,7 @@ def create_table(request, database='default'):
         columns = [ f.cleaned_data for f in form.columns.forms ]
         partition_columns = [ f.cleaned_data for f in form.partitions.forms ]
         proposed_query = django_mako.render_to_string("create_table_statement.mako", {
+            'databases': databases,
             'database': database,
             'table': form.table.cleaned_data,
             'columns': columns,
@@ -78,6 +80,7 @@ def create_table(request, database='default'):
 
   return render("create_table_manually.mako", request, {
     'action': "#",
+    'databases': databases,
     'table_form': form.table,
     'columns_form': form.columns,
     'partitions_form': form.partitions,
@@ -110,6 +113,10 @@ def import_wizard(request, database='default'):
   encoding = i18n.get_site_encoding()
   app_name = get_app_name(request)
 
+  db = dbms.get(request.user)
+  dbs = db.get_databases()
+  databases = [{'name':db, 'url':reverse('beeswax:import_wizard', kwargs={'database': db})} for db in dbs]
+
   if request.method == 'POST':
     #
     # General processing logic:
@@ -127,8 +134,6 @@ def import_wizard(request, database='default'):
     delim_is_auto = False
     fields_list, n_cols = [[]], 0
     s3_col_formset = None
-
-    db = dbms.get(request.user)
     s1_file_form = CreateByImportFileForm(request.POST, db=db)
 
     if s1_file_form.is_valid():
@@ -180,6 +185,7 @@ def import_wizard(request, database='default'):
           'delimiter_choices': TERMINATOR_CHOICES,
           'n_cols': n_cols,
           'database': database,
+          'databases': databases
         })
 
       #
@@ -204,6 +210,7 @@ def import_wizard(request, database='default'):
             'fields_list_json': json.dumps(fields_list),
             'n_cols': n_cols,
             'database': database,
+            'databases': databases
           })
         except Exception, e:
           raise PopupException(_("The selected delimiter is creating an un-even number of columns. Please make sure you don't have empty columns."), detail=e)
@@ -224,6 +231,7 @@ def import_wizard(request, database='default'):
             'columns': [ f.cleaned_data for f in s3_col_formset.forms ],
             'partition_columns': [],
             'database': database,
+            'databases': databases
           }
         )
 
@@ -237,6 +245,7 @@ def import_wizard(request, database='default'):
     'action': reverse(app_name + ':import_wizard', kwargs={'database': database}),
     'file_form': s1_file_form,
     'database': database,
+    'databases': databases
   })
 
 

+ 35 - 5
apps/beeswax/src/beeswax/templates/choose_delimiter.mako

@@ -25,20 +25,46 @@ from django.utils.translation import ugettext as _
 ${ commonheader(_('Create table from file'), 'metastore', user) | n,unicode }
 ${ layout.metastore_menubar() }
 
+<link rel="stylesheet" href="/metastore/static/css/metastore.css">
+
 <div class="container-fluid">
     <div class="row-fluid">
         <div class="span3">
             <div class="sidebar-nav">
                 <ul class="nav nav-list">
-                    <li class="nav-header">${_('Actions')}</li>
-                    <li><a href="${ url(app_name + ':import_wizard', database=database)}"><i class="fa fa-files-o"></i> ${_('Create a new table from a file')}</a></li>
-                    <li><a href="${ url(app_name + ':create_table', database=database)}"><i class="fa fa-wrench"></i> ${_('Create a new table manually')}</a></li>
+                  <li class="nav-header">${_('database')}</li>
+                  <li class="white">
+                      <select id="chooseDatabase" class="input-medium">
+                    % for db in databases:
+                      <option value="${db["url"]}"
+                              %if database==db["name"]:
+                                selected="selected"
+                              %endif
+                          >${db["name"]}</option>
+                    % endfor
+                      </select>
+                  </li>
+                  <li class="nav-header">${_('Actions')}</li>
+                  <li><a href="${ url(app_name + ':import_wizard', database=database)}"><i class="fa fa-files-o"></i> ${_('Create a new table from a file')}</a></li>
+                  <li><a href="${ url(app_name + ':create_table', database=database)}"><i class="fa fa-wrench"></i> ${_('Create a new table manually')}</a></li>
                 </ul>
             </div>
         </div>
         <div class="span9">
-          <div class="card" style="margin-top: 0">
-            <h1 class="card-heading simple">${_('Create a new table from a file')}</h1>
+          <div class="card card-small" style="margin-top: 0">
+            <h1 class="card-heading simple">
+              <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">
+                <li>
+                  <a href="${url('metastore:databases')}">${_('Databases')}</a><span class="divider">&gt;</span>
+                </li>
+                <li>
+                  <a href="${ url('metastore:show_tables', database=database) }">${database}</a><span class="divider">&gt;</span>
+                </li>
+                <li>
+                    <span style="padding-left:12px">${_('Create a new table from a file')}</span>
+                </li>
+              </ul>
+            </h1>
             <div class="card-body">
               <p>
                 <ul class="nav nav-pills">
@@ -115,6 +141,10 @@ ${ layout.metastore_menubar() }
 
 <script type="text/javascript" charset="utf-8">
   $(document).ready(function () {
+    $("#chooseDatabase").on("change", function () {
+      window.location.href = $(this).val();
+    });
+
     $("[rel='tooltip']").tooltip();
 
     $(".scrollable").width($(".form-actions").width() - 170);

+ 75 - 45
apps/beeswax/src/beeswax/templates/choose_file.mako

@@ -24,20 +24,46 @@ from django.utils.translation import ugettext as _
 ${ commonheader(_('Create table from file'), 'metastore', user) | n,unicode }
 ${ layout.metastore_menubar() }
 
+<link rel="stylesheet" href="/metastore/static/css/metastore.css">
+
 <div class="container-fluid">
     <div class="row-fluid">
         <div class="span3">
             <div class="sidebar-nav">
                 <ul class="nav nav-list">
-                    <li class="nav-header">${_('Actions')}</li>
-                    <li><a href="${ url(app_name + ':import_wizard', database=database)}"><i class="fa fa-files-o"></i> ${_('Create a new table from a file')}</a></li>
-                    <li><a href="${ url(app_name + ':create_table', database=database)}"><i class="fa fa-wrench"></i> ${_('Create a new table manually')}</a></li>
+                  <li class="nav-header">${_('database')}</li>
+                  <li class="white">
+                      <select id="chooseDatabase" class="input-medium">
+                    % for db in databases:
+                      <option value="${db["url"]}"
+                              %if database==db["name"]:
+                                selected="selected"
+                              %endif
+                          >${db["name"]}</option>
+                    % endfor
+                      </select>
+                  </li>
+                  <li class="nav-header">${_('Actions')}</li>
+                  <li><a href="${ url(app_name + ':import_wizard', database=database)}"><i class="fa fa-files-o"></i> ${_('Create a new table from a file')}</a></li>
+                  <li><a href="${ url(app_name + ':create_table', database=database)}"><i class="fa fa-wrench"></i> ${_('Create a new table manually')}</a></li>
                 </ul>
             </div>
         </div>
         <div class="span9">
-          <div class="card" style="margin-top: 0">
-            <h1 class="card-heading simple">${_('Create a new table from a file')}</h1>
+          <div class="card card-small" style="margin-top: 0">
+            <h1 class="card-heading simple">
+              <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">
+                <li>
+                  <a href="${url('metastore:databases')}">${_('Databases')}</a><span class="divider">&gt;</span>
+                </li>
+                <li>
+                  <a href="${ url('metastore:show_tables', database=database) }">${database}</a><span class="divider">&gt;</span>
+                </li>
+                <li>
+                    <span style="padding-left:12px">${_('Create a new table from a file')}</span>
+                </li>
+              </ul>
+            </h1>
             <div class="card-body">
               <p>
                 <ul class="nav nav-pills">
@@ -127,52 +153,56 @@ ${ layout.metastore_menubar() }
 
 
 <style type="text/css">
-    #filechooser {
-        min-height: 100px;
-        overflow-y: auto;
-        margin-top: 10px;
-    }
+  #filechooser {
+    min-height: 100px;
+    overflow-y: auto;
+    margin-top: 10px;
+  }
 
-    #fileWillBeMoved {
-        margin-top: 10px;
-    }
+  #fileWillBeMoved {
+    margin-top: 10px;
+  }
 </style>
 
 
 <script type="text/javascript" charset="utf-8">
-    $(document).ready(function(){
-        $(".fileChooserBtn").click(function(e){
-            e.preventDefault();
-            var _destination = $(this).attr("data-filechooser-destination");
-            $("#filechooser").jHueFileChooser({
-                initialPath: $("input[name='"+_destination+"']").val(),
-                onFileChoose: function(filePath){
-                    $("input[name='"+_destination+"']").val(filePath);
-                    $("#chooseFile").modal("hide");
-                },
-                createFolder: false
-            });
-            $("#chooseFile").modal("show");
-        });
-        $("#id_do_import").change(function(){
-            if ($(this).is(":checked")){
-                $("#fileWillBeMoved").show();
-            }
-            else {
-                $("#fileWillBeMoved").hide();
-            }
-        });
-        $("#step2").click(function(e){
-            e.preventDefault();
-            $("input[name='submit_file']").click();
-        });
-        $("body").keypress(function(e){
-            if(e.which == 13){
-                e.preventDefault();
-                $("input[name='submit_file']").click();
-            }
-        });
+  $(document).ready(function () {
+    $("#chooseDatabase").on("change", function () {
+      window.location.href = $(this).val();
+    });
+
+    $(".fileChooserBtn").click(function (e) {
+      e.preventDefault();
+      var _destination = $(this).attr("data-filechooser-destination");
+      $("#filechooser").jHueFileChooser({
+        initialPath: $("input[name='" + _destination + "']").val(),
+        onFileChoose: function (filePath) {
+          $("input[name='" + _destination + "']").val(filePath);
+          $("#chooseFile").modal("hide");
+        },
+        createFolder: false
+      });
+      $("#chooseFile").modal("show");
+    });
+    $("#id_do_import").change(function () {
+      if ($(this).is(":checked")) {
+        $("#fileWillBeMoved").show();
+      }
+      else {
+        $("#fileWillBeMoved").hide();
+      }
+    });
+    $("#step2").click(function (e) {
+      e.preventDefault();
+      $("input[name='submit_file']").click();
+    });
+    $("body").keypress(function (e) {
+      if (e.which == 13) {
+        e.preventDefault();
+        $("input[name='submit_file']").click();
+      }
     });
+  });
 </script>
 
 ${ commonfooter(messages) | n,unicode }

+ 32 - 2
apps/beeswax/src/beeswax/templates/create_table_manually.mako

@@ -24,11 +24,25 @@ from django.utils.translation import ugettext as _
 ${ commonheader(_("Create table manually"), 'metastore', user) | n,unicode }
 ${ layout.metastore_menubar() }
 
+<link rel="stylesheet" href="/metastore/static/css/metastore.css">
+
 <div class="container-fluid">
 <div class="row-fluid">
 <div class="span3">
     <div class="sidebar-nav">
         <ul class="nav nav-list">
+            <li class="nav-header">${_('database')}</li>
+            <li class="white">
+                <select id="chooseDatabase" class="input-medium">
+              % for db in databases:
+                <option value="${db["url"]}"
+                        %if database==db["name"]:
+                          selected="selected"
+                        %endif
+                    >${db["name"]}</option>
+              % endfor
+                </select>
+            </li>
             <li class="nav-header">${_('Actions')}</li>
             <li><a href="${ url(app_name + ':import_wizard', database=database)}"><i class="fa fa-files-o"></i> ${_('Create a new table from a file')}</a></li>
             <li><a href="${ url(app_name + ':create_table', database=database)}"><i class="fa fa-wrench"></i> ${_('Create a new table manually')}</a></li>
@@ -37,8 +51,20 @@ ${ layout.metastore_menubar() }
 </div>
 
 <div class="span9">
-  <div class="card" style="margin-top: 0">
-    <h1 class="card-heading simple">${_('Create a new table manually')}</h1>
+  <div class="card card-small" style="margin-top: 0">
+    <h1 class="card-heading simple">
+      <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">
+        <li>
+          <a href="${url('metastore:databases')}">${_('Databases')}</a><span class="divider">&gt;</span>
+        </li>
+        <li>
+          <a href="${ url('metastore:show_tables', database=database) }">${database}</a><span class="divider">&gt;</span>
+        </li>
+        <li>
+            <span style="padding-left:12px">${_('Create a new table manually')}</span>
+        </li>
+      </ul>
+    </h1>
     <div class="card-body">
       <p>
         <ul class="nav nav-pills">
@@ -444,6 +470,10 @@ ${ layout.metastore_menubar() }
 
 <script type="text/javascript" charset="utf-8">
 $(document).ready(function () {
+  $("#chooseDatabase").on("change", function () {
+    window.location.href = $(this).val();
+  });
+
   if ($(".removeBtn").length == 1) {
     $(".removeBtn").first().hide();
   }

+ 36 - 6
apps/beeswax/src/beeswax/templates/define_columns.mako

@@ -25,20 +25,46 @@ from django.utils.translation import ugettext as _
 ${ commonheader(_('Create table from file'), 'metastore', user) | n,unicode }
 ${ layout.metastore_menubar() }
 
+<link rel="stylesheet" href="/metastore/static/css/metastore.css">
+
 <div class="container-fluid">
     <div class="row-fluid">
         <div class="span3">
             <div class="sidebar-nav">
                 <ul class="nav nav-list">
-                    <li class="nav-header">${_('Actions')}</li>
-                    <li><a href="${ url(app_name + ':import_wizard', database=database)}"><i class="fa fa-files-o"></i> ${_('Create a new table from a file')}</a></li>
-                    <li><a href="${ url(app_name + ':create_table', database=database)}"><i class="fa fa-wrench"></i> ${_('Create a new table manually')}</a></li>
+                  <li class="nav-header">${_('database')}</li>
+                  <li class="white">
+                      <select id="chooseDatabase" class="input-medium">
+                    % for db in databases:
+                      <option value="${db["url"]}"
+                              %if database==db["name"]:
+                                selected="selected"
+                              %endif
+                          >${db["name"]}</option>
+                    % endfor
+                      </select>
+                  </li>
+                  <li class="nav-header">${_('Actions')}</li>
+                  <li><a href="${ url(app_name + ':import_wizard', database=database)}"><i class="fa fa-files-o"></i> ${_('Create a new table from a file')}</a></li>
+                  <li><a href="${ url(app_name + ':create_table', database=database)}"><i class="fa fa-wrench"></i> ${_('Create a new table manually')}</a></li>
                 </ul>
             </div>
         </div>
         <div class="span9">
-          <div class="card" style="margin-top: 0">
-            <h1 class="card-heading simple">${_('Create a new table from a file')}</h1>
+          <div class="card card-small" style="margin-top: 0">
+            <h1 class="card-heading simple">
+              <ul id="breadcrumbs" class="nav nav-pills hueBreadcrumbBar">
+                <li>
+                  <a href="${url('metastore:databases')}">${_('Databases')}</a><span class="divider">&gt;</span>
+                </li>
+                <li>
+                  <a href="${ url('metastore:show_tables', database=database) }">${database}</a><span class="divider">&gt;</span>
+                </li>
+                <li>
+                    <span style="padding-left:12px">${_('Create a new table from a file')}</span>
+                </li>
+              </ul>
+            </h1>
             <div class="card-body">
               <p>
                 <ul class="nav nav-pills">
@@ -150,6 +176,10 @@ ${ layout.metastore_menubar() }
 
 <script type="text/javascript" charset="utf-8">
   $(document).ready(function () {
+    $("#chooseDatabase").on("change", function () {
+      window.location.href = $(this).val();
+    });
+
     $("[rel='tooltip']").tooltip();
 
     $("#useHeader").on("click", function(){
@@ -201,7 +231,7 @@ ${ layout.metastore_menubar() }
         isString += 1;
       }
     });
-    // Most of its columns are strings
+
     if (isString > $(".cols-1").length - 1) {
       $("#useHeader").click();
     }