@@ -416,23 +416,26 @@ class FsspecWidget extends Widget {
416
416
// this.openInputHidden.click();
417
417
// }
418
418
419
- async handleJupyterFileBrowserUpload ( userFile : any , fileBrowser : any ) {
420
- Logger . debug (
421
- `FBrowser choose: B ${ fileBrowser } } / D "${ fileBrowser . model . driveName } " / R "${ fileBrowser . model . rootPath } "`
422
- ) ;
423
- Logger . debug ( ` pth ${ userFile . value . path } ` ) ;
424
- Logger . debug ( ` srvpth ${ userFile . value . serverPath } ` ) ;
425
- Logger . debug ( ` sz ${ userFile . value . size } ` ) ;
426
- Logger . debug ( ` type ${ userFile . value . type } ` ) ;
427
- Logger . debug ( ` mtype ${ userFile . value . mimetype } ` ) ;
428
- Logger . debug ( ` fmt ${ userFile . value . format } ` ) ;
429
- Logger . debug ( ` wrt ${ userFile . value . writable } ` ) ;
419
+ async handleJupyterFileBrowserSetBytesTarget (
420
+ userFile : any ,
421
+ fileBrowser : any
422
+ ) {
423
+ // Logger.debug(
424
+ // `FBrowser choose: B ${fileBrowser}} / D "${fileBrowser.model.driveName}" / R "${fileBrowser.model.rootPath}"`
425
+ // );
426
+ // Logger.debug(` pth ${userFile.value.path}`);
427
+ // Logger.debug(` srvpth ${userFile.value.serverPath}`);
428
+ // Logger.debug(` sz ${userFile.value.size}`);
429
+ // Logger.debug(` type ${userFile.value.type}`);
430
+ // Logger.debug(` mtype ${userFile.value.mimetype}`);
431
+ // Logger.debug(` fmt ${userFile.value.format}`);
432
+ // Logger.debug(` wrt ${userFile.value.writable}`);
430
433
431
434
const fileData = await this . app . serviceManager . contents . get (
432
435
userFile . value . path ,
433
436
{ content : true , format : 'base64' , type : 'base64' }
434
437
) ;
435
- Logger . debug ( `xFILE CONTs:\n${ JSON . stringify ( fileData ) } ` ) ;
438
+ // Logger.debug(`xFILE CONTs:\n${JSON.stringify(fileData)}`);
436
439
this . queuedJupyterFileBrowserUploadInfo = { fileData : fileData } ;
437
440
}
438
441
@@ -447,7 +450,7 @@ class FsspecWidget extends Widget {
447
450
fileData = this . openInputHidden . files [ 0 ] ;
448
451
this . queuedPickerUploadInfo [ 'fileData' ] = fileData ;
449
452
Logger . debug ( `FData ${ fileData } ` ) ;
450
- this . handleContextUploadUserData (
453
+ this . handleBrowserPickerUpload (
451
454
this . queuedPickerUploadInfo . user_path ,
452
455
this . queuedPickerUploadInfo . is_dir ,
453
456
this . queuedPickerUploadInfo . is_browser_file_picker ,
@@ -463,12 +466,128 @@ class FsspecWidget extends Widget {
463
466
}
464
467
}
465
468
466
- async handleContextUploadUserData (
469
+ async handleJupyterFileBrowserUpload ( user_path : string , is_dir : boolean ) {
470
+ Logger . debug ( 'BB a1' ) ;
471
+
472
+ // Get the desired path for this upload from a dialog box
473
+ Logger . debug ( `Upath ${ user_path } ` ) ;
474
+ if ( is_dir ) {
475
+ // TODO make dialog box and grab filename when uploading to folder
476
+ const result : any = await this . promptForFilename ( ) ;
477
+ Logger . debug ( `Resultvalue ${ result ?. value } ` ) ;
478
+ if ( result ?. value ) {
479
+ user_path += '/' + result . value ;
480
+ } else {
481
+ Logger . error ( 'Error, no filename provided!' ) ;
482
+ return ;
483
+ }
484
+ Logger . debug ( `Popup path ${ result ?. value } ` ) ;
485
+ }
486
+ Logger . debug ( `Upath2 ${ user_path } ` ) ;
487
+
488
+ if ( this . queuedJupyterFileBrowserUploadInfo ) {
489
+ // We have file information from the Lab file browser
490
+ Logger . debug ( 'Jup file browser result get!' ) ;
491
+ Logger . debug (
492
+ `Dump jbrowser info ${ JSON . stringify ( this . queuedJupyterFileBrowserUploadInfo ) } `
493
+ ) ;
494
+ const base64String =
495
+ this . queuedJupyterFileBrowserUploadInfo . fileData . content ;
496
+ Logger . debug ( `B64 content str:\n${ base64String } ` ) ;
497
+
498
+ // TODO error handling and data checks
499
+ await this . model . post (
500
+ this . model . activeFilesystem ,
501
+ user_path ,
502
+ base64String ,
503
+ true
504
+ ) ;
505
+ Logger . debug ( 'Finish upload' ) ;
506
+
507
+ this . fetchAndDisplayFileInfo ( this . model . activeFilesystem ) ;
508
+
509
+ return ;
510
+ } else {
511
+ Logger . error ( 'Error, no Jupyter file browser data available!' ) ;
512
+ return ;
513
+ }
514
+ }
515
+
516
+ async handleBrowserPickerUpload (
467
517
user_path : string ,
468
518
is_dir : boolean ,
469
519
is_browser_file_picker : boolean ,
470
520
is_jup_browser_file : boolean
471
521
) {
522
+ Logger . debug ( 'BB a2' ) ;
523
+
524
+ // Get the desired path for this upload from a dialog box
525
+ Logger . debug ( `Upath ${ user_path } ` ) ;
526
+ if ( is_dir ) {
527
+ // TODO make dialog box and grab filename when uploading to folder
528
+ const result : any = await this . promptForFilename ( ) ;
529
+ Logger . debug ( `Resultvalue ${ result ?. value } ` ) ;
530
+ if ( result ?. value ) {
531
+ user_path += '/' + result . value ;
532
+ } else {
533
+ Logger . error ( 'Error, no filename provided!' ) ;
534
+ return ;
535
+ }
536
+ Logger . debug ( `Popup path ${ result ?. value } ` ) ;
537
+ }
538
+ Logger . debug ( `Upath2 ${ user_path } ` ) ;
539
+
540
+ // Get the path of the file to upload
541
+ if ( ! this . queuedPickerUploadInfo ) {
542
+ // First we have to obtain info from the browser file picker (async user selection)
543
+ this . queuedPickerUploadInfo = {
544
+ user_path : user_path ,
545
+ is_dir : is_dir ,
546
+ is_browser_file_picker : is_browser_file_picker ,
547
+ fileData : null
548
+ } ;
549
+ this . openInputHidden . click ( ) ;
550
+ Logger . debug ( 'WAIT FOR FILE PICKER' ) ;
551
+ return ;
552
+ } else if ( this . queuedPickerUploadInfo ) {
553
+ // We have obtained file info from the user's selection (our call above)
554
+ Logger . debug ( 'File Result get!' ) ;
555
+ Logger . debug (
556
+ `Dump picker info ${ JSON . stringify ( this . queuedPickerUploadInfo ) } `
557
+ ) ;
558
+ // Logger.debug(`File ${this.queuedPickerUploadInfo.fileData.name}`);
559
+ // Logger.debug(
560
+ // `File ${this.queuedPickerUploadInfo.fileData.webkitRelativePath}`
561
+ // );
562
+
563
+ const binRaw = await this . queuedPickerUploadInfo . fileData . arrayBuffer ( ) ;
564
+ const binData : any = new Uint8Array ( binRaw ) ;
565
+ const base64String = Buffer . from ( binData ) . toString ( 'base64' ) ;
566
+
567
+ await this . model . post (
568
+ this . model . activeFilesystem ,
569
+ user_path ,
570
+ base64String ,
571
+ true
572
+ ) ;
573
+ Logger . debug ( 'Finish upload' ) ;
574
+
575
+ this . fetchAndDisplayFileInfo ( this . model . activeFilesystem ) ;
576
+
577
+ return ;
578
+ } else {
579
+ Logger . error ( 'Error, no browser file data available!' ) ;
580
+ return ;
581
+ }
582
+ }
583
+
584
+ async handleKernelHelperUpload (
585
+ user_path : string ,
586
+ is_dir : boolean ,
587
+ is_browser_file_picker : boolean ,
588
+ is_jup_browser_file : boolean
589
+ ) {
590
+ Logger . debug ( 'BB a3' ) ;
472
591
const target = this . notebookTracker . currentWidget ;
473
592
474
593
if ( ! is_browser_file_picker && ! is_jup_browser_file ) {
@@ -503,79 +622,10 @@ class FsspecWidget extends Widget {
503
622
504
623
// Get the path of the file to upload
505
624
let tempfilePath : any = '' ;
506
- if ( is_browser_file_picker || is_jup_browser_file ) {
507
- if ( is_browser_file_picker && ! this . queuedPickerUploadInfo ) {
508
- // First we have to obtain info from the browser file picker (async user selection)
509
- this . queuedPickerUploadInfo = {
510
- user_path : user_path ,
511
- is_dir : is_dir ,
512
- is_browser_file_picker : is_browser_file_picker ,
513
- fileData : null
514
- } ;
515
- this . openInputHidden . click ( ) ;
516
- Logger . debug ( 'WAIT FOR FILE PICKER' ) ;
517
- return ;
518
- } else if ( is_browser_file_picker && this . queuedPickerUploadInfo ) {
519
- // We have obtained file info from the user's selection (our call above)
520
- Logger . debug ( 'File Result get!' ) ;
521
- Logger . debug (
522
- `Dump picker info ${ JSON . stringify ( this . queuedPickerUploadInfo ) } `
523
- ) ;
524
- // Logger.debug(`File ${this.queuedPickerUploadInfo.fileData.name}`);
525
- // Logger.debug(
526
- // `File ${this.queuedPickerUploadInfo.fileData.webkitRelativePath}`
527
- // );
528
-
529
- const binRaw = await this . queuedPickerUploadInfo . fileData . arrayBuffer ( ) ;
530
- const binData : any = new Uint8Array ( binRaw ) ;
531
- const base64String = Buffer . from ( binData ) . toString ( 'base64' ) ;
532
-
533
- await this . model . post (
534
- this . model . activeFilesystem ,
535
- user_path ,
536
- base64String ,
537
- true
538
- ) ;
539
- Logger . debug ( 'Finish upload' ) ;
540
-
541
- this . fetchAndDisplayFileInfo ( this . model . activeFilesystem ) ;
542
-
543
- return ;
544
- } else if (
545
- is_jup_browser_file &&
546
- this . queuedJupyterFileBrowserUploadInfo
547
- ) {
548
- // We have file information from the Lab file browser
549
- Logger . debug ( 'Jup file browser result get!' ) ;
550
- Logger . debug (
551
- `Dump jbrowser info ${ JSON . stringify ( this . queuedJupyterFileBrowserUploadInfo ) } `
552
- ) ;
553
- const base64String =
554
- this . queuedJupyterFileBrowserUploadInfo . fileData . content ;
555
- Logger . debug ( `B64 content str:\n${ base64String } ` ) ;
556
-
557
- // TODO error handling and data checks
558
- await this . model . post (
559
- this . model . activeFilesystem ,
560
- user_path ,
561
- base64String ,
562
- true
563
- ) ;
564
- Logger . debug ( 'Finish upload' ) ;
565
-
566
- this . fetchAndDisplayFileInfo ( this . model . activeFilesystem ) ;
567
-
568
- return ;
569
- } else {
570
- return ;
571
- }
572
- } else {
573
- // We are obtaining bytes from the user's kernel, get a
574
- // serialized tempfile path from the server
575
- tempfilePath = await this . getKernelUserBytesTempfilePath ( ) ;
576
- Logger . debug ( `Debugx2: ${ tempfilePath } ` ) ;
577
- }
578
-
625
+ // We are obtaining bytes from the user's kernel, get a
626
+ // serialized tempfile path from the server
627
+ tempfilePath = await this . getKernelUserBytesTempfilePath ( ) ;
628
+ Logger . debug ( `Debugx2: ${ tempfilePath } ` ) ;
579
629
if ( ! tempfilePath ) {
580
630
Logger . error ( 'Error fetching serialized user_data!' ) ;
581
631
return ;
@@ -826,7 +876,9 @@ class FsspecWidget extends Widget {
826
876
this . model ,
827
877
[ this . lazyLoad . bind ( this ) ] ,
828
878
[ this . handleContextGetBytes . bind ( this ) ] ,
829
- [ this . handleContextUploadUserData . bind ( this ) ] ,
879
+ [ this . handleKernelHelperUpload . bind ( this ) ] ,
880
+ [ this . handleBrowserPickerUpload . bind ( this ) ] ,
881
+ [ this . handleJupyterFileBrowserUpload . bind ( this ) ] ,
830
882
true ,
831
883
true ,
832
884
this . notebookTracker
@@ -1017,7 +1069,7 @@ const plugin: JupyterFrontEndPlugin<void> = {
1017
1069
const file = fileModel . value ;
1018
1070
1019
1071
if ( file ) {
1020
- await fsspec_widget . handleJupyterFileBrowserUpload (
1072
+ await fsspec_widget . handleJupyterFileBrowserSetBytesTarget (
1021
1073
fileModel ,
1022
1074
fileBrowserFactory . tracker ?. currentWidget
1023
1075
) ;
0 commit comments