소스 검색

HUE-7 [importer] Apply selectize to input file format delimiters

Romain Rigaux 9 년 전
부모
커밋
fb6b24d

+ 10 - 1
desktop/libs/indexer/src/indexer/argument.py

@@ -17,7 +17,7 @@
 from django.utils.translation import ugettext as _
 
 
-class Argument():
+class Argument(object):
   _type = None
   _default_value = None
 
@@ -49,6 +49,15 @@ class TextArgument(Argument):
   _default_value = ""
 
 
+class TextDelimiterArgument(Argument):
+  _type = "text-delimiter"
+  _default_value = ""
+
+  def __init__(self, name, description=None, max_length=2):
+    super(TextDelimiterArgument, self).__init__(name, description=description)
+    self.max_length = max_length
+
+
 class CheckboxArgument(Argument):
   _type = "checkbox"
   _default_value = False

+ 4 - 4
desktop/libs/indexer/src/indexer/file_format.py

@@ -21,7 +21,7 @@ import logging
 from django.utils.translation import ugettext as _
 
 from indexer.fields import Field, guess_field_type_from_samples
-from indexer.argument import TextArgument, CheckboxArgument
+from indexer.argument import TextArgument, CheckboxArgument, TextDelimiterArgument
 from indexer.operations import get_operator
 
 LOG = logging.getLogger(__name__)
@@ -272,9 +272,9 @@ class CSVFormat(FileFormat):
   _name = "csv"
   _description = _("CSV File")
   _args = [
-    TextArgument("fieldSeparator", "Field Separator"),
-    TextArgument("recordSeparator", "Record Separator"),
-    TextArgument("quoteChar", "Quote Character"),
+    TextDelimiterArgument("fieldSeparator", "Field Separator"),
+    TextDelimiterArgument("recordSeparator", "Record Separator"),
+    TextDelimiterArgument("quoteChar", "Quote Character"),
     CheckboxArgument("hasHeader", "Has Header")
   ]
   _extensions = ["csv", "tsv"]

+ 3 - 0
desktop/libs/indexer/src/indexer/operations.py

@@ -13,9 +13,12 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.import logging
+
 from django.utils.translation import ugettext as _
+
 from indexer.argument import TextArgument, CheckboxArgument, MappingArgument
 
+
 class Operator():
   def __init__(self, name, args, output_type):
     self._name = name

+ 15 - 6
desktop/libs/indexer/src/indexer/templates/importer.mako

@@ -650,6 +650,13 @@ ${ assist.assistPanel() }
   </label>
 </script>
 
+<script type="text/html" id="arg-text-delimiter">
+  <label>
+    <span data-bind="text: description"></span>
+    <select id="fieldDelimiter" data-bind="selectize: $root.createWizard.customDelimiters, selectizeOptions: { create: true, maxLength: 2 }, value: value, optionsValue: 'value', optionsText: 'name', attr: {placeholder: description}"></select>
+  </label>
+</script>
+
 <script type="text/html" id="arg-checkbox">
   <label>
     <input type="checkbox" data-bind="checked: value">
@@ -1120,12 +1127,14 @@ ${ assist.assistPanel() }
       self.destination = new Destination(vm, self);
 
       self.customDelimiters = ko.observable([
-        {'value': '\\001', 'name': '^A (\\001)', 'ascii': 1},
-        {'value': '\\002', 'name': '^B (\\002)', 'ascii': 2},
-        {'value': '\\003', 'name': '^C (\\003)', 'ascii': 3},
-        {'value': '\\t', 'name': '^Tab (\\t)', 'ascii': 9},
-        {'value': ',', 'name': 'Comma (,)', 'ascii': 44},
-        {'value': ' ', 'name': 'Space', 'ascii': 32}
+        {'value': ',', 'name': 'Comma (,)'},
+        {'value': '\\t', 'name': '^Tab (\\t)'},
+        {'value': '\\n', 'name': 'New line'},
+        {'value': ' ', 'name': 'Space'},
+        {'value': '"', 'name': 'Double Quote'},
+        {'value': '\\001', 'name': '^A (\\001)'},
+        {'value': '\\002', 'name': '^B (\\002)'},
+        {'value': '\\003', 'name': '^C (\\003)'},
       ]);
 
       self.editorId = ko.observable();