فهرست منبع

HUE-2838 [metastore] Add the state of the partition filtering form in a POST

Romain Rigaux 10 سال پیش
والد
کامیت
ba0329a
2فایلهای تغییر یافته به همراه24 افزوده شده و 10 حذف شده
  1. 15 5
      apps/metastore/src/metastore/templates/describe_partitions.mako
  2. 9 5
      apps/metastore/src/metastore/views.py

+ 15 - 5
apps/metastore/src/metastore/templates/describe_partitions.mako

@@ -37,7 +37,7 @@ ${ components.menubar() }
     <div class="span9">
       <div class="card card-small">
         <h1 class="card-heading simple">${ components.breadcrumbs(breadcrumbs) }</h1>
-          <div id="partition-filter" class="card-body">
+          <form id="partition-filter" class="card-body" data-bind="submit: filter">
             ${ _('Filter by ') }
             <div data-bind="foreach: filters">
               <select data-bind="options: $root.columns"></select>
@@ -50,7 +50,12 @@ ${ components.menubar() }
             <a href="javascript: void(0)" data-bind="click: addFilter">
               <i class="fa fa-plus"></i> ${ _('Add ') }
             </a>
-          <div>
+            
+            ${ _('Sort') } <input type="checkbox" data-bind="checked: sortDesc"></input>
+            
+            <button type="submit">Filter</button>            
+          <form>
+
           <div class="card-body">
             <p>
           % if partitions:
@@ -86,10 +91,11 @@ ${ components.menubar() }
 <script src="${ static('desktop/ext/js/knockout-mapping.min.js') }" type="text/javascript" charset="utf-8"></script>
 
 <script type="text/javascript" charset="utf-8">
-  var PartitionFilterViewModel = function (partitions_json) {
+  var PartitionFilterViewModel = function (partitions_json, form_data_json) {
     var self = this;
 
-    self.filters = ko.observableArray([]);
+    self.sortDesc = ko.mapping.fromJS(typeof form_data_json != "undefined" && form_data_json != null ? form_data_json.sortDesc : true)
+    self.filters = ko.mapping.fromJS(typeof form_data_json != "undefined" && form_data_json != null ? form_data_json.filters : [])
 
     self.columns = ko.mapping.fromJS(partitions_json);
 
@@ -100,9 +106,13 @@ ${ components.menubar() }
     self.removeFilter = function(data) {
       self.filters.remove(data);
     }
+    
+    self.filter = function(data) {
+      // jsonnify sortDesc, filter into some hidden form attribute
+    }
   };
 
-  var viewModel = new PartitionFilterViewModel(${ partition_names_json | n,unicode });
+  var viewModel = new PartitionFilterViewModel(${ partition_names_json | n,unicode }, ${ form_data_json | n,unicode });
   ko.applyBindings(viewModel, $("#partition-filter")[0]);
 
   $(document).ready(function () {

+ 9 - 5
apps/metastore/src/metastore/views.py

@@ -263,11 +263,14 @@ def describe_partitions(request, database, table):
 
   reverse_sort = request.REQUEST.get("sort", "desc").lower() == "desc"
 
-  partition_filters = {}
-  for part in table_obj.partition_keys:
-    if request.REQUEST.get(part.name):
-      partition_filters[part.name] = request.REQUEST.get(part.name)
-  partition_spec = ','.join(["%s='%s'" % (k, v) for k, v in partition_filters.items()])
+  if request.method == "POST":
+    partition_filters = {}
+    for part in table_obj.partition_keys:
+      if request.REQUEST.get(part.name):
+        partition_filters[part.name] = request.REQUEST.get(part.name)
+    partition_spec = ','.join(["%s='%s'" % (k, v) for k, v in partition_filters.items()])
+  else:
+    partition_spec = ''
 
   partitions = db.get_partitions(database, table_obj, partition_spec, max_parts=None, reverse_sort=reverse_sort)
 
@@ -287,6 +290,7 @@ def describe_partitions(request, database, table):
       'table': table_obj,
       'partitions': partitions,
       'partition_names_json': json.dumps([partition.name for partition in table_obj.partition_keys]),
+      'form_data_json': json.dumps({'sortDesc': True, 'filters': []}),
       'request': request
   })