Save data from visualization plugin
My Google-Fu is failing me... We have a visualization plugin that can also serve as an editor to modify the data it is visualizing. What is the best way to save the data from the visualizer back to Galaxy? I seem to recall reading (somewhere, sometime) that the REST API could not do this and the "best" solution is to invoke the upload tool to upload data into the current history. I have used the upload tool from the Python and Blend4J APIs, but I can not find a JavaScript example for invoking the upload tool. So two questions: 1. Is the upload tool (still) the recommended way to put data into the current history via API calls? 2. How do I invoke the upload tool from JavaScript? Thanks, Keith ---------------------- Keith Suderman Research Associate Department of Computer Science Vassar College, Poughkeepsie NY suderman@cs.vassar.edu
Dear Keith, I don't know the best way but this work for us. It is used in cooperation with ACE editor (written in JS): <script type="text/javascript" charset="utf-8"> var hist_id = null; $(function() { var address = '${prefix}/history/current_history_json'; $.get(address, function(resp) { if (resp && resp.id) hist_id = resp.id; }); $('#save_btn').on('click', function() { var cont = ace.edit('editor').getValue(); # or any other data, you need to save in new file, here, the data are textual var dInputs = { dbkey: '?', file_type: 'auto', 'files_0|type': 'upload_dataset', 'files_0|space_to_tab': null, 'files_0|to_posix_lines': 'Yes' }; var formData = new FormData(); formData.append('tool_id', 'upload1'); formData.append('history_id', hist_id); formData.append('inputs', JSON.stringify(dInputs)); formData.append('files_0|file_data', new Blob([cont], {type: 'text/plain'}), $('#editor').attr('file-name')); $.ajax({ url: '${prefix}/api/tools', data: formData, processData: false, contentType: false, type: 'POST', success: function (resp) { # this part is there to refresh the history panel otherwise it seems not to turn green window.setTimeout(function() { window.parent.$('#history-refresh-button').trigger('click'); }, 3000); } }); }); }); </script> I hope it helps you. Best regards, Martin Demko Keith Suderman <suderman@cs.vassar.edu> wrote on Mon, 23 Apr 2018 15:38:19 -0400:
My Google-Fu is failing me...
We have a visualization plugin that can also serve as an editor to modify the data it is visualizing. What is the best way to save the data from the visualizer back to Galaxy?
I seem to recall reading (somewhere, sometime) that the REST API could not do this and the "best" solution is to invoke the upload tool to upload data into the current history. I have used the upload tool from the Python and Blend4J APIs, but I can not find a JavaScript example for invoking the upload tool.
So two questions:
1. Is the upload tool (still) the recommended way to put data into the current history via API calls? 2. How do I invoke the upload tool from JavaScript?
Thanks, Keith
---------------------- Keith Suderman Research Associate Department of Computer Science Vassar College, Poughkeepsie NY suderman@cs.vassar.edu
Hi Martin Thank you! I think:
formData.append('files_0|file_data', new Blob([cont], {type:'text/plain'}), $('#editor').attr('file-name'));
was the line of code I was looking for. Cheers, Keith
On Apr 23, 2018, at 5:49 PM, Martin Demko <325073@mail.muni.cz> wrote:
Dear Keith,
I don't know the best way but this work for us. It is used in cooperation with ACE editor (written in JS):
<script type="text/javascript" charset="utf-8"> var hist_id = null;
$(function() { var address = '${prefix}/history/current_history_json'; $.get(address, function(resp) { if (resp && resp.id) hist_id = resp.id; }); $('#save_btn').on('click', function() { var cont = ace.edit('editor').getValue(); # or any other data, you need to save in new file, here, the data are textual var dInputs = { dbkey: '?', file_type: 'auto', 'files_0|type': 'upload_dataset', 'files_0|space_to_tab': null, 'files_0|to_posix_lines': 'Yes' };
var formData = new FormData(); formData.append('tool_id', 'upload1'); formData.append('history_id', hist_id); formData.append('inputs', JSON.stringify(dInputs)); formData.append('files_0|file_data', new Blob([cont], {type: 'text/plain'}), $('#editor').attr('file-name'));
$.ajax({ url: '${prefix}/api/tools', data: formData, processData: false, contentType: false, type: 'POST', success: function (resp) { # this part is there to refresh the history panel otherwise it seems not to turn green window.setTimeout(function() { window.parent.$('#history-refresh-button').trigger('click'); }, 3000); } }); }); }); </script>
I hope it helps you.
Best regards, Martin Demko
Keith Suderman <suderman@cs.vassar.edu> wrote on Mon, 23 Apr 2018 15:38:19 -0400:
My Google-Fu is failing me...
We have a visualization plugin that can also serve as an editor to modify the data it is visualizing. What is the best way to save the data from the visualizer back to Galaxy?
I seem to recall reading (somewhere, sometime) that the REST API could not do this and the "best" solution is to invoke the upload tool to upload data into the current history. I have used the upload tool from the Python and Blend4J APIs, but I can not find a JavaScript example for invoking the upload tool.
So two questions:
1. Is the upload tool (still) the recommended way to put data into the current history via API calls? 2. How do I invoke the upload tool from JavaScript?
Thanks, Keith
---------------------- Keith Suderman Research Associate Department of Computer Science Vassar College, Poughkeepsie NY suderman@cs.vassar.edu
---------------------- Keith Suderman Research Associate Department of Computer Science Vassar College, Poughkeepsie NY suderman@cs.vassar.edu
participants (2)
-
Keith Suderman
-
Martin Demko