Skip to content

Commit 20ba6f3

Browse files
author
minjk-bl
committed
Edit File to use multi-extensions
1 parent 36c75a8 commit 20ba6f3

File tree

2 files changed

+66
-43
lines changed

2 files changed

+66
-43
lines changed

visualpython/js/com/component/PackageManager.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ define([
4747
this.packageLibTemplate = {
4848
'numpy': { pipName: 'numpy' },
4949
'pandas': { pipName: 'pandas' },
50+
'pyarrow': { pipName: 'pyarrow' },
5051
'matplotlib': { pipName: 'matplotlib' },
5152
'seaborn': { pipName: 'seaborn' },
5253
'plotly': { pipName: 'plotly' },

visualpython/js/m_apps/File.js

Lines changed: 65 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,17 @@ define([
3535
super._init();
3636
/** Write codes executed before rendering */
3737
this.config.dataview = false;
38-
this.config.sizeLevel = 1;
38+
this.config.sizeLevel = 2;
3939
this.config.checkModules = ['pd'];
4040

4141
this.fileExtensions = {
42-
'csv': 'csv',
43-
'excel': 'xlsx',
44-
'json': 'json',
45-
'pickle': '',
46-
'sas': '', // xport or sas7bdat
47-
'spss': '',
48-
'parquet':'parquet'
42+
'csv': ['csv', 'tsv'],
43+
'excel': ['xlsx', 'xls'],
44+
'json': ['json'],
45+
'pickle': [],
46+
'sas': [], // xport or sas7bdat
47+
'spss': [],
48+
'parquet': ['parquet']
4949
}
5050

5151
this.package = {
@@ -69,7 +69,8 @@ define([
6969
}
7070

7171
this.state = {
72-
fileExtension: 'csv',
72+
fileType: 'csv',
73+
fileExtension: ['csv'],
7374
selectedFile: '',
7475
selectedPath: '',
7576
vp_fileioType: 'Read',
@@ -188,6 +189,11 @@ define([
188189
}
189190
}
190191

192+
_unbindEvent() {
193+
super._unbindEvent();
194+
$(document).off('change', this.wrapSelector('#fileReadAs'));
195+
}
196+
191197
_bindEvent() {
192198
super._bindEvent();
193199
/** Implement binding events */
@@ -198,6 +204,19 @@ define([
198204
$(that.wrapSelector('.vp-fileio-box')).hide();
199205
$(that.wrapSelector('#vp_file' + pageType)).show();
200206

207+
if (pageType === 'Read' && that.fileState[pageType].selectedType === 'spss') {
208+
// show install button
209+
that.showInstallButton();
210+
// show install note below File type selection
211+
$(`<tr class="vp-spss-note"><td colspan="2">
212+
<label class="vp-orange-text vp-italic">NOTE: </label>
213+
<label class="vp-gray-text vp-italic">pyreadstat package is required to read spss file.</label>
214+
</td></tr>`).insertAfter($(that.wrapSelector('#fileType')).closest('tr'));
215+
} else {
216+
that.hideInstallButton();
217+
$(that.wrapSelector('.vp-spss-note')).remove();
218+
}
219+
201220

202221
//set fileExtensions
203222
that.fileResultState = {
@@ -210,26 +229,24 @@ define([
210229
let isChecked = $(this).prop('checked');
211230
var fileioType = that.state.vp_fileioType;
212231
var prefix = '#vp_file' + fileioType + ' ';
213-
var selectedFileFormat = that.fileState[fileioType].selectedType;
232+
var selectedType = that.fileState[fileioType]['selectedType'];
214233
var fileioTypePrefix = fileioType.toLowerCase();
215234
if(fileioTypePrefix == 'write'){
216235
fileioTypePrefix = "to";
217236
}
237+
let fileId = that.fileState[fileioType].fileTypeId[selectedType];
218238

219-
if(isChecked){ // pyArrow
220-
that.fileState[fileioType].fileTypeId[that.state.fileExtension] = "pa_" + fileioTypePrefix + selectedFileFormat[0].toUpperCase() + selectedFileFormat.slice(1);
239+
if (isChecked) { // pyArrow
240+
fileId = "pa_" + fileioTypePrefix + selectedType[0].toUpperCase() + selectedType.slice(1);
241+
// that.fileState[fileioType].fileTypeId[that.state.fileExtension] = "pa_" + fileioTypePrefix + selectedFileFormat[0].toUpperCase() + selectedFileFormat.slice(1);
221242
$(that.wrapSelector(prefix + '#vp_optionBox')).closest('.vp-accordian-container').hide();
222-
}
223-
else{ // pandas
224-
that.fileState[fileioType].fileTypeId[that.state.fileExtension] = "pd_" + fileioTypePrefix + selectedFileFormat[0].toUpperCase() + selectedFileFormat.slice(1);
225-
if (that.state.fileExtension != 'parquet'){ // parquet has no options area
243+
} else { // pandas
244+
// that.fileState[fileioType].fileTypeId[that.state.fileExtension] = "pd_" + fileioTypePrefix + selectedFileFormat[0].toUpperCase() + selectedFileFormat.slice(1);
245+
if (that.state.fileType != 'parquet'){ // parquet has no options area
226246
$(that.wrapSelector(prefix + '#vp_optionBox')).closest('.vp-accordian-container').show();
227247
}
228248
}
229249

230-
var fileTypeObj = that.fileState[fileioType]['fileTypeId'];
231-
var selectedType = that.fileState[fileioType]['selectedType'];
232-
let fileId = fileTypeObj[selectedType];
233250
let pdLib = pandasLibrary.PANDAS_FUNCTION;
234251
let thisPkg = JSON.parse(JSON.stringify(pdLib[fileId]));
235252

@@ -246,31 +263,14 @@ define([
246263
if(fileioTypePrefix == 'write'){
247264
fileioTypePrefix = "to";
248265
}
249-
var selectedFileFormat = that.fileState[pageType].selectedType;
250266
// select file type
251267
$(this.wrapSelector(prefix + '#fileType')).change(function() {
252-
var value = $(this).val();
253-
that.fileState[pageType].selectedType = value;
254-
255-
// Whenever change the file type, change to default pandas
256-
that.fileState[pageType].fileTypeId[that.state.fileExtension] = "pd_" + fileioTypePrefix + selectedFileFormat[0].toUpperCase() + selectedFileFormat.slice(1);
257-
268+
var fileType = $(this).val();
269+
that.fileState[pageType].selectedType = fileType;
258270

259271
// reload
260272
that.renderPage(pageType);
261273
that._bindEventByType(pageType);
262-
263-
if (value === 'spss') {
264-
// show install button
265-
that.showInstallButton();
266-
// show install note below File type selection
267-
$(`<tr><td colspan="2">
268-
<label class="vp-orange-text vp-italic">NOTE: </label>
269-
<label class="vp-gray-text vp-italic">pyreadstat package is required to read spss file.</label>
270-
</td></tr>`).insertAfter($(that.wrapSelector('#fileType')).closest('tr'));
271-
} else {
272-
that.hideInstallButton();
273-
}
274274
});
275275

276276
// open file navigation
@@ -282,8 +282,8 @@ define([
282282
}
283283

284284
let extensionList = [];
285-
if (that.state.fileExtension !== '') {
286-
extensionList = [ that.state.fileExtension ];
285+
if (that.state.fileExtension && that.state.fileExtension.length > 0) {
286+
extensionList = that.state.fileExtension;
287287
}
288288

289289
let fileNavi = new FileNavigation({
@@ -417,8 +417,7 @@ define([
417417
$('<tr>').append($(`<td><label for="fileType" class="vp-bold vp-orange-text">File Type</label></td>`))
418418
.append($('<td><select id="fileType" class="vp-select"></select> <label><input id="fileReadAs" type="checkbox"/><span>Use PyArrow</span></label></td>'))
419419
);
420-
}
421-
else{
420+
} else {
422421
$(this.wrapSelector(prefix + '#vp_inputOutputBox table tbody')).prepend(
423422
$('<tr>').append($(`<td><label for="fileType" class="vp-bold vp-orange-text">File Type</label></td>`))
424423
.append($('<td><select id="fileType" class="vp-select"></select> </td>'))
@@ -433,7 +432,6 @@ define([
433432
);
434433
});
435434

436-
437435
// prepend user option
438436
let hasAllocateTo = $(this.wrapSelector(prefix + '#o0')).length > 0;
439437
if (hasAllocateTo) {
@@ -476,6 +474,18 @@ define([
476474
, 'vp-file-browser-button')
477475
);
478476
}
477+
478+
if (pageType === 'Read' && selectedType === 'spss') {
479+
// show install button
480+
this.showInstallButton();
481+
// show install note below File type selection
482+
$(`<tr class="vp-spss-note"><td colspan="2">
483+
<label class="vp-orange-text vp-italic">NOTE: </label>
484+
<label class="vp-gray-text vp-italic">pyreadstat package is required to read spss file.</label>
485+
</td></tr>`).insertAfter($(this.wrapSelector('#fileType')).closest('tr'));
486+
} else {
487+
this.hideInstallButton();
488+
}
479489

480490
// encoding suggest input
481491
$(this.wrapSelector('#encoding')).replaceWith(function() {
@@ -488,6 +498,18 @@ define([
488498
suggestInput.setPlaceholder('encoding option');
489499
return suggestInput.toTagString();
490500
});
501+
502+
// seperator suggest input
503+
$(this.wrapSelector('#sep')).replaceWith(function() {
504+
// seperator list :
505+
var sepList = [',', '|', '\\t', '\\n', ':', ';', '-', '_', '&', '/', '\\'];
506+
var suggestInput = new SuggestInput();
507+
suggestInput.setComponentID('sep');
508+
suggestInput.addClass('vp-input vp-state');
509+
suggestInput.setSuggestList(function() { return sepList; });
510+
suggestInput.setPlaceholder('Input seperator');
511+
return suggestInput.toTagString();
512+
});
491513
}
492514

493515
render() {

0 commit comments

Comments
 (0)