diff --git a/.ci/first_startup.sh b/.ci/first_startup.sh new file mode 100644 index 00000000000..8b7453bef12 --- /dev/null +++ b/.ci/first_startup.sh @@ -0,0 +1,6 @@ +echo "Testing for correct startup:" +bash run.sh --daemon && sleep 30s && curl -I localhost:8080 +EXIT_CODE=$? +echo "exit code:$EXIT_CODE, showing startup log:" +cat paster.log +exit $EXIT_CODE diff --git a/.travis.yml b/.travis.yml index 55d53a89f4c..156a6bfe265 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: python python: 2.7 +os: + - linux env: - TOX_ENV=py34-lint - TOX_ENV=py27-lint @@ -7,10 +9,25 @@ env: - TOX_ENV=py27-unit - TOX_ENV=py26-unit - TOX_ENV=qunit + - TOX_ENV=first_startup +matrix: + include: + - os: osx + env: TOX_ENV=first_startup + language: generic + - os: osx + env: TOX_ENV=py27-unit + language: generic + +before_install: + - if [ `uname` == "Darwin" ]; then bash -c "brew update && brew install python"; fi install: - pip install tox - if [ "$TOX_ENV" == "qunit" ]; then bash -c 'cd test/qunit && npm install'; fi + - if [ "$TOX_ENV" == "first_startup" ]; then bash -c "bash scripts/common_startup.sh && wget -q https://github.com/jmchilton/galaxy-downloads/raw/master/db_gx_rev_0127.sqlite && mv db_gx_rev_0127.sqlite database/universe.sqlite && bash manage_db.sh -c ./config/galaxy.ini.sample upgrade"; fi script: tox -e $TOX_ENV +notifications: + email: false diff --git a/client/galaxy/scripts/apps/analysis.js b/client/galaxy/scripts/apps/analysis.js index 1e274d602d7..28a2beda0e3 100644 --- a/client/galaxy/scripts/apps/analysis.js +++ b/client/galaxy/scripts/apps/analysis.js @@ -7,7 +7,8 @@ var jQuery = require( 'jquery' ), ToolPanel = require( './tool-panel' ), HistoryPanel = require( './history-panel' ), PAGE = require( 'layout/page' ), - ToolForm = require( 'mvc/tool/tool-form' ); + ToolForm = require( 'mvc/tool/tool-form' ), + Tours = require( 'mvc/tours' ); /** define the 'Analyze Data'/analysis/main/home page for Galaxy * * has a masthead @@ -99,6 +100,16 @@ window.app = function app( options, bootstrapped ){ '(/)' : 'home', // TODO: remove annoying 'root' from root urls '(/)root*' : 'home', + '(/)tours(/:tour_id)' : 'show_tours', + }, + + show_tours : function( tour_id ){ + if (tour_id){ + Tours.giveTour(tour_id); + } + else{ + centerPanel.display( new Tours.ToursView() ); + } }, /** */ diff --git a/client/galaxy/scripts/layout/menu.js b/client/galaxy/scripts/layout/menu.js index cdd0cb0e4e8..cdd2662cb84 100644 --- a/client/galaxy/scripts/layout/menu.js +++ b/client/galaxy/scripts/layout/menu.js @@ -144,8 +144,13 @@ var Collection = Backbone.Collection.extend({ target : '_blank' },{ title : 'Interactive Tours', - onclick : function(c){ - Galaxy.app.display(new Tours.ToursView()); + onclick : function(){ + if (Galaxy.app){ + Galaxy.app.display(new Tours.ToursView()); + } else { + // Redirect and use clientside routing to go to tour index + window.location = Galaxy.root + "#/tours"; + } }, target : 'galaxy_main' }] diff --git a/client/galaxy/scripts/layout/page.js b/client/galaxy/scripts/layout/page.js index 1807b4a1e14..b48e9593726 100644 --- a/client/galaxy/scripts/layout/page.js +++ b/client/galaxy/scripts/layout/page.js @@ -94,7 +94,7 @@ var PageLayoutView = Backbone.View.extend( BaseMVC.LoggableMixin ).extend({ page[ panelId ].setElement( '#' + panelId ); page[ panelId ].render(); } else if ( panelId !== 'center' ) { - page.center.$el( panelId, 0 ); + page.center.$el.css( panelId, 0 ); } }); return this; diff --git a/client/galaxy/scripts/mvc/form/form-input.js b/client/galaxy/scripts/mvc/form/form-input.js index 5f8659f1083..1316c6cdcf3 100644 --- a/client/galaxy/scripts/mvc/form/form-input.js +++ b/client/galaxy/scripts/mvc/form/form-input.js @@ -109,9 +109,9 @@ define([], function() { tmp += '
'; if (options.help) { tmp += options.help; - if (options.argument && options.help.indexOf('(' + options.argument + ')') == -1) { - tmp += ' (' + options.argument + ')'; - } + } + if (options.argument && options.help.indexOf('(' + options.argument + ')') == -1) { + tmp += ' (' + options.argument + ')'; } tmp += '
' + '
' + diff --git a/client/galaxy/scripts/mvc/form/form-section.js b/client/galaxy/scripts/mvc/form/form-section.js index 5e491696e4a..f3a37dad204 100644 --- a/client/galaxy/scripts/mvc/form/form-section.js +++ b/client/galaxy/scripts/mvc/form/form-section.js @@ -147,16 +147,9 @@ define(['utils/utils', // // add parsed/minimum number of repeat blocks // - var n_min = input_def.min; - var n_cache = _.size(input_def.cache); - for (var i = 0; i < Math.max(n_cache, n_min); i++) { - var inputs = null; - if (i < n_cache) { - inputs = input_def.cache[i]; - } else { - inputs = input_def.inputs; - } - create(inputs); + var n_cache = _.size( input_def.cache ); + for ( var i = 0; i < Math.max( Math.max( n_cache, input_def.min ), input_def.default ); i++ ) { + create( i < n_cache ? input_def.cache[ i ] : input_def.inputs ); } // hide options diff --git a/client/galaxy/scripts/mvc/form/form-select-content.js b/client/galaxy/scripts/mvc/form/form-select-content.js index f128de2d7eb..6f95889f6b1 100644 --- a/client/galaxy/scripts/mvc/form/form-select-content.js +++ b/client/galaxy/scripts/mvc/form/form-select-content.js @@ -195,6 +195,7 @@ var View = Backbone.View.extend({ for (var i in options) { var item = options[i]; select_options.push({ + hid : item.hid, label: item.hid + ': ' + item.name, value: item.id }); @@ -202,7 +203,7 @@ var View = Backbone.View.extend({ self.history[item.id + '_' + item.src] = item; } // update field - field.update(select_options); + field.add( select_options, function( a, b ) { return b.hid - a.hid } ); } } diff --git a/client/galaxy/scripts/mvc/library/library-folderlist-view.js b/client/galaxy/scripts/mvc/library/library-folderlist-view.js index 2f63c0d9d53..73862cd6042 100644 --- a/client/galaxy/scripts/mvc/library/library-folderlist-view.js +++ b/client/galaxy/scripts/mvc/library/library-folderlist-view.js @@ -178,11 +178,6 @@ var FolderListView = Backbone.View.extend({ var fetched_metadata = this.folderContainer.attributes.metadata; fetched_metadata.contains_file_or_folder = typeof this.collection.findWhere({type: 'file'}) !== 'undefined' || typeof this.collection.findWhere({type: 'folder'}) !== 'undefined'; Galaxy.libraries.folderToolbarView.configureElements(fetched_metadata); - $('.library-row').hover(function() { - $(this).find('.show_on_hover').show(); - }, function () { - $(this).find('.show_on_hover').hide(); - }); }, /** @@ -207,18 +202,12 @@ var FolderListView = Backbone.View.extend({ // model.set('readable_size', this.size_to_string(model.get('file_size'))); //} model.set('folder_id', this.id); - var rowView = new mod_library_folderrow_view.FolderRowView(model); + var rowView = new mod_library_folderrow_view.FolderRowView({model: model}); // save new rowView to cache this.rowViews[model.get('id')] = rowView; this.$el.find('#first_folder_item').after(rowView.el); - - $('.library-row').hover(function() { - $(this).find('.show_on_hover').show(); - }, function () { - $(this).find('.show_on_hover').hide(); - }); }, /** @@ -226,7 +215,9 @@ var FolderListView = Backbone.View.extend({ * @param {Item or FolderAsModel} model of the view that will be removed */ removeOne: function( model ){ - this.$el.find( '#' + model.id ).remove(); + this.$el.find('tr').filter(function(){ + return $(this).data('id') && $(this).data('id') === model.id; + }).remove(); }, /** @@ -310,8 +301,8 @@ var FolderListView = Backbone.View.extend({ $row = $(event.target.parentElement.parentElement); source = 'input'; } else if (event.target.localName === 'td') { - checkbox = $("#" + event.target.parentElement.id).find(':checkbox')[0]; $row = $(event.target.parentElement); + checkbox = $row.find(':checkbox')[0]; source = 'td'; } if (checkbox.checked){ @@ -374,6 +365,7 @@ var FolderListView = Backbone.View.extend({ tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' name '); + tmpl_array.push(' description'); tmpl_array.push(' data type'); tmpl_array.push(' size'); tmpl_array.push(' time updated (UTC)'); @@ -388,6 +380,7 @@ var FolderListView = Backbone.View.extend({ tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); + tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); diff --git a/client/galaxy/scripts/mvc/library/library-folderrow-view.js b/client/galaxy/scripts/mvc/library/library-folderrow-view.js index 39266ae35f1..c67c1eeb1c3 100644 --- a/client/galaxy/scripts/mvc/library/library-folderrow-view.js +++ b/client/galaxy/scripts/mvc/library/library-folderrow-view.js @@ -1,43 +1,51 @@ define([ - "layout/masthead", - "utils/utils", "libs/toastr", "mvc/library/library-model", "mvc/library/library-dataset-view"], -function(mod_masthead, - mod_utils, - mod_toastr, +function(mod_toastr, mod_library_model, mod_library_dataset_view) { var FolderRowView = Backbone.View.extend({ - lastSelectedHistory: '', - events: { 'click .undelete_dataset_btn' : 'undeleteDataset', - 'click .undelete_folder_btn' : 'undeleteFolder' + 'click .undelete_folder_btn' : 'undeleteFolder', + 'click .edit_folder_btn' : 'startModifications', + 'click .cancel_folder_btn' : 'cancelModifications', + 'click .save_folder_btn' : 'saveModifications', }, - options: { - type: null + defaults: { + type: null, + visibility_config: { + edit_folder_btn: true, + save_folder_btn: false, + cancel_folder_btn: false, + permission_folder_btn: true + }, + edit_mode: false }, - initialize : function(folder_item){ - this.model = folder_item; - this.render(folder_item); + initialize : function(options){ + this.options = _.defaults( options || {}, this.defaults ); + this.render(this.options); }, - render: function(folder_item){ + render: function(options){ + this.options = _.extend( this.options, options ); + var folder_item = this.options.model; var template = null; + if (folder_item.get('type') === 'folder' || folder_item.get('model_class') === 'LibraryFolder'){ this.options.type = 'folder'; + this.prepareButtons(folder_item); if (folder_item.get('deleted')){ template = this.templateRowDeletedFolder(); - } else{ + } else { template = this.templateRowFolder(); } - } else if (folder_item.get('type') === 'file' || folder_item.get('model_class') === 'LibraryDatasetDatasetAssociation'){ + } else if (folder_item.get('type') === 'file' || folder_item.get('model_class') === 'LibraryDatasetDatasetAssociation' || folder_item.get('model_class') === 'LibraryDataset'){ this.options.type = 'file'; if (folder_item.get('deleted')){ template = this.templateRowDeletedFile(); @@ -48,22 +56,52 @@ var FolderRowView = Backbone.View.extend({ console.error('Unknown library item type found.'); console.error(folder_item.get('type') || folder_item.get('model_class')); } - this.setElement(template({content_item:folder_item})); + this.setElement(template({content_item: folder_item, edit_mode: this.options.edit_mode, button_config: this.options.visibility_config})); this.$el.show(); return this; }, + /** + * Modify the visibility of buttons for + * the filling of the row template of a given folder. + */ + prepareButtons: function(folder){ + vis_config = this.options.visibility_config; + if (this.options.edit_mode === false){ + vis_config.save_folder_btn = false; + vis_config.cancel_folder_btn = false; + if (folder.get('deleted') === true ){ + vis_config.edit_folder_btn = false; + vis_config.permission_folder_btn = false; + } else if (folder.get('deleted') === false ) { + vis_config.save_folder_btn = false; + vis_config.cancel_folder_btn = false; + if (folder.get('can_modify') === true){ + vis_config.edit_folder_btn = true; + } + if (folder.get('can_manage') === true){ + vis_config.permission_folder_btn = true; + } + } + } else if (this.options.edit_mode === true){ + vis_config.edit_folder_btn = false; + vis_config.permission_folder_btn = false; + vis_config.save_folder_btn = true; + vis_config.cancel_folder_btn = true; + } + this.options.visibility_config = vis_config; + }, + + /* Show the page with dataset details. */ showDatasetDetails : function(){ Galaxy.libraries.datasetView = new mod_library_dataset_view.LibraryDatasetView({id: this.id}); }, - /** - * Undeletes the dataset on server and renders the row again. - */ + /* Undelete the dataset on server and render the row again. */ undeleteDataset : function(event){ $(".tooltip").hide(); var that = this; - var dataset_id = $(event.target).closest('tr')[0].id; + var dataset_id = $(event.target).closest('tr').data('id'); var dataset = Galaxy.libraries.folderListView.collection.get(dataset_id); dataset.url = dataset.urlRoot + dataset.id + '?undelete=true'; dataset.destroy({ @@ -87,13 +125,11 @@ var FolderRowView = Backbone.View.extend({ }); }, - /** - * Undeletes the folder on server and renders the row again. - */ + /* Undelete the folder on server and render the row again. */ undeleteFolder : function(event){ $(".tooltip").hide(); var that = this; - var folder_id = $(event.target).closest('tr')[0].id; + var folder_id = $(event.target).closest('tr').data('id'); var folder = Galaxy.libraries.folderListView.collection.get(folder_id); folder.url = folder.urlRoot + folder.id + '?undelete=true'; folder.destroy({ @@ -114,37 +150,128 @@ var FolderRowView = Backbone.View.extend({ }); }, + + /* User clicked the 'edit' button on row so render the row as editable. */ + startModifications: function(){ + this.options.edit_mode = true; + this.repaint(); + }, + + /* User clicked the 'cancel' button so render normal row */ + cancelModifications: function(){ + this.options.edit_mode = false; + this.repaint(); + }, + + saveModifications: function(){ + var folder = Galaxy.libraries.folderListView.collection.get(this.$el.data('id')); + var is_changed = false; + var new_name = this.$el.find('.input_folder_name').val(); + if (typeof new_name !== 'undefined' && new_name !== folder.get('name') ){ + if (new_name.length > 2){ + folder.set("name", new_name); + is_changed = true; + } else{ + mod_toastr.warning('Folder name has to be at least 3 characters long.'); + return; + } + } + var new_description = this.$el.find('.input_folder_description').val(); + if (typeof new_description !== 'undefined' && new_description !== folder.get('description') ){ + folder.set("description", new_description); + is_changed = true; + } + if (is_changed){ + var row_view = this; + folder.save(null, { + patch: true, + success: function(folder) { + row_view.options.edit_mode = false; + row_view.repaint(folder); + mod_toastr.success('Changes to folder saved.'); + }, + error: function(model, response){ + if (typeof response.responseJSON !== "undefined"){ + mod_toastr.error(response.responseJSON.err_msg); + } else { + mod_toastr.error('An error occured while attempting to update the folder.'); + } + } + }); + } else { + this.options.edit_mode = false; + this.repaint(folder); + mod_toastr.info('Nothing has changed.'); + } + }, + + repaint: function(){ + /* need to hide manually because of the element removal in setElement + invoked in render() */ + $(".tooltip").hide(); + /* we need to store the old element to be able to replace it with + new one */ + var old_element = this.$el; + /* if user canceled the folder param is undefined, + if user saved and succeeded the updated folder is rendered */ + this.render(); + old_element.replaceWith(this.$el); + /* now we attach new tooltips to the newly created row element */ + this.$el.find("[data-toggle]").tooltip(); + }, + templateRowFolder: function() { - tmpl_array = []; - - tmpl_array.push(''); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' <%- content_item.get("name") %>'); - tmpl_array.push(' '); - tmpl_array.push(' folder'); - tmpl_array.push(' '); - tmpl_array.push(' <%= _.escape(content_item.get("update_time")) %>'); // time updated - tmpl_array.push(' '); - tmpl_array.push(' <% if (content_item.get("can_manage")) { %><% } %>'); - tmpl_array.push(' '); - tmpl_array.push(''); - - return _.template(tmpl_array.join('')); + return _.template([ + '', + '', + '', + '', + '', + '<% if(!edit_mode) { %>', + '', + '<%- content_item.get("name") %>', + '', + '', + '<%- content_item.get("description") %>', + '', + '<% } else if(edit_mode){ %>', + '', + '', + '<% } %>', + 'folder', + '', + '', + '<%= _.escape(content_item.get("update_time")) %>', + '', + '', + '<% if(edit_mode) { %>', // start edit mode + '', + '', + '<% } else if (!edit_mode){%>', // start no edit mode + '', + '', + '', + '', + '<% } %>', //end no edit mode + '', + '' + ].join('')); }, templateRowFile: function(){ tmpl_array = []; - tmpl_array.push(''); + tmpl_array.push(''); tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' /datasets/<%- content_item.id %>" class="library-dataset"><%- content_item.get("name") %>'); // dataset + tmpl_array.push(' <%- content_item.get("message") %>'); tmpl_array.push(' <%= _.escape(content_item.get("file_ext")) %>'); // data type tmpl_array.push(' <%= _.escape(content_item.get("file_size")) %>'); // size tmpl_array.push(' <%= _.escape(content_item.get("update_time")) %>'); // time updated @@ -152,7 +279,7 @@ var FolderRowView = Backbone.View.extend({ tmpl_array.push(' <% if (content_item.get("is_unrestricted")) { %><% } %>'); tmpl_array.push(' <% if (content_item.get("is_private")) { %><% } %>'); tmpl_array.push(' <% if ((content_item.get("is_unrestricted") === false) && (content_item.get("is_private") === false)) { %><% } %>'); - tmpl_array.push(' <% if (content_item.get("can_manage")) { %>/datasets/<%- content_item.id %>/permissions"><% } %>'); + tmpl_array.push(' <% if (content_item.get("can_manage")) { %>/datasets/<%- content_item.id %>/permissions"><% } %>'); tmpl_array.push(' '); tmpl_array.push(''); @@ -162,16 +289,17 @@ var FolderRowView = Backbone.View.extend({ templateRowDeletedFile: function(){ tmpl_array = []; - tmpl_array.push(''); + tmpl_array.push(''); tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' <%- content_item.get("name") %>'); // dataset + tmpl_array.push(' <%- content_item.get("message") %>'); tmpl_array.push(' <%= _.escape(content_item.get("file_ext")) %>'); // data type tmpl_array.push(' <%= _.escape(content_item.get("file_size")) %>'); // size tmpl_array.push(' <%= _.escape(content_item.get("update_time")) %>'); // time updated - tmpl_array.push(' '); + tmpl_array.push(' '); tmpl_array.push(''); return _.template(tmpl_array.join('')); @@ -180,7 +308,7 @@ var FolderRowView = Backbone.View.extend({ templateRowDeletedFolder: function(){ tmpl_array = []; - tmpl_array.push(''); + tmpl_array.push(''); tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); @@ -188,10 +316,11 @@ var FolderRowView = Backbone.View.extend({ tmpl_array.push(' '); tmpl_array.push(' <%- content_item.get("name") %>'); tmpl_array.push(' '); + tmpl_array.push(' <%- content_item.get("description") %>'); tmpl_array.push(' folder'); tmpl_array.push(' '); tmpl_array.push(' <%= _.escape(content_item.get("update_time")) %>'); // time updated - tmpl_array.push(' '); + tmpl_array.push(' '); tmpl_array.push(''); return _.template(tmpl_array.join('')); diff --git a/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js b/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js index 67c9297ba19..44acd596494 100644 --- a/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js +++ b/client/galaxy/scripts/mvc/library/library-foldertoolbar-view.js @@ -20,7 +20,7 @@ var FolderToolbarView = Backbone.View.extend({ 'click #toolbtn_bulk_import' : 'modalBulkImport', 'click #include_deleted_datasets_chk' : 'checkIncludeDeleted', 'click #toolbtn_show_libinfo' : 'showLibInfo', - 'click #toolbtn_bulk_delete' : 'deleteSelectedDatasets', + 'click #toolbtn_bulk_delete' : 'deleteSelectedItems', 'click #page_size_prompt' : 'showPageSizePrompt' }, @@ -252,10 +252,10 @@ var FolderToolbarView = Backbone.View.extend({ var dataset_ids = []; var folder_ids = []; $('#folder_table').find(':checked').each(function(){ - if (this.parentElement.parentElement.id !== '' && this.parentElement.parentElement.classList.contains('dataset_row') ) { - dataset_ids.push(this.parentElement.parentElement.id); - } else if (this.parentElement.parentElement.id !== '' && this.parentElement.parentElement.classList.contains('folder_row') ) { - folder_ids.push(this.parentElement.parentElement.id); + if ($(this.parentElement.parentElement).data('id') !== '' && this.parentElement.parentElement.classList.contains('dataset_row') ) { + dataset_ids.push($(this.parentElement.parentElement).data('id')); + } else if ($(this.parentElement.parentElement).data('id') !== '' && this.parentElement.parentElement.classList.contains('folder_row') ) { + folder_ids.push($(this.parentElement.parentElement).data('id')); } }); // prepare the dataset objects to be imported @@ -306,10 +306,10 @@ var FolderToolbarView = Backbone.View.extend({ var dataset_ids = []; var folder_ids = []; $( '#folder_table' ).find( ':checked' ).each( function(){ - if ( this.parentElement.parentElement.id !== '' && this.parentElement.parentElement.classList.contains('dataset_row') ) { - dataset_ids.push( this.parentElement.parentElement.id ); - } else if ( this.parentElement.parentElement.id !== '' && this.parentElement.parentElement.classList.contains('folder_row') ) { - folder_ids.push( this.parentElement.parentElement.id ); + if ( $(this.parentElement.parentElement).data('id') !== '' && this.parentElement.parentElement.classList.contains('dataset_row') ) { + dataset_ids.push( $(this.parentElement.parentElement).data('id') ); + } else if ( $(this.parentElement.parentElement).data('id') !== '' && this.parentElement.parentElement.classList.contains('folder_row') ) { + folder_ids.push( $(this.parentElement.parentElement).data('id') ); } } ); var url = Galaxy.root + 'api/libraries/datasets/download/' + format; @@ -868,6 +868,8 @@ var FolderToolbarView = Backbone.View.extend({ * @param {array} lddas_set array of lddas to delete */ chainCallDeletingItems: function( items_to_delete ){ + console.log('chaincall'); + console.log(items_to_delete); var self = this; this.deleted_items = new mod_library_model.Folder(); var popped_item = items_to_delete.pop(); @@ -898,6 +900,8 @@ var FolderToolbarView = Backbone.View.extend({ console.error('Unknown library item type found.'); console.error(item.type || item.model_class); } + console.log('updated item') + console.log(updated_item); Galaxy.libraries.folderListView.collection.add( updated_item ); } self.chainCallDeletingItems( items_to_delete ); @@ -921,9 +925,9 @@ var FolderToolbarView = Backbone.View.extend({ }, /** - * Deletes the selected datasets. Atomic. One by one. + * Delete the selected items. Atomic. One by one. */ - deleteSelectedDatasets: function(){ + deleteSelectedItems: function(){ var checkedValues = $('#folder_table').find(':checked'); if(checkedValues.length === 0){ mod_toastr.info('You must select at least one dataset for deletion.'); @@ -945,11 +949,11 @@ var FolderToolbarView = Backbone.View.extend({ var dataset_ids = []; var folder_ids = []; checkedValues.each(function(){ - if (this.parentElement.parentElement.id !== '') { - if (this.parentElement.parentElement.id.substring(0,1) == 'F'){ - folder_ids.push(this.parentElement.parentElement.id); + if ($(this.parentElement.parentElement).data('id') !== '') { + if ($(this.parentElement.parentElement).data('id').substring(0,1) == 'F'){ + folder_ids.push($(this.parentElement.parentElement).data('id')); } else { - dataset_ids.push(this.parentElement.parentElement.id); + dataset_ids.push($(this.parentElement.parentElement).data('id')); } } }); @@ -968,6 +972,7 @@ var FolderToolbarView = Backbone.View.extend({ var folder = new mod_library_model.FolderAsModel({id:folder_ids[i]}); items_to_delete.push(folder); } + console.log(items_to_delete); this.options.chain_call_control.total_number = items_total.length; // call the recursive function to call ajax one after each other (request FIFO queue) @@ -1104,7 +1109,7 @@ var FolderToolbarView = Backbone.View.extend({ tmpl_array.push('
  • .zip
  • '); tmpl_array.push(' '); tmpl_array.push('
    '); - tmpl_array.push(' '); + tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); tmpl_array.push(' '); diff --git a/client/galaxy/scripts/mvc/library/library-libraryrow-view.js b/client/galaxy/scripts/mvc/library/library-libraryrow-view.js index cbd625de897..e39cc2b0da5 100644 --- a/client/galaxy/scripts/mvc/library/library-libraryrow-view.js +++ b/client/galaxy/scripts/mvc/library/library-libraryrow-view.js @@ -53,7 +53,7 @@ var LibraryRowView = Backbone.View.extend({ var old_element = this.$el; /* if user canceled the library param is undefined, if user saved and succeeded the updated library is rendered */ - this.render(library); + this.render(); old_element.replaceWith(this.$el); /* now we attach new tooltips to the newly created row element */ this.$el.find("[data-toggle]").tooltip(); @@ -223,55 +223,50 @@ var LibraryRowView = Backbone.View.extend({ }, templateRow: function() { - tmpl_array = []; - - tmpl_array.push(' " style="display:none;" data-id="<%- library.get("id") %>">'); - tmpl_array.push(' <% if(!edit_mode) { %>'); - tmpl_array.push(' <% if(library.get("deleted")) { %>'); - tmpl_array.push(' <%- library.get("name") %>'); - tmpl_array.push(' <% } else { %>'); - tmpl_array.push(' "><%- library.get("name") %>'); - tmpl_array.push(' <% } %>'); - - tmpl_array.push(' <% if(library.get("description")) { %>'); - tmpl_array.push(' <% if( (library.get("description")).length> 80 ) { %>'); - tmpl_array.push(' "><%= _.escape(library.get("description")).substring(0, 80) + "..." %>'); - tmpl_array.push(' <% } else { %>'); - tmpl_array.push(' <%= _.escape(library.get("description"))%>'); - tmpl_array.push(' <% } %>'); - tmpl_array.push(' <% } else { %>'); - tmpl_array.push(' '); - tmpl_array.push(' <% } %>'); - - tmpl_array.push(' <% if(library.get("synopsis")) { %>'); - tmpl_array.push(' <% if( (library.get("synopsis")).length> 120 ) { %>'); - tmpl_array.push(' "><%= _.escape(library.get("synopsis")).substring(0, 120) + "..." %>'); - tmpl_array.push(' <% } else { %>'); - tmpl_array.push(' <%= _.escape(library.get("synopsis"))%>'); - tmpl_array.push(' <% } %>'); - tmpl_array.push(' <% } else { %>'); - tmpl_array.push(' '); - tmpl_array.push(' <% } %>'); - - tmpl_array.push(' <% } else if(edit_mode){ %>'); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' <% } %>'); - tmpl_array.push(' '); - tmpl_array.push(' <% if( (library.get("public")) && (library.get("deleted") === false) ) { %>'); - tmpl_array.push(' '); - tmpl_array.push(' <% }%>'); - tmpl_array.push(' '); - tmpl_array.push(' /permissions"> '); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' '); - tmpl_array.push(' '); - - return _.template(tmpl_array.join('')); + return _.template([ + '" style="display:none;" data-id="<%- library.get("id") %>">', + '<% if(!edit_mode) { %>', + '<% if(library.get("deleted")) { %>', + ' <%- library.get("name") %>', + '<% } else { %>', + '"><%- library.get("name") %>', + '<% } %>', + '<% if(library.get("description")) { %>', + '<% if( (library.get("description")).length> 80 ) { %>', + '"><%= _.escape(library.get("description")).substring(0, 80) + "..." %>', + '<% } else { %>', + '<%= _.escape(library.get("description"))%>', + '<% } %>', + '<% } else { %>', + '', + '<% } %>', + '<% if(library.get("synopsis")) { %>', + '<% if( (library.get("synopsis")).length> 120 ) { %>', + '"><%= _.escape(library.get("synopsis")).substring(0, 120) + "..." %>', + '<% } else { %>', + '<%= _.escape(library.get("synopsis"))%>', + '<% } %>', + '<% } else { %>', + '', + '<% } %>', + '<% } else if(edit_mode){ %>', + '', + '', + '', + '<% } %>', + '', + '<% if( (library.get("public")) && (library.get("deleted") === false) ) { %>', + ' ', + '<% }%>', + '', + '/permissions">', + '', + '', + '', + '', + '', + '' + ].join('')); } }); diff --git a/client/galaxy/scripts/mvc/tours.js b/client/galaxy/scripts/mvc/tours.js index fb95aea4c34..b0bfd9dd809 100644 --- a/client/galaxy/scripts/mvc/tours.js +++ b/client/galaxy/scripts/mvc/tours.js @@ -10,13 +10,15 @@ define(['libs/bootstrap-tour'],function(BootstrapTour) { + var gxy_root = typeof Galaxy === "undefined" ? '/' : Galaxy.root; + var tour_opts = { storage: window.sessionStorage, onEnd: function(){ sessionStorage.removeItem('activeGalaxyTour'); }, delay: 150, // Attempts to make it look natural orphan:true - } + }; var hooked_tour_from_data = function(data){ _.each(data.steps, function(step) { @@ -41,20 +43,12 @@ define(['libs/bootstrap-tour'],function(BootstrapTour) { // elements which have additional logic, like the // upload input box step.onShown= function(){ - $(step.element).val(step.textinsert).trigger("change") + $(step.element).val(step.textinsert).trigger("change"); }; } }); return data; - } - - // DBTODO: there's probably a better way to do this for pages which don't - // have Galaxy objects. - if (typeof Galaxy != "undefined") { - var gxy_root = Galaxy.root; - }else{ - var gxy_root = '/'; - } + }; var TourItem = Backbone.Model.extend({ urlRoot: gxy_root + 'api/tours', @@ -70,8 +64,7 @@ define(['libs/bootstrap-tour'],function(BootstrapTour) { var url = gxy_root + 'api/tours/' + tour_id; $.getJSON( url, function( data ) { // Set hooks for additional click and data entry actions. - tourdata = hooked_tour_from_data(data); - console.log(tourdata); + var tourdata = hooked_tour_from_data(data); sessionStorage.setItem('activeGalaxyTour', JSON.stringify(data)); // Store tour steps in sessionStorage to easily persist w/o hackery. var tour = new Tour(_.extend({ @@ -82,19 +75,18 @@ define(['libs/bootstrap-tour'],function(BootstrapTour) { tour.goTo(0); tour.restart(); }); - } - + }; var ToursView = Backbone.View.extend({ // initialize - initialize: function(options) { + initialize: function() { var self = this; this.setElement('
    '); - this.model = new Tours() + this.model = new Tours(); this.model.fetch({ - success: function( model ){ + success: function(){ self.render(); }, - error: function( model, response ){ + error: function(){ // Do something. console.error("Failed to fetch tours."); } @@ -102,7 +94,6 @@ define(['libs/bootstrap-tour'],function(BootstrapTour) { }, render: function(){ - var self = this; var tpl = _.template([ "

    Galaxy Tours

    ", "

    This page presents a list of interactive tours available on this Galaxy server. ", @@ -110,14 +101,14 @@ define(['libs/bootstrap-tour'],function(BootstrapTour) { "

    "].join('')); - this.$el.html(tpl({tours: this.model.models})).on("click", ".tourItem", function(e){ + this.$el.html(tpl({tours: this.model.models})).on("click", ".tourItem", function(){ giveTour($(this).data("tour.id")); }); } @@ -126,5 +117,5 @@ define(['libs/bootstrap-tour'],function(BootstrapTour) { return {ToursView: ToursView, hooked_tour_from_data: hooked_tour_from_data, tour_opts: tour_opts, - giveTour: giveTour} + giveTour: giveTour}; }); diff --git a/client/galaxy/scripts/mvc/ui/ui-select-default.js b/client/galaxy/scripts/mvc/ui/ui-select-default.js index 9299e5d4b15..6651d328e16 100644 --- a/client/galaxy/scripts/mvc/ui/ui-select-default.js +++ b/client/galaxy/scripts/mvc/ui/ui-select-default.js @@ -20,6 +20,7 @@ var View = Backbone.View.extend({ initialize: function(options) { // link this var self = this; + this.model = new Backbone.Model(); // configure options this.options = Utils.merge(options, this.optionsDefault); @@ -186,6 +187,13 @@ var View = Backbone.View.extend({ /** Update all available options at once */ + add: function( options, sorter ) { + _.each( this.model.get( 'options' ), function( v ) { + !_.findWhere( options, v ) && options.push( v ); + }); + sorter && options.sort( sorter ); + this.update( options ); + }, update: function(options) { // backup current value var current = this._getValue(); @@ -199,6 +207,7 @@ var View = Backbone.View.extend({ } // add new options + this.model.set( 'options', options ); for (var key in options) { this.$select.append(this._templateOption(options[key])); } diff --git a/client/galaxy/scripts/mvc/upload/default/default-row.js b/client/galaxy/scripts/mvc/upload/default/default-row.js index ede62d916d0..8e50a5399e1 100644 --- a/client/galaxy/scripts/mvc/upload/default/default-row.js +++ b/client/galaxy/scripts/mvc/upload/default/default-row.js @@ -61,7 +61,6 @@ return Backbone.View.extend({ css: 'upload-genome', onchange : function(genome) { self.model.set('genome', genome); - self.app.updateGenome(genome, true); }, data: self.app.list_genomes, container: this.$('#genome'), @@ -79,7 +78,6 @@ return Backbone.View.extend({ css: 'upload-extension', onchange : function(extension) { self.model.set('extension', extension); - self.app.updateExtension(extension, true); }, data: self.app.list_extensions, container: this.$('#extension'), diff --git a/client/galaxy/scripts/mvc/visualization/visualization-model.js b/client/galaxy/scripts/mvc/visualization/visualization-model.js index cb4179de734..6c2f9ded47c 100644 --- a/client/galaxy/scripts/mvc/visualization/visualization-model.js +++ b/client/galaxy/scripts/mvc/visualization/visualization-model.js @@ -21,7 +21,7 @@ var Visualization = Backbone.Model.extend( /** override urlRoot to handle prefix */ urlRoot : function(){ - var apiUrl = '/api/visualizations'; + var apiUrl = 'api/visualizations'; return Galaxy.root + apiUrl; }, diff --git a/client/galaxy/scripts/mvc/workflow/workflow-view.js b/client/galaxy/scripts/mvc/workflow/workflow-view.js index 9550670e4f0..761270caaf4 100644 --- a/client/galaxy/scripts/mvc/workflow/workflow-view.js +++ b/client/galaxy/scripts/mvc/workflow/workflow-view.js @@ -361,12 +361,16 @@ EditorFormView = Backbone.View.extend({ self.canvas_manager.draw_overview(); // Determine if any parameters were 'upgraded' and provide message upgrade_message = ""; - $.each( data.upgrade_messages, function( k, v ) { - upgrade_message += ( "
  • Step " + ( parseInt(k, 10) + 1 ) + ": " + self.workflow.nodes[k].name + "
  • "; + if ( details ) { + upgrade_message += "
  • Step " + ( parseInt( step_id, 10 ) + 1 ) + ": " + self.workflow.nodes[ step_id ].name + "
  • "; + } }); if ( upgrade_message ) { window.show_modal( "Workflow loaded with changes", diff --git a/client/galaxy/scripts/onload.js b/client/galaxy/scripts/onload.js index ecf6e9fe9a6..e0fa54924c3 100644 --- a/client/galaxy/scripts/onload.js +++ b/client/galaxy/scripts/onload.js @@ -20,6 +20,7 @@ window.make_popupmenu = POPUPMENU.make_popupmenu; window.make_popup_menus = POPUPMENU.make_popup_menus; window.init_tag_click_function = require( 'ui/autocom_tagging' ); var TOURS = require( 'mvc/tours' ); +var QUERY_STRING = require( 'utils/query-string-parsing' ); // console.debug( 'galaxy globals loaded' ); // ============================================================================ @@ -165,39 +166,15 @@ $(document).ready( function() { return anchor; }); - try{ - // So, depending on what elements your tour is hooked to, this may not - // work on some pages with some rendered content because of view - // rendering delays. - // Another option is to present an icon for 'continue-tour' somewhere? - urlparms = _.object(_.compact(_.map(location.search.slice(1).split('&'), function(item) { if (item) return item.split('='); }))); - if (urlparms.tour_id){ - var tour_id = urlparms.tour_id; - delete urlparms.tour_id; - var url = $(location).attr('href'); - var repacked_url_args = _.map(Object.getOwnPropertyNames(urlparms), function(k) { return "?" + [k, urlparms[k]].join('=') }).join('&'); - url = window.location.href.split('?')[0]; - if (repacked_url_args !== "?"){ - url = url + repacked_url_args; - } - history.pushState(null, null, url); - TOURS.giveTour(tour_id); + var et = JSON.parse(sessionStorage.getItem('activeGalaxyTour')); + if (et){ + et = TOURS.hooked_tour_from_data(et); + if (et && et.steps){ + var tour = new Tour(_.extend({ + steps: et.steps, + }, TOURS.tour_opts)); + tour.init(); + tour.restart(); } - else{ - et = JSON.parse(sessionStorage.getItem('activeGalaxyTour')); - if (et){ - et = TOURS.hooked_tour_from_data(et); - if (et && et.steps){ - var tour = new Tour(_.extend({ - steps: et.steps, - }, TOURS.tour_opts)); - tour.init(); - tour.restart(); - } - } - } - } - catch(ex){ - console.log("Tour loading failure, you'll need to restart the tour manually." + ex); } }); diff --git a/client/galaxy/style/less/base.less b/client/galaxy/style/less/base.less index 9b3257c4bfb..63472c4e832 100644 --- a/client/galaxy/style/less/base.less +++ b/client/galaxy/style/less/base.less @@ -573,10 +573,12 @@ div.toolHelpBody { .toolForm.toolFormInCanvas { border: solid @form-border 1px; + .border-radius(2px); background: @white; + margin: 0px; &.toolForm-active { - border: solid @brand-primary 3px; - margin: 4px; + box-shadow: 0 0 0 3px @brand-primary; + .border-radius(1px); } .toolFormTitle { font-size: @font-size-base; diff --git a/client/galaxy/style/less/library.less b/client/galaxy/style/less/library.less index 542589d71e8..692353f059d 100644 --- a/client/galaxy/style/less/library.less +++ b/client/galaxy/style/less/library.less @@ -30,7 +30,7 @@ li.datasetRow:hover } td.right-center { - vertical-align: middle !important; + vertical-align: middle !important; text-align: right; } @@ -44,7 +44,7 @@ td.right-center { .library_table { td { border-top:1px solid #5f6990 !important; - } + } th { border-bottom: 2px solid #5f6990 !important; } @@ -56,10 +56,10 @@ td.right-center { } } .library_style_container { - width: 95%; - margin: auto; - margin-top:2em; - overflow: auto !important; + width: 95%; + margin: auto; + margin-top:2em; + overflow: auto !important; tr { height: 32px; } @@ -128,6 +128,12 @@ th.button_heading{ } } +#libraries_element, #folder_items_element{ + button{ + margin-left: 0.5em; + } +} + img.expanderIcon { padding-right: 4px; } diff --git a/client/galaxy/style/less/tour.less b/client/galaxy/style/less/tour.less index 83cd2ba6a94..6eb74581d7b 100644 --- a/client/galaxy/style/less/tour.less +++ b/client/galaxy/style/less/tour.less @@ -1,4 +1,4 @@ -.popover-title{ +.tour-tour > .popover-title{ background-color: @base-color-1; color: @white; } diff --git a/config/galaxy.ini.sample b/config/galaxy.ini.sample index 2277f1d634e..95041764034 100644 --- a/config/galaxy.ini.sample +++ b/config/galaxy.ini.sample @@ -714,6 +714,15 @@ use_interactive = True # lot of CPU. #use_heartbeat = False +# Control the period (in seconds) between dumps. Use -1 to disable. Regardless +# of this setting, if use_heartbeat is enabled, you can send a Galaxy process +# (unless running with uWSGI) SIGUSR1 (`kill -USR1`) to force a dump. +#heartbeat_interval = 20 + +# Heartbeat log filename. Can accept the template variables {server_name} and +# {pid} +#heartbeat_log = heartbeat_{server_name}.log + # Log to Sentry # Sentry is an open source logging and error aggregation platform. Setting # sentry_dsn will enable the Sentry middleware and errors will be sent to the @@ -771,7 +780,7 @@ use_interactive = True # Search data libraries with lucene #enable_lucene_library_search = False -# maxiumum file size to index for searching, in MB +# maximum file size to index for searching, in MB #fulltext_max_size = 500 #fulltext_noindex_filetypes = bam,sam,wig,bigwig,fasta,fastq,fastqsolexa,fastqillumina,fastqsanger # base URL of server providing search functionality using lucene diff --git a/config/plugins/visualizations/charts/Gruntfile.js b/config/plugins/visualizations/charts/Gruntfile.js index 6ece32d752f..c7dd80ff3cd 100644 --- a/config/plugins/visualizations/charts/Gruntfile.js +++ b/config/plugins/visualizations/charts/Gruntfile.js @@ -11,7 +11,7 @@ module.exports = function(grunt) { }, shim : { "libs/underscore": { exports: "_" }, - "libs/backbone/backbone": { exports: "Backbone" } + "libs/backbone": { exports: "Backbone" } }, name : "plugin/app", out : "static/build-app.js", diff --git a/config/plugins/visualizations/charts/templates/charts.mako b/config/plugins/visualizations/charts/templates/charts.mako index 34d6286b0e1..949cdc42b35 100644 --- a/config/plugins/visualizations/charts/templates/charts.mako +++ b/config/plugins/visualizations/charts/templates/charts.mako @@ -15,7 +15,7 @@ 'libs/jquery/select2', 'libs/bootstrap', 'libs/underscore', - 'libs/backbone/backbone', + 'libs/backbone', 'libs/d3', 'libs/require')} @@ -39,7 +39,7 @@ ## load merged/minified code ${h.javascript_link( app_root + "build-app.js" )} - + ## install default css ${h.stylesheet_link( app_root + "app.css" )} @@ -79,7 +79,7 @@ }, shim: { "libs/underscore": { exports: "_" }, - "libs/backbone/backbone": { exports: "Backbone" }, + "libs/backbone": { exports: "Backbone" }, "d3": { exports: "d3"} } @@ -89,7 +89,7 @@ }; // application var app = null; - $(function() { + $(function() { // request application script require(['plugin/app'], function(App) { // load options @@ -97,10 +97,10 @@ id : ${h.dumps( visualization_id )} || undefined, config : ${h.dumps( config )} } - + // create application app = new App(options); - + // add to body $('body').append(app.$el); }); diff --git a/config/plugins/visualizations/scatterplot/templates/scatterplot.mako b/config/plugins/visualizations/scatterplot/templates/scatterplot.mako index 0c96efdae56..036ffc19037 100644 --- a/config/plugins/visualizations/scatterplot/templates/scatterplot.mako +++ b/config/plugins/visualizations/scatterplot/templates/scatterplot.mako @@ -23,12 +23,16 @@ ${h.css( 'base', 'jquery-ui/smoothness/jquery-ui')} ${h.stylesheet_link( root + 'plugins/visualizations/scatterplot/static/scatterplot.css' )} ## ---------------------------------------------------------------------------- + ${h.js( 'libs/jquery/jquery', 'libs/jquery/jquery.migrate', 'libs/jquery/jquery-ui', 'libs/bootstrap', 'libs/underscore', - 'libs/backbone/backbone', + 'libs/backbone', 'libs/d3', 'ui/peek-column-selector', 'ui/pagination', @@ -40,7 +44,7 @@ ${h.javascript_link( root + 'plugins/visualizations/scatterplot/static/scatterpl function getModel(){ return new ScatterplotModel({ id : ${h.dumps( visualization_id )} || undefined, - title : "${title}", + title : "${title or default_title}", config : ${h.dumps( config, indent=2 )} }); } @@ -87,7 +91,7 @@ function getHDAJSON(){ hdaJSON = getHDAJSON(), editor = new ScatterplotConfigEditor({ el : $( '.scatterplot-editor' ).attr( 'id', 'scatterplot-editor-hda-' + hdaJSON.id ), - model : getModel(), + model : model, dataset : hdaJSON }).render(); window.editor = editor; diff --git a/doc/source/admin/framework_dependencies.rst b/doc/source/admin/framework_dependencies.rst new file mode 100644 index 00000000000..f1e0e658433 --- /dev/null +++ b/doc/source/admin/framework_dependencies.rst @@ -0,0 +1,614 @@ +.. _framework-dependencies: + +Galaxy Framework Dependencies +============================= + +Galaxy is a large Python application with a long list of `Python module +dependencies`_. As a result, the Galaxy developers have made significant effort +to provide these dependencies in as simple a method as possible. Prior to the +16.01 release, this was done by distributing dependencies in Python's old +standard packaging format (Egg) in a non-standard way. As of the 16.01 release, +Galaxy now distributes dependencies in Python's new standard packaging format +(Wheel), albeit still in a non-standard way. Thankfully, the new distribution +method is far more compatible with the standard package distribution tooling +(i.e. `pip`_) than the old method. + +.. _Python module dependencies: https://github.com/galaxyproject/galaxy/blob/dev/lib/galaxy/dependencies/requirements.txt +.. _pip: https://pip.pypa.io/ +.. _wheel: https://wheel.readthedocs.org/ + +How it works +------------ + +Upon startup (with ``run.sh``), the startup scripts will: + +1. Create a Python `virtualenv`_ in the directory ``.venv``. + +2. Unset the ``$PYTHONPATH`` environment variable (if set) as this can + interfere with installing `Galaxy pip`_ and dependencies. + +3. Replace that virtualenv's pip with `Galaxy pip`_. + +4. Download and install wheels from the Galaxy project wheel server, + `wheels.galaxyproject.org`_, using pip. + +5. Start Galaxy using ``.venv/bin/python``. + +.. _virtualenv: https://virtualenv.readthedocs.org/ +.. _wheels.galaxyproject.org: https://wheels.galaxyproject.org/ + +Options +------- + +A variety of options to ``run.sh`` are available to control the above behavior: + +- ``--skip-venv``: Do not create or use a virtualenv, and do not replace pip + with Galaxy pip. +- ``--skip-wheels``: Do not install wheels. +- ``--no-create-venv``: Do not create a virtualenv, but use one if it exists at + ``.venv`` or if ``$VIRTUAL_ENV`` is set (this variable is set by virtualenv's + ``activate``) +- ``--replace-pip/--no-replace-pip``: Do/do not replace pip with Galaxy pip. + +Managing dependencies manually +------------------------------ + +Create a virtualenv +^^^^^^^^^^^^^^^^^^^ + +Using a `virtualenv`_ in ``.venv`` under the Galaxy source tree is not +required. More complicated Galaxy setups may choose to use a virtualenv +external to the Galaxy source tree, which can be done either by not using +``run.sh`` directly (an example of this can be found under the `Supervisor`_ +section) or using the ``--no-create-venv`` option, explained in the `Options`_ +section. It is also possible to force Galaxy to start without a virtualenv at +all, but you should not do this unless you know what you're doing. + +To manually create a virtualenv, you will first need to obtain virtualenv. +There are a variety of ways to do this: + +- ``pip install virtualenv`` +- ``brew install virtualenv`` +- Install your Linux distribution's virtualenv package from the system package + manager (e.g. ``apt-get install python-virtualenv``). +- Download the `virtualenv source from PyPI + `_, untar, and run the + ``virtualenv.py`` script contained within as ``python virtualenv.py + /path/to/galaxy/virtualenv`` + +Once this is done, create a virtualenv. In our example, the virtualenv will +live in ``/srv/galaxy/venv`` and the Galaxy source code has been cloned to +``/srv/galaxy/server``. + +.. code-block:: console + + $ virtualenv /srv/galaxy/venv + New python executable in /srv/galaxy/venv/bin/python + Installing setuptools, pip, wheel...done. + $ . /srv/galaxy/venv/bin/activate + (venv)$ + +Install dependencies +^^^^^^^^^^^^^^^^^^^^ + +Normally, ``run.sh`` calls `common_startup.sh`_, which creates the virtualenv, +installs Galaxy pip, and installs dependencies. You can call this script +yourself to set up Galaxy pip and the dependencies without creating a +virtualenv using the ``--no-create-venv`` option: + +.. code-block:: console + + (venv)$ PYTHONPATH= sh /srv/galaxy/server/scripts/common_startup.sh --no-create-venv + Ignoring indexes: https://pypi.python.org/simple + Collecting pip + Downloading https://wheels.galaxyproject.org/packages/pip-8.0.0+gx1-py2.py3-none-any.whl (1.2MB) + 100% |████████████████████████████████| 1.2MB 37.8MB/s + Installing collected packages: pip + Found existing installation: pip 7.1.2 + Uninstalling pip-7.1.2: + Successfully uninstalled pip-7.1.2 + Successfully installed pip-8.0.0+gx1 + Collecting bx-python==0.7.3 (from -r requirements.txt (line 2)) + Downloading https://wheels.galaxyproject.org/packages/bx_python-0.7.3-cp27-cp27mu-linux_x86_64.whl (1.7MB) + 100% |████████████████████████████████| 1.7MB 25.4MB/s + + ... + + Collecting pysam==0.8.3+gx1 (from -r requirements.txt (line 69)) + Downloading https://wheels.galaxyproject.org/packages/pysam-0.8.3+gx1-cp27-cp27mu-linux_x86_64.whl (7.4MB) + 100% |████████████████████████████████| 7.4MB 15.1MB/s + Installing collected packages: bx-python, MarkupSafe, PyYAML, SQLAlchemy, + mercurial, numpy, pycrypto, six, Paste, PasteDeploy, docutils, wchartype, + repoze.lru, Routes, WebOb, WebHelpers, Mako, pytz, Babel, Beaker, + Markdown, Cheetah, requests, requests-toolbelt, boto, bioblend, amqp, + anyjson, kombu, pbr, sqlparse, decorator, Tempita, sqlalchemy-migrate, + Parsley, nose, SVGFig, ecdsa, paramiko, Fabric, Whoosh, pysam + Successfully installed Babel-2.0 Beaker-1.7.0 Cheetah-2.4.4 Fabric-1.10.2 + Mako-1.0.2 Markdown-2.6.3 MarkupSafe-0.23 Parsley-1.3 Paste-2.0.2 + PasteDeploy-1.5.2 PyYAML-3.11 Routes-2.2 SQLAlchemy-1.0.8 SVGFig-1.1.6 + Tempita-0.5.3.dev0 WebHelpers-1.3 WebOb-1.4.1 Whoosh-2.4.1+gx1 amqp-1.4.8 + anyjson-0.3.3 bioblend-0.6.1 boto-2.38.0 bx-python-0.7.3 decorator-4.0.2 + docutils-0.12 ecdsa-0.13 kombu-3.0.30 mercurial-3.4.2 nose-1.3.7 + numpy-1.9.2 paramiko-1.15.2 pbr-1.8.0 pycrypto-2.6.1 pysam-0.8.3+gx1 + pytz-2015.4 repoze.lru-0.6 requests-2.8.1 requests-toolbelt-0.4.0 + six-1.9.0 sqlalchemy-migrate-0.10.0 sqlparse-0.1.16 wchartype-0.1 + +**Warning:** If your ``$PYTHONPATH`` is set, it may interfere with the +dependency installation process (this will almost certainly be the case if you +use `virtualenv-burrito`_). Without ``--no-create-venv`` the ``$PYTHONPATH`` +variable will be automatically unset, but we assume you know what you're doing +and may want it left intact if you are using ``--no-create-venv``. If you +encounter problems, try unsetting ``$PYTHONPATH`` as shown in the example +above. + +.. _common_startup.sh: https://github.com/galaxyproject/galaxy/blob/dev/scripts/common_startup.sh +.. _virtualenv-burrito: https://github.com/brainsik/virtualenv-burrito + +Installing unpinned dependencies +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Galaxy's dependencies can be installed either "pinned" (they will be installed +at exact versions specified for your Galaxy release) or "unpinned" (the latest +versions of all dependencies will be installed unless there are known +incompatibilities with new versions). By default, the release branch(es) of +Galaxy use pinned versions for three reasons: + +1. Using pinned versions insures that the prebuilt wheels on + `wheels.galaxyproject.org`_ will be installed, and no compilation will be + necesseary. + +2. Galaxy releases are tested with the pinned versions and this allows us to + give as much assurance as possible that the pinned versions will work with + the given Galaxy release (especially as time progresses and newer dependency + versions are released while the Galaxy release receives fewer updates. + +3. Pinning furthers Galaxy's goal of reproducibility as differing dependency + versions could result in non-reproducible behavior. + +Install dependencies using the `unpinned requirements file`_, and then instruct +Galaxy to start without attempting to fetch wheels: + +.. code-block:: console + + (venv)$ pip install --index-url=https://wheels.galaxyproject.org/simple/ -r lib/galaxy/dependencies/requirements.txt + (venv)$ deactivate + $ sh run.sh --no-create-venv --skip-wheels + +Including ``--index-url=https://wheels.galaxyproject.org/simple/`` is important +- at least one current Galaxy dependency (SVGFig) is not available in PyPI but +is available (in both source and wheel form) on `wheels.galaxyproject.org`_, +and two (pysam, Whoosh) include modifications specific to Galaxy which are only +available on `wheels.galaxyproject.org`_. + +.. _unpinned requirements file: https://github.com/galaxyproject/galaxy/blob/dev/lib/galaxy/dependencies/requirements.txt + +Wheel interaction with other software +------------------------------------- + +Galaxy job handlers +^^^^^^^^^^^^^^^^^^^ + +All Galaxy jobs run a metadata detection step on the job outputs upon +completion of the tool. The metadata detection step requires many of Galaxy's +dependencies. Because of this, it's necessary to make sure the metadata +detection step runs in Galaxy's virtualenv. If you run a relatively simple +Galaxy setup (e.g. single process, or multiple Python Paste processes started +using ``run.sh``) then this is assured for you automatically. In more +complicated setups (using a cluster, supervisor, and/or the "headless" Galaxy +handler) it may be necessary to make sure the handlers know where the +virtualenv (or a virtualenv containing Galaxy's dependencies) can be found. + +If your jobs are failing due to Python ``ImportError`` exceptions, this is most +likely the problem. If your jobs run on a cluster, you can use the ```` +tag in ``job_conf.xml`` to source the virtualenv. For example: + +.. code-block:: xml + + + + ... + + + + ...cluster options... + + + + + + + +If your Galaxy server's virtualenv isn't available on the cluster you can +create one manually using the instructions under `Managing dependencies +manually`_. + +Pulsar +^^^^^^ + +If using `Pulsar`_'s option to set metadata on the remote server, the same +conditions as with `Galaxy job handlers`_ apply. You should create a virtualenv +on the remote resource, install Galaxy's dependencies in to it, and set an +```` tag pointing to the virtualenv's ``activate`` as in the `Galaxy job +handlers`_ section. Instructions on how to create a virtualenv can be found +under the `Managing dependencies manually`_ section. + +.. _Pulsar: http://pulsar.readthedocs.org/ + +Conda +^^^^^ + +`Conda`_ and `virtualenv`_ are incompatible. However, Conda provides its own +environment separation functionality in the form of `Conda environments`_. +Starting Galaxy with Conda Python will cause ``--skip-venv`` to be implicitly +set, and the currently active Conda environment will be used to install Galaxy +framework dependencies instaead. Be sure to create and activate a Conda +environment for Galaxy prior to installing packages and/or starting Galaxy. + +You may choose to install Galaxy's dependencies either at their `pinned`_ +versions using pip or `unpinned`_ using a combination of conda and pip. When +running under Conda, pip is not replaced with Galaxy pip, so installing pinned +dependencies will require compilation, will be slower and requires having those +dependencies' build-time dependencies installed, but has benefits as explained +under the `Installing unpinned dependencies`_ section. Installing unpinned +dependencies allows you to use Conda's binary packages for quick and easy +installation. + +Pinned dependencies will be installed by default when running ``run.sh``. To +install unpinned dependencies, the process is similar as to installing unpinned +versions without Conda, with the extra step of installing as much as possible +from Conda/Bioconda before installing from pip. Begin by adding the `Bioconda`_ +channel as explained in the `Bioconda instructions`_ and then creating a new +Conda environment using the provided Conda environment file. Then, install +remaining dependencies using pip and start Galaxy, instructing it to skip the +automatic fetching of pinned dependencies. + +.. code-block:: console + + $ conda config --add channels r + $ conda config --add channels bioconda + $ conda create --name galaxy --file lib/galaxy/dependencies/conda-environment.txt + Fetching package metadata: ........ + Solving package specifications: ............................................ + Package plan for installation in environment /home/nate/conda/envs/galaxy: + + The following packages will be downloaded: + + package | build + ---------------------------|----------------- + boto-2.38.0 | py27_0 1.3 MB + cheetah-2.4.4 | py27_0 267 KB + decorator-4.0.6 | py27_0 11 KB + docutils-0.12 | py27_0 636 KB + ecdsa-0.11 | py27_0 73 KB + markupsafe-0.23 | py27_0 30 KB + mercurial-3.4.2 | py27_0 2.9 MB + nose-1.3.7 | py27_0 194 KB + paste-1.7.5.1 | py27_0 490 KB + pytz-2015.7 | py27_0 174 KB + repoze.lru-0.6 | py27_0 15 KB + requests-2.9.1 | py27_0 605 KB + six-1.10.0 | py27_0 16 KB + sqlalchemy-1.0.11 | py27_0 1.3 MB + sqlparse-0.1.18 | py27_0 51 KB + webob-1.4.1 | py27_0 108 KB + babel-2.1.1 | py27_0 2.3 MB + bx-python-0.7.3 | np110py27_1 2.1 MB + mako-1.0.3 | py27_0 105 KB + paramiko-1.15.2 | py27_0 197 KB + pastedeploy-1.5.2 | py27_1 23 KB + requests-toolbelt-0.5.0 | py27_0 83 KB + routes-2.2 | py27_0 48 KB + bioblend-0.7.0 | py27_0 181 KB + fabric-1.10.2 | py27_0 108 KB + ------------------------------------------------------------ + Total: 13.2 MB + + The following NEW packages will be INSTALLED: + + babel: 2.1.1-py27_0 + bioblend: 0.7.0-py27_0 + boto: 2.38.0-py27_0 + bx-python: 0.7.3-np110py27_1 + cheetah: 2.4.4-py27_0 + decorator: 4.0.6-py27_0 + docutils: 0.12-py27_0 + ecdsa: 0.11-py27_0 + fabric: 1.10.2-py27_0 + libgfortran: 1.0-0 + mako: 1.0.3-py27_0 + markupsafe: 0.23-py27_0 + mercurial: 3.4.2-py27_0 + nose: 1.3.7-py27_0 + numpy: 1.10.2-py27_0 + openblas: 0.2.14-3 + openssl: 1.0.2e-0 + paramiko: 1.15.2-py27_0 + paste: 1.7.5.1-py27_0 + pastedeploy: 1.5.2-py27_1 + pip: 7.1.2-py27_0 + pycrypto: 2.6.1-py27_0 + python: 2.7.11-0 + pytz: 2015.7-py27_0 + pyyaml: 3.11-py27_1 + readline: 6.2-2 + repoze.lru: 0.6-py27_0 + requests: 2.9.1-py27_0 + requests-toolbelt: 0.5.0-py27_0 + routes: 2.2-py27_0 + setuptools: 19.2-py27_0 + six: 1.10.0-py27_0 + sqlalchemy: 1.0.11-py27_0 + sqlite: 3.9.2-0 + sqlparse: 0.1.18-py27_0 + tk: 8.5.18-0 + webob: 1.4.1-py27_0 + wheel: 0.26.0-py27_1 + yaml: 0.1.6-0 + zlib: 1.2.8-0 + + Proceed ([y]/n)? + + Fetching packages ... + boto-2.38.0-py 100% |############################################| Time: 0:00:00 3.27 MB/s + cheetah-2.4.4- 100% |############################################| Time: 0:00:00 1.65 MB/s + decorator-4.0. 100% |############################################| Time: 0:00:00 20.38 MB/s + docutils-0.12- 100% |############################################| Time: 0:00:00 2.21 MB/s + ecdsa-0.11-py2 100% |############################################| Time: 0:00:00 762.58 kB/s + markupsafe-0.2 100% |############################################| Time: 0:00:00 931.23 kB/s + mercurial-3.4. 100% |############################################| Time: 0:00:00 5.36 MB/s + nose-1.3.7-py2 100% |############################################| Time: 0:00:00 1.12 MB/s + paste-1.7.5.1- 100% |############################################| Time: 0:00:00 1.91 MB/s + pytz-2015.7-py 100% |############################################| Time: 0:00:00 1.08 MB/s + repoze.lru-0.6 100% |############################################| Time: 0:00:00 465.26 kB/s + requests-2.9.1 100% |############################################| Time: 0:00:00 2.28 MB/s + six-1.10.0-py2 100% |############################################| Time: 0:00:00 477.04 kB/s + sqlalchemy-1.0 100% |############################################| Time: 0:00:00 4.25 MB/s + sqlparse-0.1.1 100% |############################################| Time: 0:00:00 774.57 kB/s + webob-1.4.1-py 100% |############################################| Time: 0:00:00 819.13 kB/s + babel-2.1.1-py 100% |############################################| Time: 0:00:00 5.53 MB/s + bx-python-0.7. 100% |############################################| Time: 0:00:00 5.11 MB/s + mako-1.0.3-py2 100% |############################################| Time: 0:00:00 813.04 kB/s + paramiko-1.15. 100% |############################################| Time: 0:00:00 1.23 MB/s + pastedeploy-1. 100% |############################################| Time: 0:00:00 721.20 kB/s + requests-toolb 100% |############################################| Time: 0:00:00 856.06 kB/s + routes-2.2-py2 100% |############################################| Time: 0:00:00 666.70 kB/s + bioblend-0.7.0 100% |############################################| Time: 0:00:00 1.15 MB/s + fabric-1.10.2- 100% |############################################| Time: 0:00:00 843.81 kB/s + Extracting packages ... + [ COMPLETE ]|###############################################################| 100% + Linking packages ... + [ COMPLETE ]|###############################################################| 100% + # + # To activate this environment, use: + # $ source activate galaxy + # + # To deactivate this environment, use: + # $ source deactivate + # + $ source activate galaxy + discarding /home/nate/conda/bin from PATH + prepending /home/nate/conda/envs/galaxy/bin to PATH + $ pip install --index-url=https://wheels.galaxyproject.org/simple/ -r lib/galaxy/dependencies/requirements.txt + Requirement already satisfied (use --upgrade to upgrade): numpy in /home/nate/conda/envs/galaxy/lib/python2.7/site-packages (from -r lib/galaxy/dependencies/requirements.txt (line 1)) + + ... + + Collecting WebHelpers (from -r lib/galaxy/dependencies/requirements.txt (line 15)) + Downloading https://wheels.galaxyproject.org/packages/WebHelpers-1.3-py2-none-any.whl (149kB) + 100% |████████████████████████████████| 151kB 55.7MB/s + + ... + + Building wheels for collected packages: pysam + Running setup.py bdist_wheel for pysam + + $ sh run.sh --skip-wheels + +.. _Conda: http://conda.pydata.org/ +.. _Conda environments: http://conda.pydata.org/docs/using/envs.html +.. _Bioconda: https://bioconda.github.io/ +.. _Bioconda instructions: Bioconda_ +.. _pinned: `Installing unpinned dependencies`_ +.. _unpinned: pinned_ + +uWSGI +^^^^^ + +The simplest scenario to using uWSGI with the wheel-based dependencies is to +install uWSGI into Galaxy virtualenv (by default, ``.venv``) using pip, e.g.: + +.. code-block:: console + + $ . ./.venv/bin/activate + (.venv)$ pip install uwsgi + Collecting uwsgi + Downloading uwsgi-2.0.12.tar.gz (784kB) + 100% |████████████████████████████████| 786kB 981kB/s + Building wheels for collected packages: uwsgi + Running setup.py bdist_wheel for uwsgi + Stored in directory: /home/nate/.cache/pip/wheels/a4/7b/7c/8cbe2fe2c2b963173361cc18aa726f165dc4803effbb8195fc + Successfully built uwsgi + Installing collected packages: uwsgi + Successfully installed uwsgi-2.0.12 + +Because uWSGI is installed in the virtualenv, Galaxy's dependencies will be +found upon startup. + +If uWSGI is installed outside of the virtualenv (e.g. from apt) you will need +to pass the ``-H`` option (or one of `its many aliases +`_) on the uWSGI +command line: + +.. code-block:: console + + $ uwsgi --ini /srv/galaxy/config/uwsgi.ini -H /srv/galaxy/venv + +Or in the uWSGI config file: + +.. code-block:: ini + + [uwsgi] + processes = 8 + threads = 4 + socket = /srv/galaxy/var/uwgi.sock + logto = /srv/galaxy/var/uwsgi.log + master = True + pythonpath = /srv/galaxy/server/lib + pythonhome = /srv/galaxy/venv + module = galaxy.webapps.galaxy.buildapp:uwsgi_app_factory() + set = galaxy_config_file=/srv/galaxy/config/galaxy.ini + set = galaxy_root=/srv/galaxy/server + +Supervisor +^^^^^^^^^^ + +Many production sites use `supervisord`_ to manage their Galaxy processes +rather than relying on ``run.sh`` or other means. There's no simple way to +activate a virtualenv when using supervisor, but you can simulate the effects +by setting ``$PATH`` and ``$VIRTUAL_ENV`` in your supervisor config: + +.. code-block:: ini + + [program:galaxy_uwsgi] + command = /srv/galaxy/venv/bin/uwsgi --ini /srv/galaxy/config/uwsgi.ini + directory = /srv/galaxy/server + environment = VIRTUAL_ENV="/srv/galaxy/venv",PATH="/srv/galaxy/venv/bin:%(ENV_PATH)s" + numprocs = 1 + + [program:galaxy_handler] + command = /srv/galaxy/venv/bin/python ./scripts/galaxy-main -c /srv/galaxy/config/galaxy.ini --server-name=handler%(process_num)s + directory = /srv/galaxy/server + process_name = handler%(process_num)s + numprocs = 4 + environment = VIRTUAL_ENV="/srv/galaxy/venv",PATH="/srv/galaxy/venv/bin:%(ENV_PATH)s" + +With supervisor < 3.0 you cannot use the ``%(ENV_PATH)s`` template variable and +must instead specify the full desired ``$PATH``. + +.. _supervisord: http://supervisord.org/ + +Custom pip/wheel rationale +-------------------------- + +We chose to use a modified version of the `pip`_ and `wheel`_ packages in order +to make Galaxy easy to use. People wishing to run Galaxy (especially only for +tool development) may not be systems or command line experts. Unfortunately, +Python modules with C extensions may not always compile out of the box +(typically due to missing compilers, headers, or other system packages) and the +failure messages generated are typically only decipherable to people +experienced with software compilation and almost never indicate how to fix the +problem. In addition, the process of compiling all of Galaxy's C extension +dependencies can be very long if it does succeed. As a result, we want to +precompile Galaxy's dependencies. However, the egg format was never prepared +for doing this on any platform and wheels could not do it on Linux because +there is no ABI compatibility between Linux distributions or versions. + +As a benefit of using the standard tooling (pip), if you choose not to use +Galaxy pip, all of Galaxy's dependencies should still be installable using +standard pip. You will still need to point pip at `wheels.galaxyproject.org`_ +in order to fetch some modified packages and ones that aren't available on +PyPI, but this can be done with the unmodified version of pip. + +A good early discussion of these problems can be found in Armin Ronacher's +`blog post on wheels `_. +One of the problems Armin discusses, Python interpreter ABI incompatibilites +depending on build-time options (UCS2 vs. UCS4), has been fixed by us and +accepted into pip >= 8.0 in `pip pull request #3075`_. The other major problem +(the non-portability of wheels between Linux distributions) remains. `Galaxy +pip`_ provides one solution to this problem. + +More recently, the proposed `PEP 513`_ proposes a different solution to the +cross-distro problem. PEP 513 also contains a very detailed technical +explanation of the problem. + +.. _PEP 513: https://www.python.org/dev/peps/pep-0513/ +.. _pip pull request #3075: https://github.com/pypa/pip/pull/3075 +.. _binary-compatibility.cfg: https://mail.python.org/pipermail/distutils-sig/2015-July/026617.html + +Galaxy pip and wheel +-------------------- +.. _Galaxy pip: +.. _Galaxy wheel: `Galaxy pip and wheel`_ + +`Galaxy pip is a fork `_ of +`pip`_ in which we have added support for installing wheels containing C +extensions (wheels that have compiled binary code) on Linux. `Galaxy wheel is +a fork `_ of `wheel`_ in which we have +added support for building wheels installable with Galaxy pip. + +Two different types of wheels can be created: + +1. "Simple" wheels with very few dependencies outside of libc and libm built on + a "suitably old" platform (currently Debian Squeeze) such that they should + work on all newer systems (e.g. RHEL 6+, Ubuntu 12.04+). These wheels carry + the unmodified ``linux_{arch}`` platform tag (e.g. ``linux_x86_64``) as + specified in `PEP 425`_ and that you will find on wheels built with an + unmodified `wheel`_. + +2. Wheels with specific external dependencies (for example, ``libpq.so``, the + PostgreSQL library, used by `psycopg2`_) can be built on each supported + Linux distribution and tagged more specifically for each distribution. These + wheels carry a ``linux_{arch}_{distro}_{version}`` platform tag (e.g. + ``linux_x86_ubuntu_14_04``) and can be created using `Galaxy wheel`_. + +Galaxy pip and Galaxy wheel also include support for the proposed +`binary-compatibility.cfg`_ file. This file allows distributions that are +binary compatibile (e.g. Red Hat Enterprise Linux 6 and CentOS 6) to use the +same wheels. + +The `manylinux`_ project implements the "Simple" wheels in a more clearly +defined way and allows for the inclusion of "non-standard" external +dependencies directly into the wheel. Galaxy will officially support any +standard which allows for Linux wheels in PyPI once such a standard is +complete. + +.. _PEP 425: https://www.python.org/dev/peps/pep-0425/ +.. _manylinux: https://github.com/manylinux/manylinux/ +.. _psycopg2: http://initd.org/psycopg/ + +Adding additional wheels as Galaxy dependencies +----------------------------------------------- + +New wheels can be added to Galaxy, or the versions of existing wheels can be +updated, using `Galaxy Starforge`_, Galaxy's Docker-based build system. + +The process is still under development and will be streamlined and automated +over time. For the time being, please use the following process to add new +wheels: + +1. Install `Starforge`_ (e.g. with ``pip install starforge`` or ``python + setup.py install`` from the source). You will also need to have Docker + installed on your system. + +2. Obtain `wheels.yml`_ (this file will most likely be moved in to Galaxy in + the future) and add/modify the wheel definition. + +3. Use ``starforge wheel --wheels-config=wheels.yml `` to build the + wheel. If the wheel includes C extensions, you will probably want to also + use the ``--no-qemu`` flag to prevent Starforge from attempting to build on + Mac OS X using QEMU/KVM. + +4. If the wheel build is successful, submit a pull request to `Starforge`_ with + your changes to `wheels.yml`_. + +5. A `Galaxy Committers group`_ member will need to trigger an automated build + of the wheel changes in your pull request. Galaxy's Jenkins_ service will + build these changes using Starforge. + +6. If the pull request is merged, submit a pull request to Galaxy modifying the + files in `lib/galaxy/dependencies`_ as appropriate. + +You may attempt to skip directly to step 4 and let the Starforge wheel PR +builder build your wheels for you. This is especially useful if you are simply +updating an existing wheel's version. However, if you are adding a new C +extension wheel that is not simple to build, you may need to go through many +iterations of updating the PR and having a `Galaxy Committers group`_ member +triggering builds before wheels are successfully built. You can avoid this +cycle by performing steps 1-3 locally. + +.. _Starforge: +.. _Galaxy Starforge: https://github.com/galaxyproject/starforge/ +.. _wheels.yml: https://github.com/galaxyproject/starforge/blob/master/wheels/build/wheels.yml +.. _Galaxy Committers group: https://github.com/galaxyproject/galaxy/blob/dev/doc/source/project/organization.rst#committers +.. _Jenkins: https://jenkins.galaxyproject.org/ +.. _lib/galaxy/dependencies: https://github.com/galaxyproject/galaxy/tree/dev/lib/galaxy/dependencies diff --git a/doc/source/admin/index.rst b/doc/source/admin/index.rst index 08f7351370a..623a81cc7be 100644 --- a/doc/source/admin/index.rst +++ b/doc/source/admin/index.rst @@ -12,4 +12,6 @@ documentation. These resources should be used together. dependency_resolvers.rst + framework_dependencies.rst + useful_scripts.rst diff --git a/doc/source/project/issues.rst b/doc/source/project/issues.rst index e866221c259..8d1af620e41 100644 --- a/doc/source/project/issues.rst +++ b/doc/source/project/issues.rst @@ -105,19 +105,33 @@ Area Labels The 'area' label is used for tagging issues and pull requests to a particular focus area. This allows for easy searching within that -particular domain, as well as more organized release notes. Some -examples, not-exhaustive, are here: +particular domain, as well as more organized release notes. +- ``area/admin`` - Changes to admin functionality of the Galaxy webapp. - ``area/API`` -- ``area/cleanup`` -- ``area/jobs`` +- ``area/cleanup`` - General code cleanup. +- ``area/database`` - Change requires a modification to Galaxy's database. +- ``area/dataset-collections`` +- ``area/datatypes`` - Changes to Galaxy's datatypes +- ``area/datatype-framework`` - Changes to Galaxy's datatype and metadata framework - ``area/documentation`` +- ``area/framework`` - ``area/GIEs`` -- ``area/toolshed`` +- ``area/histories`` +- ``area/jobs`` +- ``area/performance`` +- ``area/reports`` +- ``area/system`` - Changes to scripts used to run or manage Galaxy. +- ``area/tools`` - Changes to specific tools in Galaxy. +- ``area/tool-framework`` +- ``area/toolshed``- Changes to the tool shed client or server. - ``area/UI-UX`` +- ``area/util`` +- ``area/visualizations`` - ``area/workflows`` -This list will definitely grow over time. +New labels should be proposed by opening a pull request against this document +in the dev branch of Galaxy. Other Useful Labels ------------------- diff --git a/doc/source/releases/16.01.rst b/doc/source/releases/16.01.rst new file mode 100644 index 00000000000..6e1a54d29e0 --- /dev/null +++ b/doc/source/releases/16.01.rst @@ -0,0 +1,744 @@ + +.. to_doc + +------------------------------- +16.01 +------------------------------- + +.. announce_start + +Enhancements +------------------------------- + +.. major_feature + +* Interactive tours (with significant help from + `@bgruening `__.) + `Pull Request 1422`_, `Pull Request 1464`_ +* Replace Galaxy eggs dependency management with wheels. + `Pull Request 428`_, `Pull Request 989`_, `Pull Request 988`_, + `Pull Request 1389`_, `Pull Request 1485`_, `Pull Request 995`_, + `Pull Request 996`_, `Pull Request 1006`_, `Pull Request 1017`_, + `Pull Request 1037`_ +* Implement nested workflows. + `Pull Request 1306`_ + +.. feature + +* Use Webpack to greatly optimize JavaScript and other assets served by Galaxy. + `Pull Request 1144`_ +* Overhaul Galaxy analysis view toward a more modular JavaScript architecture. + `Pull Request 706`_, `Pull Request 1184`_ +* Add BAM iobio_ visualization as a Galaxy Interactive Environment + (thanks to `@bgruening `__.) + `Pull Request 1131`_ +* Add Jupyter Interactive Environment + (thanks to `@bgruening `__.) + `Pull Request 1400`_ +* Procedures for bug and issue handling as well as roadmap management. + `Pull Request 902`_, `Pull Request 1020`_ +* Implement a conda dependency resolver (with significant help from + `@bgruening `__.) + `Pull Request 1345`_, `Pull Request 1527`_, `Pull Request 1421`_, + `Pull Request 1409`_ +* Many ToolBox improvements including allowing specifying labels on individual + tools, monitoring and automatic reloading of ``tool_conf.xml`` files, and + allowing specification of such files in JSON/YAML. + `Pull Request 1012`_, `Pull Request 1398`_ +* Configurable client side logging. + `Pull Request 1011`_ +* Allow input collections to specify multiple ``collection_type``\ s. + `Pull Request 1308`_ +* Allow multiple collections to be supplied to a multiple data parameter. + `Pull Request 805`_ +* Implement ``type_source`` on output collections. + `Pull Request 1153`_ +* Allow tools to request a special configuration file containing tool parameters + dumped to json. + `Pull Request 1405`_ +* Add search on username/any for API calls to user and use Select2 for sharing + workflows/pages/histories + (thanks to `@erasche `__.) + `Pull Request 1111`_ +* Improve masthead and scratchbook UI and architecture. + `Pull Request 1407`_, `Pull Request 1424`_ +* Add support for constructive solid geometry datatypes ``ply`` and ``vtk``. + (Thanks to `@gregvonkuster `__.) + `Pull Request 905`_, `Pull Request 1211`_ +* Add searchgui datatype + (thanks to `@jj-umn `__.) + `Pull Request 914`_ +* Add BIOM v1 datatype + (thanks to `@fescudie `__.) + `Pull Request 950`_, `Pull Request 1198`_ +* Add CRAM datatype + (thanks to `@yhoogstrate `__.) + `Pull Request 1108`_, `Pull Request 1182`_ +* Add UniProtXML datatype + (thanks to `@jj-umn `__.) + `Pull Request 1004`_ +* Avoid confusion by adding the PDF datatype to the list of uploadable file + types. + `Pull Request 901`_ +* Add idpDB and HDF5 sniffers and fix MzSQlite sniffer + (thanks to `@chambm `__.) + `Pull Request 1209`_ +* Improve tool shed installation API for installation of repositories if they + are already installed + (thanks to `@bgruening `__.) + `Pull Request 1095`_ +* Prevent GIEs from being closed without user confirmation + (thanks to `@bgruening `__.) + `Pull Request 1178`_ +* Add the constructive solid geometery (CSG) viewer visualization plugin + (thanks to `@gregvonkuster `__.) + `Pull Request 1254`_ +* Add Google analytics tracking to new data libraries. + `Pull Request 959`_ +* Extend users API with delete action + (thanks to `@nsoranzo `__.) + `Pull Request 1063`_ +* Finish swapping unencoded ids with order_index in workflows API. + `Pull Request 1137`_ + +.. enhancement + +* Add documentation and extra options to Environment Modules resolver + (thanks to `@pvanheus `__.) + `Pull Request 1221`_ +* Documentation for dependency resolvers + (thanks to `@pvanheus `__.) + `Pull Request 1296`_ +* Populate env.sh files created via tool shed installations with ``X_ROOT_DIR`` + environment variables. + `Pull Request 564`_, `Pull Request 889`_ +* Reorganize history menu + (thanks to `@erasche `__.) + `Pull Request 985`_ +* Look up installed tools from different toolshed(s) + (thanks to `@mvdbeek `__.) + `Pull Request 818`_, `Pull Request 1286`_ +* Documentation updates for ObjectStore + (thanks to `@mr-c `__.) + `Pull Request 853`_ +* Update JavaScript dependency Dynatree. + `Pull Request 856`_ +* Eliminate LWR from Galaxy (you will need to upgrade to Pulsar). + `Pull Request 857`_ +* Isolate tool commands by default. + `Pull Request 1412`_, `Pull Request 1494`_ +* Allow override of job shell (for conda resolver). + `Pull Request 1473`_ +* Slight tweak to sidebar section naming from 'security' to 'user management'. + `Pull Request 877`_ +* Fix the issue where too many datasets are linked to a certain role + (thanks to `@scholtalbers `__.) + `Pull Request 881`_ +* Fix R dependency installation to be more portable + (thanks to `@bgruening `__.) + `Pull Request 893`_ +* Reorder workflow inputs to top + (thanks to `@scholtalbers `__.) + `Pull Request 912`_ +* Add an API script to upload directory as a data library + (thanks to `@erasche `__.) + `Pull Request 918`_ +* Enable dockerized toolshed tests. + `Pull Request 942`_ +* Improvements and fixes for abstract tool interface. + `Pull Request 955`_ +* Remove remaining references to galaxy.eggs and flake8 some tools + (thanks to `@nsoranzo `__.) + `Pull Request 990`_ +* Apply stricter flake8 rules for the directories shared with Pulsar + (thanks to `@nsoranzo `__.) + `Pull Request 1010`_ +* Updates to default welcome page. + `Pull Request 1013`_ +* Revise deferred queue, use jQuery promises. + `Pull Request 1018`_ +* Keep select field open in tool form multi select fields to ease selecting many + options quickly. + `Pull Request 1019`_ +* Allow resizing of regular multi-select boxes. + `Pull Request 1025`_ +* Add error message for wrongly formatted data in wig_to_bigwig + (thanks to `@scholtalbers `__.) + `Pull Request 1033`_ +* Verify len files during download from UCSC + (thanks to `@nsoranzo `__.) + `Pull Request 1066`_ +* Add biocrusoe to contributors + `Pull Request 1067`_ +* Outline "Format 2" workflow definitions. + `Pull Request 1096`_ +* Improve the API attributes display on parameters page. + `Pull Request 1098`_ +* Update run_tests.sh help for recent changes + (thanks to `@nsoranzo `__.) + `Pull Request 1101`_ +* Show welcome page with required login. + `Pull Request 1105`_ +* Allow accessing collection elements in format_source. + (with significant help from `@nsoranzo `__.) + `Pull Request 1113`_, `Pull Request 1155`_ +* Add nginx config for GIE proxy to documentation. + `Pull Request 1123`_ +* Enforce client build deps are up-to-date. + `Pull Request 1130`_ +* Menu onclick addition. + `Pull Request 1142`_ +* Ensure confirmation when leaving GIE windows. + `Pull Request 1157`_ +* Add local grunt-cli dependency for qunit tests. + `Pull Request 1159`_ +* Tighten up GG sniffing + `Pull Request 864`_ +* Use common exceptions in tools. + `Pull Request 874`_ +* Refactor the remote user middleware for complexity + (thanks to `@erasche `__.) + `Pull Request 875`_ +* Allowed for capitalized package names such as R in unlinked tool shed + dependency resolver + (thanks to `@Christian-B `__.) + `Pull Request 1160`_ +* A slew of tool execution performance optimizations including a huge + fix from `@ericenns `__. + `Pull Request 1166`_, `Pull Request 1163`_, `Pull Request 1199`_, + `Pull Request 1212`_ +* Do not check for tool migrations when running tests. + `Pull Request 1176`_ +* Lazy load HDA/LDDA metadata to speed up history loading + (thanks to `@abretaud `__.) + `Pull Request 1179`_ +* Add debug statement in output checker for why job is failing. + `Pull Request 1213`_ +* Small enhancements in workflow inputs and outputs. + `Pull Request 1214`_ +* More small workflow tweaks. + `Pull Request 1216`_ +* Add Workflow editor UI for step labels. + `Pull Request 1251`_ +* Ease the grunt uglify process + (Thanks to `@erasche `__.) + `Pull Request 1238`_ +* Add beta run workflow form based on the newer tool form code. + `Pull Request 1249`_ +* During tool migrations, do not mess with galaxy_config_file if provided + (thanks to `@openlangrid `__ and `@nsoranzo `__.) + `Pull Request 1230`_, `Pull Request 1253`_ +* In the users API, properly return a boolean from has_requests + `Pull Request 1262`_ +* Extend the logging of tool dependency status changes + (thanks to `@nsoranzo `__.) + `Pull Request 1263`_ +* Remove history_options and options.mako (history options as a page). + `Pull Request 1271`_ +* Minor mail config cleanup + `Pull Request 1299`_ +* Replace uses of history.imp and history.copy web methods for API create + `Pull Request 1303`_ +* More tightening up of parameter validation during workflow stuff. + `Pull Request 1319`_ +* Show a more user-friendly error when the webserver port is blocked + (thanks to `@shano `__.) + `Pull Request 1320`_ +* Upgrade Paste to 2.0.2. + `Pull Request 1344`_ +* A series of small refactoring enabling use of certain Galaxy modules + a stand-alone Python library with minimal dependencies and Python 3 + compatibility. + `Pull Request 1350`_, `Pull Request 1351`_, `Pull Request 1352`_, + `Pull Request 1359`_, `Pull Request 1362`_, `Pull Request 1376`_, + `Pull Request 1413`_, `Pull Request 1427`_, `Pull Request 1363`_, + `Pull Request 1367`_, `Pull Request 1377`_, `Pull Request 1388`_, + `Pull Request 1448`_ +* Adding UUID support to directory_hash_id + (thanks to `@kellrott `__.) + `Pull Request 1397`_ +* Unify and abstract code for checking if file looks like a tool definition. + `Pull Request 1368`_ +* Added hashes to pip requirements file + (thanks to `@erasche `__.) + `Pull Request 1393`_ +* Interactive environment updates + (thanks to `@bgruening `__.) + `Pull Request 1399`_ +* Change scratchbook close icon. + `Pull Request 1425`_ +* Rename reports_wsgi.ini to reports.ini + (thanks to `@souravsingh `__.) + `Pull Request 1181`_ + +.. small_enhancement + +* Attempt to fix more transiently failing API tests. + `Pull Request 859`_, `Pull Request 865`_ +* Fix data library test case. + `Pull Request 898`_ +* Remove ``test_map_over_two_collections_legacy`` test case as it is obsolete. + `Pull Request 924`_ +* Version the testing-base docker image. + `Pull Request 938`_ +* Update casperjs functional tests. + `Pull Request 944`_ +* Fix the docker db client_encoding to not be ascii (default). + `Pull Request 952`_ +* Use the database temp directory to store the Mako template cache when + running framework tests. + `Pull Request 956`_ +* Rename ``lib/galaxy/main.py`` to scripts/galaxy-main + `Pull Request 994`_ +* Fix deferred dom removal. + `Pull Request 997`_ +* Options to more easily test esoteric tooling options. + `Pull Request 1014`_ +* Fix log statements and link to logger. + `Pull Request 1040`_ +* Add more data libraries API tests. + `Pull Request 1074`_ +* Remove upload unused function parameter + (thanks to `@einon `__.) + `Pull Request 1078`_ +* Update testing docker image. + `Pull Request 1083`_ +* Small tool and workflow refactorings. + `Pull Request 1097`_ +* Revise and fix waiting for tool tests. + `Pull Request 1119`_ +* Small Tool and Workflow Refactoring and Fixes + `Pull Request 1202`_ +* Wait on jobs and history in certain API test cases. + `Pull Request 1226`_ +* Fix qunit shim to match base_panels.mako shim. + `Pull Request 1233`_ +* Improved logging related tool test timeouts. + `Pull Request 1243`_ +* Refactor generic side workflow editor panel toward backbone. + `Pull Request 1247`_ +* Attempt to fix transiently failing tool test on Jenkins. + `Pull Request 1248`_ +* Set client_encoding for TS dockerized test db + `Pull Request 1276`_ +* Check for sessionStorage using a more cross-browser way. + `Pull Request 1279`_ +* Small API test improvements. + `Pull Request 1285`_ +* Enforce metrics related to moving toward modern client infrastructure. + `Pull Request 1292`_ +* Refactor tool stuff for generic model actions. + `Pull Request 1307`_ +* Remove workflow casperjs API test duplicating test coverage of API tests. + `Pull Request 1316`_ +* Refactor tool parsing handling toward reuse outside Galaxy. + `Pull Request 1349`_, `Pull Request 1353`_ +* Lint with Python 3 several modules. + `Pull Request 1354`_ +* Fix and potential fix for transiently failing tests. + `Pull Request 1401`_ +* Fix CasperJS tests. + `Pull Request 1438`_, `Pull Request 1439`_ +* Add a log.warn() if extracted file does not exist when changing permissions. + (thanks to `@nsoranzo `__.) + `Pull Request 939`_ + +Fixes +------------------------------- + +.. major_bug + +.. bug + +* Add check for ``HTTP_GX_SECRET`` + (thanks to `@golharam `__.) + `Pull Request 827`_ +* Test if parameter present in value to avoid index error in + tool state handling + (thanks to `@mvdbeek `__.) + `Pull Request 863`_ +* Bump version of sqlite3 in nodejs proxy + (thanks to `@erasche `__.) + `Pull Request 866`_ +* Expose API keys to admins under ``REMOTE_USER`` + (thanks to `@erasche `__.) + `Pull Request 872`_ +* Bug fix for tool shed repository API + (thanks to `@mvdbeek `__.) + `Pull Request 891`_ +* Add a workaround to return a proper error code during R + package installation + (thanks to `@bgruening `__.) + `Pull Request 892`_ +* Various Quota bug fixes. + `Pull Request 907`_ +* Always set 'tests' for a visualization plugin to avoid an attribute + error. + `Pull Request 908`_ +* Bug fix for condor runner changes made this release cycle + (thanks to `@erasche `__.) + `Pull Request 909`_ +* Change user preference datatype to text. + `Pull Request 916`_ +* Fix syntax of error parameter of ``tryCatch`` in ``setup_r_environment action`` + (thanks to `@nsoranzo `__.) + `Pull Request 929`_ +* Revise tool URL building. + `Pull Request 947`_ +* Fix for code checking if a file seems to a tool definition file + (thanks to `@erasche `__.) + `Pull Request 949`_ +* Fix base panels to include scripts as the last element of the body. + `Pull Request 969`_ +* Grid batch operation fixes. + `Pull Request 971`_ +* Fix extra files path URL problem. + (thanks to `@erasche `__.) + `Pull Request 991`_ +* Fixes broken env-var declarations for tools with weird chars in their names + (thanks to `@yhoogstrate `__.) + `Pull Request 1028`_ +* Added gitignore rules to ignore custom tool-data + (thanks to `@yhoogstrate `__.) + `Pull Request 1048`_ +* Fix import of history datasets into library. + (thanks to `@mvdbeek `__.) + `Pull Request 1049`_ +* Fix for reloading tools that have non-standard tool_ids/versions. + `Pull Request 1050`_ +* Improved encoding handling for Jobs. + `Pull Request 1052`_ +* Fix lped report output from converter. + `Pull Request 1069`_, `Pull Request 1070`_, `Pull Request 1072`_ +* Trivial: Replace unnecessary duplicated var check with 'else if' + (thanks to `@einon `__.) + `Pull Request 1073`_ +* Fix a bug in IEs when proxying the proxy. + `Pull Request 1076`_ +* Fix 500 error when attempting to update installed repository. + `Pull Request 1082`_ +* Resolve conflicting label CSS class for trackster. + `Pull Request 1086`_ +* Fix bug with referrer attribute type change in WebOb. + `Pull Request 1091`_ +* Fix API TS installation + (thanks to `@bgruening `__.) + `Pull Request 1094`_ +* Better error when tool shed repository directory is missing + (thanks to `@lparsons `__.) + `Pull Request 1107`_ +* Don't let ``$input`` hang cheetah evaluation. + `Pull Request 1117`_ +* Fix for re-installing an uninstalled TS repository with a dependency + (Thanks to `@gregvonkuster `__.) + `Pull Request 1154`_ +* Fix interface and usage of ``WorkflowModule.get_runtime_inputs``. + `Pull Request 1174`_ +* Add enhancements to the Galaxy repository install process + (thanks to `@mvdbeek `__.) + `Pull Request 1193`_ +* Tool shed fixes + (thanks to `@nsoranzo `__.) + `Pull Request 1200`_ +* Fix for updating tool parameter dicts when a new parameter has been added to + a section. + `Pull Request 1215`_ +* Replace the defunct readthedocs badge. + `Pull Request 1229`_ +* Export ``GALAXY_TEST_DBURI`` as ``GALAXY_CONFIG_OVERRIDE_DATABASE_CONNECTION`` + before installing wheels. + (thanks to `@nsoranzo `__.) + `Pull Request 1231`_ +* Fix passing of nginx_upload_path and ftp_upload_site. + `Pull Request 1250`_ +* Fixed indentation errors for reports app + (thanks to `@markiskander `__.) + `Pull Request 1259`_ +* Open select2 drop down on caret click. + `Pull Request 1298`_ +* Improved validation of tools during workflow execution. + `Pull Request 1302`_ +* Properly remove datasets from the filtered lists when pairing datasets + for the paired dataset list creator. + `Pull Request 1310`_ +* Update Kombu and AMQP wheels to fix problems with El Capitan's System + Integrity Protection. + `Pull Request 1327`_ +* Fix for creating workflow outputs on initial workflow upload. + `Pull Request 1330`_ +* Don't query on unencoded IDs for error form + (thanks to `@erasche `__.) + `Pull Request 1340`_ +* If ``GALAXY_SLOTS`` is defined in the environment, use it for the local runner. + `Pull Request 1346`_ +* Use both ``SLURM_NTASKS`` and ``SLURM_CPUS_PER_TASK`` to set ``GALAXY_SLOTS`` + (thanks to `@lparsons `__.) + `Pull Request 1347`_ +* Fix for loading workflows that have tool version / step upgrade messages. + `Pull Request 1348`_ +* Allow installation of different repositories with the same name in a single + request + (thanks to `@mvdbeek `__.) + `Pull Request 1366`_ +* Copy workflow objects when importing them. + `Pull Request 1474`_ +* Fix mime type when previewing certain tabular data. + `Pull Request 1498`_ +* Fix disabled CSS. + `Pull Request 1501`_ +* catch Exception and properly log errors + `Pull Request 1511`_ +* Fix for workflow validation problem introduced in 15.10. + `Pull Request 1536`_, + `Issue #1514 `__ +* Keep track of hidden datasets. + `Pull Request 1551`_ +* Force ``--skip-venv`` if we can detect that Python is Conda Python. + `Pull Request 1554`_ + +.. _iobio: http://iobio.io/ + +.. github_links + +.. _Pull Request 428: https://github.com/galaxyproject/galaxy/pull/428 +.. _Pull Request 564: https://github.com/galaxyproject/galaxy/pull/564 +.. _Pull Request 706: https://github.com/galaxyproject/galaxy/pull/706 +.. _Pull Request 805: https://github.com/galaxyproject/galaxy/pull/805 +.. _Pull Request 818: https://github.com/galaxyproject/galaxy/pull/818 +.. _Pull Request 827: https://github.com/galaxyproject/galaxy/pull/827 +.. _Pull Request 853: https://github.com/galaxyproject/galaxy/pull/853 +.. _Pull Request 856: https://github.com/galaxyproject/galaxy/pull/856 +.. _Pull Request 857: https://github.com/galaxyproject/galaxy/pull/857 +.. _Pull Request 859: https://github.com/galaxyproject/galaxy/pull/859 +.. _Pull Request 863: https://github.com/galaxyproject/galaxy/pull/863 +.. _Pull Request 864: https://github.com/galaxyproject/galaxy/pull/864 +.. _Pull Request 865: https://github.com/galaxyproject/galaxy/pull/865 +.. _Pull Request 866: https://github.com/galaxyproject/galaxy/pull/866 +.. _Pull Request 872: https://github.com/galaxyproject/galaxy/pull/872 +.. _Pull Request 874: https://github.com/galaxyproject/galaxy/pull/874 +.. _Pull Request 875: https://github.com/galaxyproject/galaxy/pull/875 +.. _Pull Request 876: https://github.com/galaxyproject/galaxy/pull/876 +.. _Pull Request 877: https://github.com/galaxyproject/galaxy/pull/877 +.. _Pull Request 881: https://github.com/galaxyproject/galaxy/pull/881 +.. _Pull Request 889: https://github.com/galaxyproject/galaxy/pull/889 +.. _Pull Request 891: https://github.com/galaxyproject/galaxy/pull/891 +.. _Pull Request 892: https://github.com/galaxyproject/galaxy/pull/892 +.. _Pull Request 893: https://github.com/galaxyproject/galaxy/pull/893 +.. _Pull Request 898: https://github.com/galaxyproject/galaxy/pull/898 +.. _Pull Request 901: https://github.com/galaxyproject/galaxy/pull/901 +.. _Pull Request 902: https://github.com/galaxyproject/galaxy/pull/902 +.. _Pull Request 905: https://github.com/galaxyproject/galaxy/pull/905 +.. _Pull Request 907: https://github.com/galaxyproject/galaxy/pull/907 +.. _Pull Request 908: https://github.com/galaxyproject/galaxy/pull/908 +.. _Pull Request 909: https://github.com/galaxyproject/galaxy/pull/909 +.. _Pull Request 912: https://github.com/galaxyproject/galaxy/pull/912 +.. _Pull Request 914: https://github.com/galaxyproject/galaxy/pull/914 +.. _Pull Request 916: https://github.com/galaxyproject/galaxy/pull/916 +.. _Pull Request 918: https://github.com/galaxyproject/galaxy/pull/918 +.. _Pull Request 924: https://github.com/galaxyproject/galaxy/pull/924 +.. _Pull Request 929: https://github.com/galaxyproject/galaxy/pull/929 +.. _Pull Request 938: https://github.com/galaxyproject/galaxy/pull/938 +.. _Pull Request 939: https://github.com/galaxyproject/galaxy/pull/939 +.. _Pull Request 942: https://github.com/galaxyproject/galaxy/pull/942 +.. _Pull Request 944: https://github.com/galaxyproject/galaxy/pull/944 +.. _Pull Request 947: https://github.com/galaxyproject/galaxy/pull/947 +.. _Pull Request 949: https://github.com/galaxyproject/galaxy/pull/949 +.. _Pull Request 950: https://github.com/galaxyproject/galaxy/pull/950 +.. _Pull Request 952: https://github.com/galaxyproject/galaxy/pull/952 +.. _Pull Request 955: https://github.com/galaxyproject/galaxy/pull/955 +.. _Pull Request 956: https://github.com/galaxyproject/galaxy/pull/956 +.. _Pull Request 959: https://github.com/galaxyproject/galaxy/pull/959 +.. _Pull Request 960: https://github.com/galaxyproject/galaxy/pull/960 +.. _Pull Request 969: https://github.com/galaxyproject/galaxy/pull/969 +.. _Pull Request 971: https://github.com/galaxyproject/galaxy/pull/971 +.. _Pull Request 985: https://github.com/galaxyproject/galaxy/pull/985 +.. _Pull Request 988: https://github.com/galaxyproject/galaxy/pull/988 +.. _Pull Request 989: https://github.com/galaxyproject/galaxy/pull/989 +.. _Pull Request 990: https://github.com/galaxyproject/galaxy/pull/990 +.. _Pull Request 991: https://github.com/galaxyproject/galaxy/pull/991 +.. _Pull Request 994: https://github.com/galaxyproject/galaxy/pull/994 +.. _Pull Request 995: https://github.com/galaxyproject/galaxy/pull/995 +.. _Pull Request 996: https://github.com/galaxyproject/galaxy/pull/996 +.. _Pull Request 997: https://github.com/galaxyproject/galaxy/pull/997 +.. _Pull Request 1004: https://github.com/galaxyproject/galaxy/pull/1004 +.. _Pull Request 1006: https://github.com/galaxyproject/galaxy/pull/1006 +.. _Pull Request 1010: https://github.com/galaxyproject/galaxy/pull/1010 +.. _Pull Request 1011: https://github.com/galaxyproject/galaxy/pull/1011 +.. _Pull Request 1012: https://github.com/galaxyproject/galaxy/pull/1012 +.. _Pull Request 1013: https://github.com/galaxyproject/galaxy/pull/1013 +.. _Pull Request 1014: https://github.com/galaxyproject/galaxy/pull/1014 +.. _Pull Request 1017: https://github.com/galaxyproject/galaxy/pull/1017 +.. _Pull Request 1018: https://github.com/galaxyproject/galaxy/pull/1018 +.. _Pull Request 1019: https://github.com/galaxyproject/galaxy/pull/1019 +.. _Pull Request 1020: https://github.com/galaxyproject/galaxy/pull/1020 +.. _Pull Request 1025: https://github.com/galaxyproject/galaxy/pull/1025 +.. _Pull Request 1028: https://github.com/galaxyproject/galaxy/pull/1028 +.. _Pull Request 1033: https://github.com/galaxyproject/galaxy/pull/1033 +.. _Pull Request 1037: https://github.com/galaxyproject/galaxy/pull/1037 +.. _Pull Request 1040: https://github.com/galaxyproject/galaxy/pull/1040 +.. _Pull Request 1048: https://github.com/galaxyproject/galaxy/pull/1048 +.. _Pull Request 1049: https://github.com/galaxyproject/galaxy/pull/1049 +.. _Pull Request 1050: https://github.com/galaxyproject/galaxy/pull/1050 +.. _Pull Request 1052: https://github.com/galaxyproject/galaxy/pull/1052 +.. _Pull Request 1063: https://github.com/galaxyproject/galaxy/pull/1063 +.. _Pull Request 1066: https://github.com/galaxyproject/galaxy/pull/1066 +.. _Pull Request 1067: https://github.com/galaxyproject/galaxy/pull/1067 +.. _Pull Request 1069: https://github.com/galaxyproject/galaxy/pull/1069 +.. _Pull Request 1070: https://github.com/galaxyproject/galaxy/pull/1070 +.. _Pull Request 1072: https://github.com/galaxyproject/galaxy/pull/1072 +.. _Pull Request 1073: https://github.com/galaxyproject/galaxy/pull/1073 +.. _Pull Request 1074: https://github.com/galaxyproject/galaxy/pull/1074 +.. _Pull Request 1076: https://github.com/galaxyproject/galaxy/pull/1076 +.. _Pull Request 1078: https://github.com/galaxyproject/galaxy/pull/1078 +.. _Pull Request 1082: https://github.com/galaxyproject/galaxy/pull/1082 +.. _Pull Request 1083: https://github.com/galaxyproject/galaxy/pull/1083 +.. _Pull Request 1086: https://github.com/galaxyproject/galaxy/pull/1086 +.. _Pull Request 1091: https://github.com/galaxyproject/galaxy/pull/1091 +.. _Pull Request 1094: https://github.com/galaxyproject/galaxy/pull/1094 +.. _Pull Request 1095: https://github.com/galaxyproject/galaxy/pull/1095 +.. _Pull Request 1096: https://github.com/galaxyproject/galaxy/pull/1096 +.. _Pull Request 1097: https://github.com/galaxyproject/galaxy/pull/1097 +.. _Pull Request 1098: https://github.com/galaxyproject/galaxy/pull/1098 +.. _Pull Request 1101: https://github.com/galaxyproject/galaxy/pull/1101 +.. _Pull Request 1105: https://github.com/galaxyproject/galaxy/pull/1105 +.. _Pull Request 1107: https://github.com/galaxyproject/galaxy/pull/1107 +.. _Pull Request 1108: https://github.com/galaxyproject/galaxy/pull/1108 +.. _Pull Request 1111: https://github.com/galaxyproject/galaxy/pull/1111 +.. _Pull Request 1113: https://github.com/galaxyproject/galaxy/pull/1113 +.. _Pull Request 1117: https://github.com/galaxyproject/galaxy/pull/1117 +.. _Pull Request 1119: https://github.com/galaxyproject/galaxy/pull/1119 +.. _Pull Request 1123: https://github.com/galaxyproject/galaxy/pull/1123 +.. _Pull Request 1126: https://github.com/galaxyproject/galaxy/pull/1126 +.. _Pull Request 1130: https://github.com/galaxyproject/galaxy/pull/1130 +.. _Pull Request 1131: https://github.com/galaxyproject/galaxy/pull/1131 +.. _Pull Request 1137: https://github.com/galaxyproject/galaxy/pull/1137 +.. _Pull Request 1142: https://github.com/galaxyproject/galaxy/pull/1142 +.. _Pull Request 1144: https://github.com/galaxyproject/galaxy/pull/1144 +.. _Pull Request 1153: https://github.com/galaxyproject/galaxy/pull/1153 +.. _Pull Request 1154: https://github.com/galaxyproject/galaxy/pull/1154 +.. _Pull Request 1155: https://github.com/galaxyproject/galaxy/pull/1155 +.. _Pull Request 1157: https://github.com/galaxyproject/galaxy/pull/1157 +.. _Pull Request 1159: https://github.com/galaxyproject/galaxy/pull/1159 +.. _Pull Request 1160: https://github.com/galaxyproject/galaxy/pull/1160 +.. _Pull Request 1163: https://github.com/galaxyproject/galaxy/pull/1163 +.. _Pull Request 1166: https://github.com/galaxyproject/galaxy/pull/1166 +.. _Pull Request 1174: https://github.com/galaxyproject/galaxy/pull/1174 +.. _Pull Request 1176: https://github.com/galaxyproject/galaxy/pull/1176 +.. _Pull Request 1178: https://github.com/galaxyproject/galaxy/pull/1178 +.. _Pull Request 1179: https://github.com/galaxyproject/galaxy/pull/1179 +.. _Pull Request 1181: https://github.com/galaxyproject/galaxy/pull/1181 +.. _Pull Request 1182: https://github.com/galaxyproject/galaxy/pull/1182 +.. _Pull Request 1184: https://github.com/galaxyproject/galaxy/pull/1184 +.. _Pull Request 1193: https://github.com/galaxyproject/galaxy/pull/1193 +.. _Pull Request 1198: https://github.com/galaxyproject/galaxy/pull/1198 +.. _Pull Request 1199: https://github.com/galaxyproject/galaxy/pull/1199 +.. _Pull Request 1200: https://github.com/galaxyproject/galaxy/pull/1200 +.. _Pull Request 1202: https://github.com/galaxyproject/galaxy/pull/1202 +.. _Pull Request 1209: https://github.com/galaxyproject/galaxy/pull/1209 +.. _Pull Request 1211: https://github.com/galaxyproject/galaxy/pull/1211 +.. _Pull Request 1212: https://github.com/galaxyproject/galaxy/pull/1212 +.. _Pull Request 1213: https://github.com/galaxyproject/galaxy/pull/1213 +.. _Pull Request 1214: https://github.com/galaxyproject/galaxy/pull/1214 +.. _Pull Request 1215: https://github.com/galaxyproject/galaxy/pull/1215 +.. _Pull Request 1216: https://github.com/galaxyproject/galaxy/pull/1216 +.. _Pull Request 1217: https://github.com/galaxyproject/galaxy/pull/1217 +.. _Pull Request 1221: https://github.com/galaxyproject/galaxy/pull/1221 +.. _Pull Request 1226: https://github.com/galaxyproject/galaxy/pull/1226 +.. _Pull Request 1229: https://github.com/galaxyproject/galaxy/pull/1229 +.. _Pull Request 1230: https://github.com/galaxyproject/galaxy/pull/1230 +.. _Pull Request 1231: https://github.com/galaxyproject/galaxy/pull/1231 +.. _Pull Request 1233: https://github.com/galaxyproject/galaxy/pull/1233 +.. _Pull Request 1238: https://github.com/galaxyproject/galaxy/pull/1238 +.. _Pull Request 1243: https://github.com/galaxyproject/galaxy/pull/1243 +.. _Pull Request 1247: https://github.com/galaxyproject/galaxy/pull/1247 +.. _Pull Request 1248: https://github.com/galaxyproject/galaxy/pull/1248 +.. _Pull Request 1249: https://github.com/galaxyproject/galaxy/pull/1249 +.. _Pull Request 1250: https://github.com/galaxyproject/galaxy/pull/1250 +.. _Pull Request 1251: https://github.com/galaxyproject/galaxy/pull/1251 +.. _Pull Request 1253: https://github.com/galaxyproject/galaxy/pull/1253 +.. _Pull Request 1254: https://github.com/galaxyproject/galaxy/pull/1254 +.. _Pull Request 1259: https://github.com/galaxyproject/galaxy/pull/1259 +.. _Pull Request 1261: https://github.com/galaxyproject/galaxy/pull/1261 +.. _Pull Request 1262: https://github.com/galaxyproject/galaxy/pull/1262 +.. _Pull Request 1263: https://github.com/galaxyproject/galaxy/pull/1263 +.. _Pull Request 1271: https://github.com/galaxyproject/galaxy/pull/1271 +.. _Pull Request 1276: https://github.com/galaxyproject/galaxy/pull/1276 +.. _Pull Request 1277: https://github.com/galaxyproject/galaxy/pull/1277 +.. _Pull Request 1279: https://github.com/galaxyproject/galaxy/pull/1279 +.. _Pull Request 1285: https://github.com/galaxyproject/galaxy/pull/1285 +.. _Pull Request 1286: https://github.com/galaxyproject/galaxy/pull/1286 +.. _Pull Request 1292: https://github.com/galaxyproject/galaxy/pull/1292 +.. _Pull Request 1296: https://github.com/galaxyproject/galaxy/pull/1296 +.. _Pull Request 1298: https://github.com/galaxyproject/galaxy/pull/1298 +.. _Pull Request 1299: https://github.com/galaxyproject/galaxy/pull/1299 +.. _Pull Request 1302: https://github.com/galaxyproject/galaxy/pull/1302 +.. _Pull Request 1303: https://github.com/galaxyproject/galaxy/pull/1303 +.. _Pull Request 1306: https://github.com/galaxyproject/galaxy/pull/1306 +.. _Pull Request 1307: https://github.com/galaxyproject/galaxy/pull/1307 +.. _Pull Request 1308: https://github.com/galaxyproject/galaxy/pull/1308 +.. _Pull Request 1310: https://github.com/galaxyproject/galaxy/pull/1310 +.. _Pull Request 1316: https://github.com/galaxyproject/galaxy/pull/1316 +.. _Pull Request 1319: https://github.com/galaxyproject/galaxy/pull/1319 +.. _Pull Request 1320: https://github.com/galaxyproject/galaxy/pull/1320 +.. _Pull Request 1327: https://github.com/galaxyproject/galaxy/pull/1327 +.. _Pull Request 1330: https://github.com/galaxyproject/galaxy/pull/1330 +.. _Pull Request 1340: https://github.com/galaxyproject/galaxy/pull/1340 +.. _Pull Request 1343: https://github.com/galaxyproject/galaxy/pull/1343 +.. _Pull Request 1344: https://github.com/galaxyproject/galaxy/pull/1344 +.. _Pull Request 1345: https://github.com/galaxyproject/galaxy/pull/1345 +.. _Pull Request 1346: https://github.com/galaxyproject/galaxy/pull/1346 +.. _Pull Request 1347: https://github.com/galaxyproject/galaxy/pull/1347 +.. _Pull Request 1348: https://github.com/galaxyproject/galaxy/pull/1348 +.. _Pull Request 1349: https://github.com/galaxyproject/galaxy/pull/1349 +.. _Pull Request 1350: https://github.com/galaxyproject/galaxy/pull/1350 +.. _Pull Request 1351: https://github.com/galaxyproject/galaxy/pull/1351 +.. _Pull Request 1352: https://github.com/galaxyproject/galaxy/pull/1352 +.. _Pull Request 1353: https://github.com/galaxyproject/galaxy/pull/1353 +.. _Pull Request 1354: https://github.com/galaxyproject/galaxy/pull/1354 +.. _Pull Request 1359: https://github.com/galaxyproject/galaxy/pull/1359 +.. _Pull Request 1362: https://github.com/galaxyproject/galaxy/pull/1362 +.. _Pull Request 1363: https://github.com/galaxyproject/galaxy/pull/1363 +.. _Pull Request 1366: https://github.com/galaxyproject/galaxy/pull/1366 +.. _Pull Request 1367: https://github.com/galaxyproject/galaxy/pull/1367 +.. _Pull Request 1368: https://github.com/galaxyproject/galaxy/pull/1368 +.. _Pull Request 1376: https://github.com/galaxyproject/galaxy/pull/1376 +.. _Pull Request 1377: https://github.com/galaxyproject/galaxy/pull/1377 +.. _Pull Request 1385: https://github.com/galaxyproject/galaxy/pull/1385 +.. _Pull Request 1388: https://github.com/galaxyproject/galaxy/pull/1388 +.. _Pull Request 1389: https://github.com/galaxyproject/galaxy/pull/1389 +.. _Pull Request 1393: https://github.com/galaxyproject/galaxy/pull/1393 +.. _Pull Request 1397: https://github.com/galaxyproject/galaxy/pull/1397 +.. _Pull Request 1398: https://github.com/galaxyproject/galaxy/pull/1398 +.. _Pull Request 1399: https://github.com/galaxyproject/galaxy/pull/1399 +.. _Pull Request 1400: https://github.com/galaxyproject/galaxy/pull/1400 +.. _Pull Request 1401: https://github.com/galaxyproject/galaxy/pull/1401 +.. _Pull Request 1405: https://github.com/galaxyproject/galaxy/pull/1405 +.. _Pull Request 1407: https://github.com/galaxyproject/galaxy/pull/1407 +.. _Pull Request 1409: https://github.com/galaxyproject/galaxy/pull/1409 +.. _Pull Request 1412: https://github.com/galaxyproject/galaxy/pull/1412 +.. _Pull Request 1413: https://github.com/galaxyproject/galaxy/pull/1413 +.. _Pull Request 1414: https://github.com/galaxyproject/galaxy/pull/1414 +.. _Pull Request 1415: https://github.com/galaxyproject/galaxy/pull/1415 +.. _Pull Request 1421: https://github.com/galaxyproject/galaxy/pull/1421 +.. _Pull Request 1422: https://github.com/galaxyproject/galaxy/pull/1422 +.. _Pull Request 1424: https://github.com/galaxyproject/galaxy/pull/1424 +.. _Pull Request 1425: https://github.com/galaxyproject/galaxy/pull/1425 +.. _Pull Request 1427: https://github.com/galaxyproject/galaxy/pull/1427 +.. _Pull Request 1430: https://github.com/galaxyproject/galaxy/pull/1430 +.. _Pull Request 1438: https://github.com/galaxyproject/galaxy/pull/1438 +.. _Pull Request 1439: https://github.com/galaxyproject/galaxy/pull/1439 +.. _Pull Request 1448: https://github.com/galaxyproject/galaxy/pull/1448 +.. _Pull Request 1464: https://github.com/galaxyproject/galaxy/pull/1464 +.. _Pull Request 1473: https://github.com/galaxyproject/galaxy/pull/1473 +.. _Pull Request 1474: https://github.com/galaxyproject/galaxy/pull/1474 +.. _Pull Request 1485: https://github.com/galaxyproject/galaxy/pull/1485 +.. _Pull Request 1487: https://github.com/galaxyproject/galaxy/pull/1487 +.. _Pull Request 1494: https://github.com/galaxyproject/galaxy/pull/1494 +.. _Pull Request 1498: https://github.com/galaxyproject/galaxy/pull/1498 +.. _Pull Request 1501: https://github.com/galaxyproject/galaxy/pull/1501 +.. _Pull Request 1511: https://github.com/galaxyproject/galaxy/pull/1511 +.. _Pull Request 1527: https://github.com/galaxyproject/galaxy/pull/1527 +.. _Pull Request 1536: https://github.com/galaxyproject/galaxy/pull/1536 +.. _Pull Request 1551: https://github.com/galaxyproject/galaxy/pull/1551 +.. _Pull Request 1554: https://github.com/galaxyproject/galaxy/pull/1554 +.. _Pull Request 1558: https://github.com/galaxyproject/galaxy/pull/1558 diff --git a/doc/source/releases/16.01_announce.rst b/doc/source/releases/16.01_announce.rst index bcd1bfe8fb4..42077012657 100644 --- a/doc/source/releases/16.01_announce.rst +++ b/doc/source/releases/16.01_announce.rst @@ -3,8 +3,76 @@ January 2016 Galaxy Release (v 16.01) =========================================================== +.. include:: _header.rst -Schedule +Highlights =========================================================== - * Planned Freeze Date: 2016-01-04 - * Planned Release Date: 2016-01-25 + +**Interactive Tours** + The interactive tours framework allows developers and deployers to build + interactive tutorials for users superimposed on the actual Galaxy web front + end. Unlike video tutorials, these will not become stale and are truly + interactive (allowing users to actually navigate and interact with Galaxy). + Galaxy 16.01 ships with two example tours and new ones can easily be added by + creating a small YAML file describing the tour. Try the `Galaxy UI tour + `__ on Main. + +**Wheels** + Galaxy's Python dependencies have traditionally been distributed as eggs_ using + custom dependency management code to enable Galaxy to distribute binary + dependencies (enabling quick downloads and minimal system requirements). With + this release all of that infrastructure has been replaced with a modern Python + infrastructure based on pip_ and wheels_. + Work done as part of this to enable binary dependencies on Linux has been + included with the recently released pip_ 8. + + Detailed documentation on these changes and their impact under a variety of + Galaxy deployment scenarios can be found in the :ref:`framework-dependencies` + section of the Admin documentation. + +**Nested Workflows** + Workflows may now run other workflows as a single abstract step in the parent + workflow. This allows for reusing or subworkflows in your analyses. + +`Github `__ +=========================================================== + +New + .. code-block:: shell + + % git clone -b master https://github.com/galaxyproject/galaxy.git + +Update to latest stable release + .. code-block:: shell + + % git checkout master && pull --ff-only origin master + +Update to exact version + .. code-block:: shell + + % git checkout v16.01 + + +`BitBucket `__ +=========================================================== + +Upgrade + .. code-block:: shell + + % hg pull + % hg update latest_16.01 + + +See `our wiki `__ for additional details regarding the source code locations. + +.. _eggs: https://pythonhosted.org/setuptools/formats.html +.. _wheels: http://pythonwheels.com/ +.. _pip: https://pip.pypa.io/en/stable/ + +Release Notes +=========================================================== + +.. include:: 16.01.rst + :start-after: announce_start + +.. include:: _thanks.rst diff --git a/doc/source/releases/16.04_announce.rst b/doc/source/releases/16.04_announce.rst new file mode 100644 index 00000000000..981d84aeb7c --- /dev/null +++ b/doc/source/releases/16.04_announce.rst @@ -0,0 +1,10 @@ + +=========================================================== +April 2016 Galaxy Release (v 16.04) +=========================================================== + + +Schedule +=========================================================== + * Planned Freeze Date: 2016-04-04 + * Planned Release Date: 2016-04-25 diff --git a/doc/source/releases/index.rst b/doc/source/releases/index.rst index 784af1a172b..42b7250dd40 100644 --- a/doc/source/releases/index.rst +++ b/doc/source/releases/index.rst @@ -4,6 +4,7 @@ Releases .. toctree:: :maxdepth: 1 + 16.01_announce 15.10_announce 15.07_announce 15.05_announce diff --git a/lib/galaxy/app.py b/lib/galaxy/app.py index 607118a83bc..1aa2c2c9e8a 100644 --- a/lib/galaxy/app.py +++ b/lib/galaxy/app.py @@ -1,8 +1,17 @@ from __future__ import absolute_import +import logging +import signal import sys +import time import os -import time +try: + from uwsgidecorators import postfork +except: + def pf_dec(func): + return func + postfork = pf_dec + from galaxy import config, jobs import galaxy.model import galaxy.security @@ -21,9 +30,10 @@ from galaxy.tools.data_manager.manager import DataManagers from galaxy.jobs import metrics as job_metrics from galaxy.web.proxy import ProxyManager from galaxy.queue_worker import GalaxyQueueWorker +from galaxy.util import heartbeat from tool_shed.galaxy_install import update_repository_manager -import logging + log = logging.getLogger( __name__ ) app = None @@ -127,15 +137,24 @@ class UniverseApplication( object, config.ConfiguresGalaxyMixin ): self.openid_providers = OpenIDProviders.from_file( self.config.openid_config_file ) else: self.openid_providers = OpenIDProviders() - # Start the heartbeat process if configured and available from galaxy import auth self.auth_manager = auth.AuthManager( self ) + # Start the heartbeat process if configured and available (wait until + # postfork if using uWSGI) if self.config.use_heartbeat: - from galaxy.util import heartbeat if heartbeat.Heartbeat: - self.heartbeat = heartbeat.Heartbeat( fname=self.config.heartbeat_log ) + self.heartbeat = heartbeat.Heartbeat( + self.config, + period=self.config.heartbeat_interval, + fname=self.config.heartbeat_log + ) self.heartbeat.daemon = True - self.heartbeat.start() + + @postfork + def _start(): + self.heartbeat.start() + if not config.process_is_uwsgi: + _start() # Transfer manager client if self.config.get_bool( 'enable_beta_job_managers', False ): from galaxy.jobs import transfer_manager @@ -157,6 +176,12 @@ class UniverseApplication( object, config.ConfiguresGalaxyMixin ): # Must be initialized after job_config. self.workflow_scheduling_manager = scheduling_manager.WorkflowSchedulingManager( self ) + # Configure handling of signals + handlers = {} + if self.heartbeat: + handlers[signal.SIGUSR1] = self.heartbeat.dump_signal_handler + self._configure_signal_handlers( handlers ) + self.model.engine.dispose() self.server_starttime = int(time.time()) # used for cachebusting diff --git a/lib/galaxy/config.py b/lib/galaxy/config.py index 76d7e7935b4..a422ccf2154 100644 --- a/lib/galaxy/config.py +++ b/lib/galaxy/config.py @@ -9,6 +9,7 @@ import logging import logging.config import os import re +import signal import socket import string import sys @@ -255,6 +256,8 @@ class Configuration( object ): self.external_chown_script = kwargs.get('external_chown_script', None) self.environment_setup_file = kwargs.get( 'environment_setup_file', None ) self.use_heartbeat = string_as_bool( kwargs.get( 'use_heartbeat', 'False' ) ) + self.heartbeat_interval = int( kwargs.get( 'heartbeat_interval', 20 ) ) + self.heartbeat_log = kwargs.get( 'heartbeat_log', None ) self.log_actions = string_as_bool( kwargs.get( 'log_actions', 'False' ) ) self.log_events = string_as_bool( kwargs.get( 'log_events', 'False' ) ) self.sanitize_all_html = string_as_bool( kwargs.get( 'sanitize_all_html', True ) ) @@ -306,7 +309,7 @@ class Configuration( object ): self.use_tool_dependencies = True else: self.tool_dependency_dir = None - self.use_tool_dependencies = False + self.use_tool_dependencies = os.path.exists(self.dependency_resolvers_config_file) # Configuration options for taking advantage of nginx features self.upstream_gzip = string_as_bool( kwargs.get( 'upstream_gzip', False ) ) self.apache_xsendfile = string_as_bool( kwargs.get( 'apache_xsendfile', False ) ) @@ -351,8 +354,10 @@ class Configuration( object ): self.config_file = global_conf['__file__'] global_conf_parser.read(global_conf['__file__']) # Heartbeat log file name override - if global_conf is not None: - self.heartbeat_log = global_conf.get( 'heartbeat_log', 'heartbeat.log' ) + if global_conf is not None and 'heartbeat_log' in global_conf: + self.heartbeat_log = global_conf['heartbeat_log'] + if self.heartbeat_log is None: + self.heartbeat_log = 'heartbeat_{server_name}.log' # Determine which 'server:' this is self.server_name = 'main' for arg in sys.argv: @@ -912,3 +917,7 @@ class ConfiguresGalaxyMixin: install_db_engine_options = self.config.install_database_engine_options self.install_model = install_mapping.init( install_db_url, install_db_engine_options ) + + def _configure_signal_handlers( self, handlers ): + for sig, handler in handlers.items(): + signal.signal( sig, handler ) diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index 65bb18e6f47..c3979c5dd6e 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -339,7 +339,7 @@ class Bam( Binary ): os.unlink( stderr_name ) # Now use pysam with BAI index to determine additional metadata try: - bam_file = pysam.AlignmentFile( filename=dataset.file_name, mode='rb', index_filename=index_file.file_name ) + bam_file = pysam.AlignmentFile( dataset.file_name, mode='rb', index_filename=index_file.file_name ) dataset.metadata.reference_names = list( bam_file.references ) dataset.metadata.reference_lengths = list( bam_file.lengths ) dataset.metadata.bam_header = bam_file.header diff --git a/lib/galaxy/datatypes/data.py b/lib/galaxy/datatypes/data.py index 945065c4371..f74227c47e5 100644 --- a/lib/galaxy/datatypes/data.py +++ b/lib/galaxy/datatypes/data.py @@ -742,13 +742,13 @@ class Text( Data ): data_lines += 1 return data_lines - def set_peek( self, dataset, line_count=None, is_multi_byte=False, WIDTH=256, skipchars=None ): + def set_peek( self, dataset, line_count=None, is_multi_byte=False, WIDTH=256, skipchars=None, line_wrap=True ): """ Set the peek. This method is used by various subclasses of Text. """ if not dataset.dataset.purged: # The file must exist on disk for the get_file_peek() method - dataset.peek = get_file_peek( dataset.file_name, is_multi_byte=is_multi_byte, WIDTH=WIDTH, skipchars=skipchars ) + dataset.peek = get_file_peek( dataset.file_name, is_multi_byte=is_multi_byte, WIDTH=WIDTH, skipchars=skipchars, line_wrap=line_wrap ) if line_count is None: # See if line_count is stored in the metadata if dataset.metadata.data_lines: @@ -950,7 +950,7 @@ def get_test_fname( fname ): return full_path -def get_file_peek( file_name, is_multi_byte=False, WIDTH=256, LINE_COUNT=5, skipchars=None ): +def get_file_peek( file_name, is_multi_byte=False, WIDTH=256, LINE_COUNT=5, skipchars=None, line_wrap=True ): """ Returns the first LINE_COUNT lines wrapped to WIDTH @@ -971,8 +971,9 @@ def get_file_peek( file_name, is_multi_byte=False, WIDTH=256, LINE_COUNT=5, skip file_type = None data_checked = False temp = open( file_name, "U" ) + last_line = '' while count <= LINE_COUNT: - line = temp.readline( WIDTH ) + line = last_line + temp.readline( WIDTH - len( last_line ) ) if line and not is_multi_byte and not data_checked: # See if we have a compressed or binary file if line[0:2] == util.gzip_magic: @@ -986,6 +987,17 @@ def get_file_peek( file_name, is_multi_byte=False, WIDTH=256, LINE_COUNT=5, skip data_checked = True if file_type in [ 'gzipped', 'binary' ]: break + if not line_wrap: + if '\n' in line: + i = line.index( '\n' ) + last_line = line[i:] + line = line[:i] + else: + last_line = '' + while True: + i = temp.read(1) + if not i or i == '\n': + break skip_line = False for skipchar in skipchars: if line.startswith( skipchar ): diff --git a/lib/galaxy/datatypes/interval.py b/lib/galaxy/datatypes/interval.py index c2a35f3efba..13dce8f8f3e 100644 --- a/lib/galaxy/datatypes/interval.py +++ b/lib/galaxy/datatypes/interval.py @@ -1519,9 +1519,12 @@ class ScIdx(Tabular): line = line.strip() # The first line is always a comment like this: # 2015-11-23 20:18:56.51;input.bam;READ1 - if line.startswith('#'): - count += 1 - continue + if count == 0: + if line.startswith('#'): + count += 1 + continue + else: + return False if not line: # EOF if count > 1: diff --git a/lib/galaxy/datatypes/tabular.py b/lib/galaxy/datatypes/tabular.py index c9161747af1..ebc10108878 100644 --- a/lib/galaxy/datatypes/tabular.py +++ b/lib/galaxy/datatypes/tabular.py @@ -39,7 +39,7 @@ class TabularData( data.Text ): MetadataElement( name="delimiter", default='\t', desc="Data delimiter", readonly=True, visible=False, optional=True, no_value=[] ) def set_peek( self, dataset, line_count=None, is_multi_byte=False, WIDTH=256, skipchars=None ): - super(TabularData, self).set_peek( dataset, line_count=line_count, is_multi_byte=is_multi_byte, WIDTH=WIDTH, skipchars=skipchars) + super(TabularData, self).set_peek( dataset, line_count=line_count, is_multi_byte=is_multi_byte, WIDTH=WIDTH, skipchars=skipchars, line_wrap=False ) if dataset.metadata.comment_lines: dataset.blurb = "%s, %s comments" % ( dataset.blurb, util.commaify( str( dataset.metadata.comment_lines ) ) ) @@ -180,6 +180,9 @@ class TabularData( data.Text ): out.append( '%s' % escape( line ) ) elif line: elems = line.split( dataset.metadata.delimiter ) + # pad shortened elems, since lines could have been truncated by width + if len( elems ) < columns: + elems.extend( [''] * ( columns - len( elems ) ) ) # we may have an invalid comment line or invalid data if len( elems ) != columns: out.append( '%s' % escape( line ) ) diff --git a/lib/galaxy/dependencies/conda-environment.txt b/lib/galaxy/dependencies/conda-environment.txt new file mode 100644 index 00000000000..31ad2df1539 --- /dev/null +++ b/lib/galaxy/dependencies/conda-environment.txt @@ -0,0 +1,81 @@ +# This file can be used with conda's `--file` option to install as many of +# Galaxy's dependencies as possible using Conda. The file +# conda-requirements.txt in this directory can be used to install the remaining +# missing dependencies using pip: +# +# $ conda create --name galaxy --file lib/galaxy/dependencies/conda-environment.txt +# $ source activate galaxy +# $ pip install --index-url=https://wheels.galaxyproject.org/simple/ -r lib/galaxy/dependencies/requirements.txt +# +# or if you already have an environment: +# +# $ source activate galaxy +# $ conda install --file lib/galaxy/dependencies/conda-environment.txt +# $ pip install --index-url=https://wheels.galaxyproject.org/simple/ -r lib/galaxy/dependencies/requirements.txt +# +# More details are available in the administration section of the Galaxy +# documentation at https://galaxy.readthedocs.org/ + +# packages with C extensions +# numpy should be installed before bx to enable extra features in bx +numpy +bx-python +MarkupSafe +PyYAML +SQLAlchemy +# Mercurial >= 3.5 changed the bundle format, which breaks hg push of TS repositories +mercurial<3.5 +pycrypto + +# Install python_lzo if you want to support indexed access to lzo-compressed +# locally cached maf files via bx-python +#python_lzo + +# pure Python packages +Paste +PasteDeploy +docutils +#wchartype +repoze.lru +Routes +WebOb +#WebHelpers +Mako +pytz +Babel +#Beaker + +# Cheetah and dependencies +Cheetah + +# BioBlend and dependencies +bioblend +boto +requests + +# kombu and dependencies +#kombu + +# sqlalchemy-migrate and dependencies +#sqlalchemy-migrate +decorator +#Tempita +sqlparse +six +#Parsley +nose +#SVGFig + +# Fabric and dependencies +Fabric + +# We still pin these dependencies because of modifications to the upstream packages + +# Can't use Whoosh latest due to a bug but need to backport a bugfix from a +# newer release. +# +# https://bitbucket.org/mchaput/whoosh/pull-requests/50/fix-lru-thread-safety/diff +#Whoosh==2.4.1+gx1 + +# Flexible BAM index naming +#pysam==0.8.4+gx1 diff --git a/lib/galaxy/dependencies/pinned-hashed-requirements.txt b/lib/galaxy/dependencies/pinned-hashed-requirements.txt index 3f4516b2fa5..d35ad28c5db 100644 --- a/lib/galaxy/dependencies/pinned-hashed-requirements.txt +++ b/lib/galaxy/dependencies/pinned-hashed-requirements.txt @@ -112,7 +112,8 @@ Cheetah==2.4.4 --hash:sha256=24cf67789b7a9f1e0a55cba266b6aad16e97aaf25810fd6f2f Markdown==2.6.3 --hash:sha256=59417f5eb3dace08309d81e48fc903217d12d66677f367674b22c317b0f04284 # BioBlend and dependencies -bioblend==0.6.1 --hash:sha256=f5eea1f6c31264ef7bfab8c70deac2b9229a10e5c56508a6542f5643ad9e2a5b +bioblend==0.7.0 --hash:sha256=cb1068c0b05ca069a550ecbbf19014631bb6570b565387de15876c44478ee07d \ + --hash:sha256=db7dc929199837b6d9a502fcf9d537a57fdee605ca45cd1548583a5eccc648a6 boto==2.38.0 --hash:sha256=1760584368da0c3861dbed448dcb439334ce831044262a5ca5188167f8bba585 requests==2.8.1 --hash:sha256=70e285122c97b1d104824482cb929246b2b8a2b9858897c4fab3acec83f1e03c requests-toolbelt==0.4.0 --hash:sha256=94694e32845b84ed2186fdf56219b949582ebd08dc3abc55c0549958f2029643 @@ -149,22 +150,23 @@ ecdsa==0.13 --hash:sha256=89f149066e4a1e419892cef830fd0db85c227d5d427f7075422ace Whoosh==2.4.1+gx1 --hash:sha256=98897e796c048810d71f7f4fc174914869f1b3b77f44e5a19a5e649b078d5e0e \ --hash:sha256=5ec3c22e782c86e981fab62a24ac9feea09e42c43b763a6493c78b82a3b6e3fd -# Flexible BAM index naming -pysam==0.8.3+gx1 --hash:sha256=020aa9101579ac1e82a194fdb08f49f517c634911409e9a2cda4d0a1c72a8c7c \ - --hash:sha256=1a3d86849b9bd962979b65aaa9af236030dcc1db40296c88d2aa436a0c9df79b \ - --hash:sha256=0fc55fb252eb0e7914679e9e22672fdc6a1e09804cbcc62769f004ebbed9b4c1 \ - --hash:sha256=dde8f5037661d7be42e2c3f50c01566dcaedbf2f88133a3bb50c6ae3f75e6e13 \ - --hash:sha256=7809fd926a071519c0a2b220346e45c094577877e5b2adba2903e7b52490c736 \ - --hash:sha256=021070ed70a89e19eee6a989933d69d0bdb076c02342e2987bb5fab43f63ad17 \ - --hash:sha256=374ea868bf64daa4665e8743db1be2e88712953a923020225f57a589b790537c \ - --hash:sha256=9884b6904face1977649847261e7c984120adaa169a0d62e07820a44c71e18c5 \ - --hash:sha256=873b81951e9d572b53ab4c7a0d3ef915f7d0e1db5f75603d8861cf1d3810491e \ - --hash:sha256=37d0ba3880b5a517f354281159f6751f6f9f1c1074ea48bf5f4c424e6ec488dd \ - --hash:sha256=db99cb20cb5e07998b2acfd29e34c367ef408a184a7b3150586212175a0719bf \ - --hash:sha256=a1fcb2a6459b799bff7a046e190452b151c5985dea404eaee82bd645b1bfe34d \ - --hash:sha256=306e4d900dfb582cf87bc21904e2193ef81db76173e976b74152c95ddd93bdc6 \ - --hash:sha256=2341438d636b8e3cb51b219aab1cc909142d3af176042d12b128d4177682b1ab \ - --hash:sha256=0f33df9eba7b079b7489ac3dd908a6e44b0e98d094e633b29035d33bfc990b9e \ - --hash:sha256=faa8aae3f8f105c5c823a7d570dd3caba31ece69b8f3325106435b9f1fcb68d2 \ - --hash:sha256=2db995758d666c51fecf11cbee1afda357477e01077aacf68ae0c00304c7bc51 \ - --hash:sha256=2de7a2098f64672d0396ac727633285f3562f804e7845e105ee19da544d7da8a +# Flexible BAM/tabix index naming +pysam==0.8.4+gx1 --hash:sha256=9a548c88dbc928b64292ffa4a7697a4ee8c6653f998ef75c717c6dd37c8f67d3 \ + --hash:sha256=bc2ba93bdf9228aaf479eae953a2d9012c9f69ee753446eec3edbdd5c55e8bd4 \ + --hash:sha256=55e06fa6ce2df2e2bdb0705a14eefc6ad433effc79ab53d30642d8d0b33a98ff \ + --hash:sha256=dd8600bee61cca3005c0e95b29aefa3611c452d980055799c3999e1c3cc044bb \ + --hash:sha256=e4cc2b4b24d84b71c82f3194815b986e4f450ab62b96d7f28a453f5a47afdc24 \ + --hash:sha256=f4eb92138ac871fe4db2e5a70ddbc2d6ffcf0c77314b4866b013b7a4d3a52aa6 \ + --hash:sha256=c388728ec37d979c84980f662e9329452f90acf5e2e34c3afb1f66403e063b3f \ + --hash:sha256=001620b7ea051fd2c868ef4f83a07838177a28c42839d76a86f653e124f9830b \ + --hash:sha256=c27e705259d74dba190a2d729c326384ee9949e73478d7dca8e9e2aa593b54c1 \ + --hash:sha256=4c3dae36124646a3bed6bc7e6fd2c979a4430aa290b61da1a611d3cf7e9b38e5 \ + --hash:sha256=73124bec6d2699a30396c6eb63584230c8fdc0dce563391c217b9b57777d0d14 \ + --hash:sha256=8db6bde296f6a34b584dddaeac1dc53f5819d0f63b0cded014a143366c64307f \ + --hash:sha256=a40617160ba503ba31c297de24007e189cbb54325ea11265fa1b96e7d3f32625 \ + --hash:sha256=2045ceb8f733dc787b5fa23293330d8f669a42952be14014d91b2d1d4db99c9e \ + --hash:sha256=f140cd6c2c7b78be20f207e86be79772496a770c0d132604db0f632d54564ff8 \ + --hash:sha256=d35cb62c382bda70552878069d7cc0321b41ec6095838332a15c44a14736b8aa \ + --hash:sha256=2fae280fecfa6547b7c8291bc3966a940ce80400d79cdbc612cefb2bc399f5fd \ + --hash:sha256=a85c470c3ae9d77f13b9fd57fcfdddf26b176d69840eb6654112fd711c86c243 \ + --hash:sha256=9028099e40c45a3959add2c091b8817454b41c8aaa192e72d9c3ee9a5a1c5f8b diff --git a/lib/galaxy/dependencies/pinned-requirements.txt b/lib/galaxy/dependencies/pinned-requirements.txt index c8096de4d8c..35516aaf539 100644 --- a/lib/galaxy/dependencies/pinned-requirements.txt +++ b/lib/galaxy/dependencies/pinned-requirements.txt @@ -31,7 +31,7 @@ Cheetah==2.4.4 Markdown==2.6.3 # BioBlend and dependencies -bioblend==0.6.1 +bioblend==0.7.0 boto==2.38.0 requests==2.8.1 requests-toolbelt==0.4.0 @@ -66,4 +66,4 @@ ecdsa==0.13 Whoosh==2.4.1+gx1 # Flexible BAM index naming -pysam==0.8.3+gx1 +pysam==0.8.4+gx1 diff --git a/lib/galaxy/dependencies/requirements.txt b/lib/galaxy/dependencies/requirements.txt index 7deb751c777..3fc77f1bcdf 100644 --- a/lib/galaxy/dependencies/requirements.txt +++ b/lib/galaxy/dependencies/requirements.txt @@ -60,4 +60,4 @@ Fabric Whoosh==2.4.1+gx1 # Flexible BAM index naming -pysam==0.8.3+gx1 +pysam==0.8.4+gx1 diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py index 4759fa8f1b4..fcfafbbcb37 100644 --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -965,9 +965,6 @@ class JobWrapper( object ): # Get the exception and let the tool attempt to generate # a better message etype, evalue, tb = sys.exc_info() - m = self.tool.handle_job_failure_exception( evalue ) - if m: - message = m if self.app.config.outputs_to_working_directory: for dataset_path in self.get_output_fnames(): try: @@ -1301,9 +1298,7 @@ class JobWrapper( object ): if not data: continue input_ext = data.ext - # why not re-use self.param_dict here? ##dunno...probably should, this causes - # tools.parameters.basic.UnvalidatedValue to be used in following methods - # instead of validated and transformed values during i.e. running workflows + # why not re-use self.param_dict here? param_dict = dict( [ ( p.name, p.value ) for p in job.parameters ] ) param_dict = self.tool.params_from_strings( param_dict, self.app ) # Create generated output children and primary datasets and add to param_dict @@ -1598,20 +1593,19 @@ class JobWrapper( object ): config_file = self.app.config.config_file if datatypes_config is None: datatypes_config = self.app.datatypes_registry.integrated_datatypes_configs - base_command = self.external_output_metadata.setup_external_metadata( [ output_dataset_assoc.dataset for - output_dataset_assoc in - job.output_datasets + job.output_library_datasets ], - self.sa_session, - exec_dir=exec_dir, - tmp_dir=tmp_dir, - dataset_files_path=dataset_files_path, - config_root=config_root, - config_file=config_file, - datatypes_config=datatypes_config, - job_metadata=os.path.join( self.working_directory, TOOL_PROVIDED_JOB_METADATA_FILE ), - max_metadata_value_size=self.app.config.max_metadata_value_size, - **kwds ) - command = base_command + command = self.external_output_metadata.setup_external_metadata( [ output_dataset_assoc.dataset for + output_dataset_assoc in + job.output_datasets + job.output_library_datasets ], + self.sa_session, + exec_dir=exec_dir, + tmp_dir=tmp_dir, + dataset_files_path=dataset_files_path, + config_root=config_root, + config_file=config_file, + datatypes_config=datatypes_config, + job_metadata=os.path.join( self.working_directory, TOOL_PROVIDED_JOB_METADATA_FILE ), + max_metadata_value_size=self.app.config.max_metadata_value_size, + **kwds ) if resolve_metadata_dependencies: metadata_tool = self.app.toolbox.get_tool("__SET_METADATA__") dependency_shell_commands = metadata_tool.build_dependency_shell_commands(job_directory=self.working_directory) diff --git a/lib/galaxy/jobs/actions/post.py b/lib/galaxy/jobs/actions/post.py index b936c5bb7a4..72212e7b5a0 100644 --- a/lib/galaxy/jobs/actions/post.py +++ b/lib/galaxy/jobs/actions/post.py @@ -402,23 +402,34 @@ class DeleteIntermediatesAction(DefaultJobAction): # POTENTIAL ISSUES: When many outputs are being finish()ed # concurrently, sometimes non-terminal steps won't be cleaned up # because of the lag in job state updates. + sa_session.flush() if not job.workflow_invocation_step: log.debug("This job is not part of a workflow invocation, delete intermediates aborted.") return wfi = job.workflow_invocation_step.workflow_invocation + sa_session.refresh(wfi) if wfi.active: log.debug("Workflow still scheduling so new jobs may appear, skipping deletion of intermediate files.") # Still evaluating workflow so we don't yet have all workflow invocation # steps to start looking at. return - if wfi.workflow.has_outputs_defined(): - jobs_to_check = [wfistep.job for wfistep in wfi.steps if not wfistep.workflow_step.workflow_outputs] + outputs_defined = wfi.workflow.has_outputs_defined() + if outputs_defined: + wfi_steps = [wfistep for wfistep in wfi.steps if not wfistep.workflow_step.workflow_outputs and wfistep.workflow_step.type == "tool"] + jobs_to_check = [] + for wfi_step in wfi_steps: + sa_session.refresh(wfi_step) + wfi_step_job = wfi_step.job + if wfi_step_job: + jobs_to_check.append(wfi_step_job) + else: + log.debug("No job found yet for wfi_step %s, (step %s)" % (wfi_step, wfi_step.workflow_step)) for j2c in jobs_to_check: - if j2c is None: - # Job not yet created, this will be re-evaluated after subsequent jobs in - # workflow. - return - for input_dataset in [x.dataset for x in j2c.input_datasets if x.dataset.creating_job.workflow_invocation_step and x.dataset.creating_job.workflow_invocation_step.workflow_invocation == wfi]: + creating_jobs = [(x, x.dataset.creating_job) for x in j2c.input_datasets if x.dataset.creating_job] + for (x, creating_job) in creating_jobs: + sa_session.refresh(creating_job) + sa_session.refresh(x) + for input_dataset in [x.dataset for (x, creating_job) in creating_jobs if creating_job.workflow_invocation_step and creating_job.workflow_invocation_step.workflow_invocation == wfi]: safe_to_delete = True for job_to_check in [d_j.job for d_j in input_dataset.dependent_jobs]: if job_to_check != job and job_to_check.state not in [job.states.OK, job.states.DELETED]: diff --git a/lib/galaxy/jobs/runners/__init__.py b/lib/galaxy/jobs/runners/__init__.py index 0e6b78607d8..ba7f2120d0e 100644 --- a/lib/galaxy/jobs/runners/__init__.py +++ b/lib/galaxy/jobs/runners/__init__.py @@ -169,9 +169,9 @@ class BaseJobRunner( object ): include_metadata=include_metadata, include_work_dir_outputs=include_work_dir_outputs, ) - except: + except Exception as e: log.exception("(%s) Failure preparing job" % job_id) - job_wrapper.fail( "failure preparing job", exception=True ) + job_wrapper.fail( e.message if hasattr( e, 'message' ) else "Job preparation failed", exception=True ) return False if not job_wrapper.runner_command_line: diff --git a/lib/galaxy/jobs/runners/condor.py b/lib/galaxy/jobs/runners/condor.py index 350d2273ef0..114764b9e7d 100644 --- a/lib/galaxy/jobs/runners/condor.py +++ b/lib/galaxy/jobs/runners/condor.py @@ -212,7 +212,6 @@ class CondorJobRunner( AsynchronousJobRunner ): cjs.job_destination = job_wrapper.job_destination cjs.user_log = os.path.join( self.app.config.cluster_files_directory, 'galaxy_%s.condor.log' % galaxy_id_tag ) cjs.register_cleanup_file_attribute( 'user_log' ) - self.__old_state_paths( cjs ) if job.state == model.Job.states.RUNNING: log.debug( "(%s/%s) is still in running state, adding to the DRM queue" % ( job.id, job.job_runner_external_id ) ) cjs.running = True @@ -221,15 +220,3 @@ class CondorJobRunner( AsynchronousJobRunner ): log.debug( "(%s/%s) is still in DRM queued state, adding to the DRM queue" % ( job.id, job.job_runner_external_id ) ) cjs.running = False self.monitor_queue.put( cjs ) - - def __old_state_paths( self, cjs ): - """For recovery of jobs started prior to standardizing the naming of - files in the AsychronousJobState object - """ - if cjs.job_wrapper is not None: - user_log = "%s/%s.condor.log" % (self.app.config.cluster_files_directory, cjs.job_wrapper.job_id) - if not os.path.exists( cjs.user_log ) and os.path.exists( user_log ): - cjs.output_file = "%s/%s.o" % (self.app.config.cluster_files_directory, cjs.job_wrapper.job_id) - cjs.error_file = "%s/%s.e" % (self.app.config.cluster_files_directory, cjs.job_wrapper.job_id) - cjs.job_file = "%s/galaxy_%s.sh" % (self.app.config.cluster_files_directory, cjs.job_wrapper.job_id) - cjs.user_log = user_log diff --git a/lib/galaxy/jobs/runners/drmaa.py b/lib/galaxy/jobs/runners/drmaa.py index b1dacde9c2b..395715cc565 100644 --- a/lib/galaxy/jobs/runners/drmaa.py +++ b/lib/galaxy/jobs/runners/drmaa.py @@ -332,7 +332,6 @@ class DRMAAJobRunner( AsynchronousJobRunner ): ajs.command_line = job.get_command_line() ajs.job_wrapper = job_wrapper ajs.job_destination = job_wrapper.job_destination - self.__old_state_paths( ajs ) if job.state == model.Job.states.RUNNING: log.debug( "(%s/%s) is still in running state, adding to the DRM queue" % ( job.get_id(), job.get_job_runner_external_id() ) ) ajs.old_state = drmaa.JobState.RUNNING @@ -344,18 +343,6 @@ class DRMAAJobRunner( AsynchronousJobRunner ): ajs.running = False self.monitor_queue.put( ajs ) - def __old_state_paths( self, ajs ): - """For recovery of jobs started prior to standardizing the naming of - files in the AsychronousJobState object - """ - if ajs.job_wrapper is not None: - job_file = "%s/galaxy_%s.sh" % (self.app.config.cluster_files_directory, ajs.job_wrapper.job_id) - if not os.path.exists( ajs.job_file ) and os.path.exists( job_file ): - ajs.output_file = "%s.drmout" % os.path.join(os.getcwd(), ajs.job_wrapper.working_directory, ajs.job_wrapper.get_id_tag()) - ajs.error_file = "%s.drmerr" % os.path.join(os.getcwd(), ajs.job_wrapper.working_directory, ajs.job_wrapper.get_id_tag()) - ajs.exit_code_file = "%s.drmec" % os.path.join(os.getcwd(), ajs.job_wrapper.working_directory, ajs.job_wrapper.get_id_tag()) - ajs.job_file = job_file - def store_jobtemplate(self, job_wrapper, jt): """ Stores the content of a DRMAA JobTemplate object in a file as a JSON string. Path is hard-coded, but it's no worse than other path in this module. diff --git a/lib/galaxy/managers/workflows.py b/lib/galaxy/managers/workflows.py index 69aebede41f..8ac7bd2fcbf 100644 --- a/lib/galaxy/managers/workflows.py +++ b/lib/galaxy/managers/workflows.py @@ -535,8 +535,16 @@ class WorkflowContentsManager(UsesAnnotations): # 'data_outputs': module.get_data_outputs(), 'annotation': annotation_str } - # Add post-job actions to step dict. + # Add tool shed repository information and post-job actions to step dict. if module.type == 'tool': + if module.tool.tool_shed_repository: + tsr = module.tool.tool_shed_repository + step_dict["tool_shed_repository"] = { + 'name': tsr.name, + 'owner': tsr.owner, + 'changeset_revision': tsr.changeset_revision, + 'tool_shed': tsr.tool_shed + } pja_dict = {} for pja in step.post_job_actions: pja_dict[pja.action_type + pja.output_name] = dict( diff --git a/lib/galaxy/model/__init__.py b/lib/galaxy/model/__init__.py index 524e14e9254..e1e82c18370 100644 --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -3177,7 +3177,7 @@ class DatasetCollectionInstance( object, HasName ): return changed -class HistoryDatasetCollectionAssociation( DatasetCollectionInstance, Dictifiable ): +class HistoryDatasetCollectionAssociation( DatasetCollectionInstance, UsesAnnotations, Dictifiable ): """ Associates a DatasetCollection with a History. """ editable_keys = ( 'name', 'deleted', 'visible' ) diff --git a/lib/galaxy/objectstore/__init__.py b/lib/galaxy/objectstore/__init__.py index 694a3e8308c..fa4871309c2 100644 --- a/lib/galaxy/objectstore/__init__.py +++ b/lib/galaxy/objectstore/__init__.py @@ -12,7 +12,7 @@ import logging import threading from xml.etree import ElementTree -from galaxy.util import umask_fix_perms, force_symlink +from galaxy.util import umask_fix_perms, force_symlink, safe_makedirs from galaxy.exceptions import ObjectInvalid, ObjectNotFound from galaxy.util.sleeper import Sleeper from galaxy.util.directory_hash import directory_hash_id @@ -331,8 +331,7 @@ class DiskObjectStore(ObjectStore): dir_only = kwargs.get('dir_only', False) # Create directory if it does not exist dir = path if dir_only else os.path.dirname(path) - if not os.path.exists(dir): - os.makedirs(dir) + safe_makedirs(dir) # Create the file if it does not exist if not dir_only: open(path, 'w').close() # Should be rb? diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index 06035765aa0..ac5b19fa2aa 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -31,11 +31,10 @@ from galaxy.tools.parameters import params_to_incoming, check_param, params_from from galaxy.tools.parameters import output_collect from galaxy.tools.parameters.basic import (BaseURLToolParameter, DataToolParameter, DataCollectionToolParameter, HiddenToolParameter, - SelectToolParameter, ToolParameter, UnvalidatedValue, + SelectToolParameter, ToolParameter, contains_workflow_parameter) from galaxy.tools.parameters.grouping import Conditional, ConditionalWhen, Repeat, Section, UploadDataset from galaxy.tools.parameters.input_translation import ToolInputTranslator -from galaxy.tools.parameters.validation import LateValidationError from galaxy.tools.test import parse_tests from galaxy.tools.parser import get_tool_source from galaxy.tools.parser.xml import XmlPageSource @@ -53,6 +52,7 @@ from galaxy.util.template import fill_template from galaxy.web import url_for from galaxy.web.form_builder import SelectField from galaxy.util.dictifiable import Dictifiable +from galaxy.work.context import WorkRequestContext from tool_shed.util import common_util from tool_shed.util import shed_util_common as suc @@ -866,6 +866,9 @@ class Tool( object, Dictifiable ): # Should have one child "input" which determines the case test_param_input_source = input_source.parse_test_input_source() group.test_param = self.parse_param_elem( test_param_input_source, enctypes, context ) + if group.test_param.optional: + log.warning("Tool with id %s declares a conditional test parameter as optional, this is invalid and will be ignored." % self.id) + group.test_param.optional = False possible_cases = list( group.test_param.legal_values ) # store possible cases, undefined whens will have no inputs # Must refresh when test_param changes group.test_param.refresh_on_change = True @@ -1049,40 +1052,24 @@ class Tool( object, Dictifiable ): # outputs? return True - def new_state( self, trans, history=None ): + def new_state( self, trans ): """ Create a new `DefaultToolState` for this tool. It will be initialized with default values for inputs. """ state = DefaultToolState() state.inputs = {} - self.fill_in_new_state( trans, self.inputs, state.inputs, history=history ) + self.fill_in_new_state( trans, self.inputs, state.inputs ) return state - def fill_in_new_state( self, trans, inputs, state, context=None, history=None ): + def fill_in_new_state( self, trans, inputs, state, context=None ): """ Fill in a tool state dictionary with default values for all parameters in the dictionary `inputs`. Grouping elements are filled in recursively. """ context = ExpressionContext( state, context ) for input in inputs.itervalues(): - state[ input.name ] = input.get_initial_value( trans, context, history=history ) - - def get_param_html_map( self, trans, page=0, other_values={} ): - """ - Return a dictionary containing the HTML representation of each - parameter. This is used for rendering display elements. It is - currently not compatible with grouping constructs. - - NOTE: This should be considered deprecated, it is only used for tools - with `display` elements. These should be eliminated. - """ - rval = dict() - for key, param in self.inputs_by_page[page].iteritems(): - if not isinstance( param, ToolParameter ): - raise Exception( "'get_param_html_map' only supported for simple paramters" ) - rval[key] = param.get_html( trans, other_values=other_values ) - return rval + state[ input.name ] = input.get_initial_value( trans, context ) def get_param( self, key ): """ @@ -1128,6 +1115,7 @@ class Tool( object, Dictifiable ): to the form or execute the tool (only if 'execute' was clicked and there were no errors). """ + request_context = WorkRequestContext( app=trans.app, user=trans.user, history=history or trans.history ) rerun_remap_job_id = None if 'rerun_remap_job_id' in incoming: try: @@ -1152,7 +1140,7 @@ class Tool( object, Dictifiable ): all_params = [] validate_input = self.get_hook( 'validate_input' ) for expanded_incoming in expanded_incomings: - expanded_state = self.new_state( trans, history=history ) + expanded_state = self.new_state( request_context ) # Process incoming data if not self.check_values: # If `self.check_values` is false we don't do any checking or @@ -1163,7 +1151,7 @@ class Tool( object, Dictifiable ): else: # Update state for all inputs on the current page taking new # values from `incoming`. - errors = self.populate_state( trans, self.inputs, expanded_state.inputs, expanded_incoming, history, source=source ) + errors = self.populate_state( request_context, self.inputs, expanded_state.inputs, expanded_incoming, source=source ) # If the tool provides a `validate_input` hook, call it. if validate_input: validate_input( trans, errors, expanded_state.inputs, self.inputs ) @@ -1176,7 +1164,7 @@ class Tool( object, Dictifiable ): if any( all_errors ): raise exceptions.MessageException( err_data=all_errors[ 0 ] ) else: - execution_tracker = execute_job( trans, self, all_params, history=history, rerun_remap_job_id=rerun_remap_job_id, collection_info=collection_info ) + execution_tracker = execute_job( trans, self, all_params, history=request_context.history, rerun_remap_job_id=rerun_remap_job_id, collection_info=collection_info ) if execution_tracker.successful_jobs: return dict( out_data=execution_tracker.output_datasets, num_jobs=len( execution_tracker.successful_jobs ), @@ -1219,7 +1207,7 @@ class Tool( object, Dictifiable ): elif isinstance(x, list): [ self.find_fieldstorage( y ) for y in x ] - def populate_state( self, trans, inputs, state, incoming, history=None, source="html", prefix="", context=None ): + def populate_state( self, trans, inputs, state, incoming, source="html", prefix="", context=None ): errors = dict() # Push this level onto the context stack context = ExpressionContext( state, context ) @@ -1239,14 +1227,13 @@ class Tool( object, Dictifiable ): if rep_index < input.max: new_state = {} new_state['__index__'] = rep_index - self.fill_in_new_state( trans, input.inputs, new_state, context, history=history ) + self.fill_in_new_state( trans, input.inputs, new_state, context ) group_state.append( new_state ) group_errors.append( {} ) rep_errors = self.populate_state( trans, input.inputs, new_state, incoming, - history, source, prefix=rep_name + "|", context=context ) @@ -1288,12 +1275,11 @@ class Tool( object, Dictifiable ): # Current case has changed, throw away old state group_state = state[input.name] = {} # TODO: we should try to preserve values if we can - self.fill_in_new_state( trans, input.cases[current_case].inputs, group_state, context, history=history ) + self.fill_in_new_state( trans, input.cases[current_case].inputs, group_state, context ) group_errors = self.populate_state( trans, input.cases[current_case].inputs, group_state, incoming, - history, source, prefix=group_prefix, context=context) @@ -1306,12 +1292,11 @@ class Tool( object, Dictifiable ): elif isinstance( input, Section ): group_state = state[input.name] group_prefix = "%s|" % ( key ) - self.fill_in_new_state( trans, input.inputs, group_state, context, history=history ) + self.fill_in_new_state( trans, input.inputs, group_state, context ) group_errors = self.populate_state( trans, input.inputs, group_state, incoming, - history, source, prefix=group_prefix, context=context ) @@ -1344,7 +1329,6 @@ class Tool( object, Dictifiable ): input.inputs, rep_state, incoming, - history, source, prefix=rep_prefix, context=context) @@ -1485,11 +1469,7 @@ class Tool( object, Dictifiable ): # load default initial value if not test_param_error: test_param_error = str( e ) - if trans is not None: - history = trans.get_history() - else: - history = None - value = input.test_param.get_initial_value( trans, context, history=history ) + value = input.test_param.get_initial_value( trans, context ) current_case = input.get_current_case( value, trans ) case_changed = current_case != old_current_case if case_changed: @@ -1652,17 +1632,18 @@ class Tool( object, Dictifiable ): def params_from_strings( self, params, app, ignore_errors=False ): return params_from_strings( self.inputs, params, app, ignore_errors ) - def check_and_update_param_values( self, values, trans, update_values=True, allow_workflow_parameters=False ): + def check_and_update_param_values( self, values, trans, update_values=True, workflow_building_mode=False ): """ Check that all parameters have values, and fill in with default values where necessary. This could be called after loading values from a database in case new parameters have been added. """ messages = {} - self.check_and_update_param_values_helper( self.inputs, values, trans, messages, update_values=update_values, allow_workflow_parameters=allow_workflow_parameters ) + request_context = WorkRequestContext( app=trans.app, user=trans.user, history=trans.history, workflow_building_mode=workflow_building_mode ) + self.check_and_update_param_values_helper( self.inputs, values, request_context, messages, update_values=update_values ) return messages - def check_and_update_param_values_helper( self, inputs, values, trans, messages, context=None, prefix="", update_values=True, allow_workflow_parameters=False ): + def check_and_update_param_values_helper( self, inputs, values, trans, messages, context=None, prefix="", update_values=True ): """ Recursive helper for `check_and_update_param_values_helper` """ @@ -1677,7 +1658,7 @@ class Tool( object, Dictifiable ): messages[ input.name ] = cond_messages test_value = input.test_param.get_initial_value( trans, context ) current_case = input.get_current_case( test_value, trans ) - self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, cond_messages, context, prefix, allow_workflow_parameters=allow_workflow_parameters ) + self.check_and_update_param_values_helper( input.cases[ current_case ].inputs, {}, trans, cond_messages, context, prefix, update_values=update_values ) elif isinstance( input, Repeat ): if input.min: messages[ input.name ] = [] @@ -1685,10 +1666,10 @@ class Tool( object, Dictifiable ): rep_prefix = prefix + "%s %d > " % ( input.title, i + 1 ) rep_dict = dict() messages[ input.name ].append( rep_dict ) - self.check_and_update_param_values_helper( input.inputs, {}, trans, rep_dict, context, rep_prefix, allow_workflow_parameters=allow_workflow_parameters ) + self.check_and_update_param_values_helper( input.inputs, {}, trans, rep_dict, context, rep_prefix, update_values=update_values ) elif isinstance( input, Section ): messages[ input.name ] = {} - self.check_and_update_param_values_helper( input.inputs, {}, trans, messages[ input.name ], context, prefix, allow_workflow_parameters=allow_workflow_parameters ) + self.check_and_update_param_values_helper( input.inputs, {}, trans, messages[ input.name ], context, prefix, update_values=update_values ) else: messages[ input.name ] = "No value found for '%s%s', using default" % ( prefix, input.label ) values[ input.name ] = input.get_initial_value( trans, context ) @@ -1697,7 +1678,7 @@ class Tool( object, Dictifiable ): if isinstance( input, Repeat ): for i, d in enumerate( values[ input.name ] ): rep_prefix = prefix + "%s %d > " % ( input.title, i + 1 ) - self.check_and_update_param_values_helper( input.inputs, d, trans, messages, context, rep_prefix, allow_workflow_parameters=allow_workflow_parameters ) + self.check_and_update_param_values_helper( input.inputs, d, trans, messages, context, rep_prefix, update_values=update_values ) elif isinstance( input, Conditional ): group_values = values[ input.name ] use_initial_value = False @@ -1715,96 +1696,32 @@ class Tool( object, Dictifiable ): messages[ child_input.name ] = "Value no longer valid for '%s%s', replacing with default" % ( prefix, child_input.label ) else: current = group_values["__current_case__"] - self.check_and_update_param_values_helper( input.cases[current].inputs, group_values, trans, messages, context, prefix, allow_workflow_parameters=allow_workflow_parameters ) + self.check_and_update_param_values_helper( input.cases[current].inputs, group_values, trans, messages, context, prefix, update_values=update_values ) elif isinstance( input, Section ): messages[ input.name ] = {} - self.check_and_update_param_values_helper( input.inputs, values[ input.name ], trans, messages[ input.name ], context, prefix, allow_workflow_parameters=allow_workflow_parameters ) + self.check_and_update_param_values_helper( input.inputs, values[ input.name ], trans, messages[ input.name ], context, prefix, update_values=update_values ) else: # Regular tool parameter, no recursion needed try: value = values[ input.name ] - if not allow_workflow_parameters: + if not trans.workflow_building_mode: input.value_from_basic( input.value_to_basic( value, trans.app ), trans.app, ignore_errors=False ) - input.validate( value, history=trans.history ) + input.validate( value, trans ) else: # skip check if is workflow parameters ck_param = True search = input.type in ["text"] - if allow_workflow_parameters and contains_workflow_parameter( values[ input.name ], search=search ): + if trans.workflow_building_mode and contains_workflow_parameter( values[ input.name ], search=search ): ck_param = False # this will fail when a parameter's type has changed to a non-compatible one: e.g. conditional group changed to dataset input if ck_param: - input.value_from_basic( input.value_to_basic( value, trans.app ), trans.app, ignore_errors=False ) + input.value_from_basic( input.value_to_basic( value, self.app ), self.app, ignore_errors=False ) except: log.info("Parameter validation failed.", exc_info=True) messages[ input.name ] = "Value no longer valid for '%s%s', replacing with default" % ( prefix, input.label ) if update_values: values[ input.name ] = input.get_initial_value( trans, context ) - def handle_unvalidated_param_values( self, input_values, app ): - """ - Find any instances of `UnvalidatedValue` within input_values and - validate them (by calling `ToolParameter.from_html` and - `ToolParameter.validate`). - """ - # No validation is done when check_values is False - if not self.check_values: - return - self.handle_unvalidated_param_values_helper( self.inputs, input_values, app ) - - def handle_unvalidated_param_values_helper( self, inputs, input_values, app, context=None, prefix="" ): - """ - Recursive helper for `handle_unvalidated_param_values` - """ - context = ExpressionContext( input_values, context ) - for input in inputs.itervalues(): - if isinstance( input, Repeat ): - for i, d in enumerate( input_values[ input.name ] ): - rep_prefix = prefix + "%s %d > " % ( input.title, i + 1 ) - self.handle_unvalidated_param_values_helper( input.inputs, d, app, context, rep_prefix ) - elif isinstance( input, Conditional ): - values = input_values[ input.name ] - current = values["__current_case__"] - # NOTE: The test param doesn't need to be checked since - # there would be no way to tell what case to use at - # workflow build time. However I'm not sure if we are - # actually preventing such a case explicately. - self.handle_unvalidated_param_values_helper( input.cases[current].inputs, values, app, context, prefix ) - else: - # Regular tool parameter - value = input_values[ input.name ] - if isinstance( value, UnvalidatedValue ): - try: - # Convert from html representation - if value.value is None: - # If value.value is None, it could not have been - # submited via html form and therefore .from_html - # can't be guaranteed to work - value = None - else: - value = input.from_html( value.value, None, context ) - # Do any further validation on the value - input.validate( value, None ) - except Exception, e: - # Wrap an re-raise any generated error so we can - # generate a more informative message - message = "Failed runtime validation of %s%s (%s)" \ - % ( prefix, input.label, e ) - raise LateValidationError( message ) - input_values[ input.name ] = value - - def handle_job_failure_exception( self, e ): - """ - Called by job.fail when an exception is generated to allow generation - of a better error message (returning None yields the default behavior) - """ - message = None - # If the exception was generated by late validation, use its error - # message (contains the parameter name and value) - if isinstance( e, LateValidationError ): - message = e.message - return message - def build_dependency_shell_commands( self, job_directory=None ): """Return a list of commands to be run to populate the current environment to include this tools requirements.""" return self.app.toolbox.dependency_manager.dependency_shell_commands( @@ -2110,7 +2027,7 @@ class Tool( object, Dictifiable ): # Add input and output details. if io_details: tool_dict[ 'inputs' ] = [ input.to_dict( trans ) for input in self.inputs.values() ] - tool_dict[ 'outputs' ] = [ output.to_dict( app=trans.app ) for output in self.outputs.values() ] + tool_dict[ 'outputs' ] = [ output.to_dict( app=self.app ) for output in self.outputs.values() ] tool_dict[ 'panel_section_id' ], tool_dict[ 'panel_section_name' ] = self.get_panel_section() @@ -2132,18 +2049,18 @@ class Tool( object, Dictifiable ): except Exception, e: raise exceptions.MessageException( '[history_id=%s] Failed to retrieve history. %s.' % ( history_id, str( e ) ) ) - # set workflow mode ( TODO: Should be revised/parsed without trans to tool parameters (basic.py) ) - trans.workflow_building_mode = workflow_mode + # build request context + request_context = WorkRequestContext( app=trans.app, user=trans.user, history=history, workflow_building_mode=workflow_mode ) # load job parameters into incoming tool_message = '' if job: try: - job_params = job.get_param_values( trans.app, ignore_errors=True ) - self.check_and_update_param_values( job_params, trans, update_values=False ) - self._map_source_to_history( trans, self.inputs, job_params, history ) - tool_message = self._compare_tool_version(trans, job) - params_to_incoming( kwd, self.inputs, job_params, trans.app, to_html=False ) + job_params = job.get_param_values( self.app, ignore_errors=True ) + self.check_and_update_param_values( job_params, request_context, update_values=False ) + self._map_source_to_history( request_context, self.inputs, job_params ) + tool_message = self._compare_tool_version( job ) + params_to_incoming( kwd, self.inputs, job_params, self.app ) except Exception, e: raise exceptions.MessageException( str( e ) ) @@ -2152,12 +2069,6 @@ class Tool( object, Dictifiable ): # convert value to jsonifiable value def jsonify(v): - if isinstance(v, UnvalidatedValue): - v = v.value - while isinstance( v, UnvalidatedValue ): - v = v.value - return v - # check if value is numeric isnumber = False try: @@ -2167,17 +2078,17 @@ class Tool( object, Dictifiable ): pass # fix hda parsing - if isinstance(v, trans.app.model.HistoryDatasetAssociation): + if isinstance(v, self.app.model.HistoryDatasetAssociation): return { 'id' : trans.security.encode_id(v.id), 'src' : 'hda' } - elif isinstance(v, trans.app.model.HistoryDatasetCollectionAssociation): + elif isinstance(v, self.app.model.HistoryDatasetCollectionAssociation): return { 'id' : trans.security.encode_id(v.id), 'src' : 'hdca' } - elif isinstance(v, trans.app.model.LibraryDatasetDatasetAssociation): + elif isinstance(v, self.app.model.LibraryDatasetDatasetAssociation): return { 'id' : trans.security.encode_id(v.id), 'name': v.name, @@ -2219,35 +2130,27 @@ class Tool( object, Dictifiable ): dict[key] = value # check the current state of a value and update it if necessary - def check_state(trans, input, value, context): + def check_state( input, value, context ): error = 'State validation failed.' - - # handle unvalidated values - if isinstance(value, galaxy.tools.parameters.basic.DummyDataset): + if isinstance( value, galaxy.tools.parameters.basic.DummyDataset ): return [ None, None ] - elif isinstance(value, galaxy.tools.parameters.basic.RuntimeValue): + elif isinstance( value, galaxy.tools.parameters.basic.RuntimeValue ): return [ { '__class__' : 'RuntimeValue' }, None ] elif isinstance( value, dict ): - if value.get('__class__') == 'RuntimeValue': + if value.get( '__class__' ) == 'RuntimeValue': return [ value, None ] - - # validate value content try: - # resolves the inconsistent definition of boolean parameters (see base.py) without modifying shared code - if input.type == 'boolean' and isinstance(value, basestring): - value, error = [string_as_bool(value), None] - else: - value, error = check_param(trans, input, value, context, history=history, workflow_building_mode=workflow_mode) + value, error = check_param( request_context, input, value, context, boolean_fix=True ) except Exception, err: - log.error('Checking parameter %s failed. %s', input.name, str(err)) + log.error( 'Checking parameter %s failed. %s', input.name, str( err ) ) pass - return [value, error] + return [ value, error ] # populates state with incoming url parameters - def populate_state(trans, inputs, state, errors, incoming, prefix="", context=None ): + def populate_state( inputs, state, errors, incoming, prefix="", context=None ): context = ExpressionContext(state, context) for input in inputs.itervalues(): - state[input.name] = input.get_initial_value(trans, context, history=history) + state[input.name] = input.get_initial_value( request_context, context ) key = prefix + input.name if input.type == 'repeat': group_state = state[input.name] @@ -2261,21 +2164,21 @@ class Tool( object, Dictifiable ): new_state = {} new_state['__index__'] = rep_index group_state.append(new_state) - populate_state(trans, input.inputs, new_state, errors, incoming, prefix=rep_name + "|", context=context) + populate_state( input.inputs, new_state, errors, incoming, prefix=rep_name + "|", context=context ) rep_index += 1 elif input.type == 'conditional': group_state = state[input.name] group_prefix = "%s|" % ( key ) test_param_key = group_prefix + input.test_param.name default_value = incoming.get(test_param_key, group_state.get(input.test_param.name, None)) - value, error = check_state(trans, input.test_param, default_value, context) + value, error = check_state( input.test_param, default_value, context ) if error: errors[test_param_key] = error else: try: - current_case = input.get_current_case(value, trans) + current_case = input.get_current_case( value, request_context ) group_state = state[input.name] = {} - populate_state( trans, input.cases[current_case].inputs, group_state, errors, incoming, prefix=group_prefix, context=context) + populate_state( input.cases[current_case].inputs, group_state, errors, incoming, prefix=group_prefix, context=context ) group_state['__current_case__'] = current_case except Exception: errors[test_param_key] = 'The selected case is unavailable/invalid.' @@ -2284,53 +2187,53 @@ class Tool( object, Dictifiable ): elif input.type == 'section': group_state = state[input.name] group_prefix = "%s|" % ( key ) - populate_state(trans, input.inputs, group_state, errors, incoming, prefix=group_prefix, context=context) + populate_state( input.inputs, group_state, errors, incoming, prefix=group_prefix, context=context ) else: default_value = incoming.get(key, state.get(input.name, None)) - value, error = check_state(trans, input, default_value, context) + value, error = check_state( input, default_value, context ) if error: errors[key] = error state[input.name] = value # builds tool model including all attributes - def iterate(group_inputs, inputs, state_inputs, other_values=None): + def iterate( group_inputs, inputs, state_inputs, other_values=None ): other_values = ExpressionContext( state_inputs, other_values ) for input_index, input in enumerate( inputs.itervalues() ): tool_dict = None group_state = state_inputs.get(input.name, {}) if input.type == 'repeat': - tool_dict = input.to_dict(trans) + tool_dict = input.to_dict( request_context ) group_cache = tool_dict['cache'] = {} for i in range( len( group_state ) ): group_cache[i] = {} iterate( group_cache[i], input.inputs, group_state[i], other_values ) elif input.type == 'conditional': - tool_dict = input.to_dict(trans) + tool_dict = input.to_dict( request_context ) if 'test_param' in tool_dict: test_param = tool_dict['test_param'] - test_param['default_value'] = jsonify(input.test_param.get_initial_value(trans, other_values, history=history)) + test_param['default_value'] = jsonify( input.test_param.get_initial_value( request_context, other_values ) ) test_param['value'] = jsonify(group_state.get(test_param['name'], test_param['default_value'])) - test_param['text_value'] = input.test_param.value_to_display_text(test_param['value'], trans.app) + test_param['text_value'] = input.test_param.value_to_display_text(test_param['value'], self.app) for i in range(len( tool_dict['cases'] ) ): current_state = {} if i == group_state.get('__current_case__', None): current_state = group_state - iterate(tool_dict['cases'][i]['inputs'], input.cases[i].inputs, current_state, other_values) + iterate( tool_dict['cases'][i]['inputs'], input.cases[i].inputs, current_state, other_values ) elif input.type == 'section': - tool_dict = input.to_dict(trans) + tool_dict = input.to_dict( request_context ) iterate( tool_dict['inputs'], input.inputs, group_state, other_values ) else: # expand input dictionary, resolve dynamic parameters try: - tool_dict = input.to_dict(trans, other_values=other_values) + tool_dict = input.to_dict( request_context, other_values=other_values ) except Exception: - tool_dict = input.to_dict(trans) + tool_dict = input.to_dict( request_context ) log.exception('tools::to_json() - Skipping parameter expansion for %s.' % input.name) pass # backup default value try: - tool_dict['default_value'] = input.get_initial_value(trans, other_values, history=history) + tool_dict['default_value'] = input.get_initial_value( request_context, other_values ) except Exception: tool_dict['default_value'] = None log.exception('tools::to_json() - Getting initial value failed %s.' % input.name) @@ -2340,7 +2243,7 @@ class Tool( object, Dictifiable ): tool_dict['value'] = state_inputs.get(input.name, tool_dict['default_value']) # add text value - tool_dict[ 'text_value' ] = input.value_to_display_text( tool_dict[ 'value' ], trans.app ) + tool_dict[ 'text_value' ] = input.value_to_display_text( tool_dict[ 'value' ], self.app ) # sanitize values sanitize(tool_dict, 'value') @@ -2375,14 +2278,14 @@ class Tool( object, Dictifiable ): # initialize and populate tool state state_inputs = {} state_errors = {} - populate_state(trans, self.inputs, state_inputs, state_errors, params.__dict__) + populate_state( self.inputs, state_inputs, state_errors, params.__dict__ ) # create basic tool model - tool_model = self.to_dict(trans) + tool_model = self.to_dict( request_context ) tool_model['inputs'] = {} # build tool model and tool state - iterate(tool_model['inputs'], self.inputs, state_inputs, '') + iterate( tool_model['inputs'], self.inputs, state_inputs, '' ) # sanitize tool state sanitize_state(state_inputs) @@ -2419,14 +2322,14 @@ class Tool( object, Dictifiable ): # add toolshed url sharable_url = None if self.tool_shed_repository: - sharable_url = self.tool_shed_repository.get_sharable_url( trans.app ) + sharable_url = self.tool_shed_repository.get_sharable_url( self.app ) # add additional properties tool_model.update({ 'id' : self.id, 'help' : tool_help, 'citations' : tool_citations, - 'biostar_url' : trans.app.config.biostar_url, + 'biostar_url' : self.app.config.biostar_url, 'sharable_url' : sharable_url, 'message' : tool_message, 'versions' : tool_versions, @@ -2452,10 +2355,11 @@ class Tool( object, Dictifiable ): pass return False - def _map_source_to_history(self, trans, tool_inputs, params, history): + def _map_source_to_history( self, trans, tool_inputs, params ): # Need to remap dataset parameters. Job parameters point to original # dataset used; parameter should be the analygous dataset in the # current history. + history = trans.history # Create index for hdas. hda_source_dict = {} @@ -2473,10 +2377,10 @@ class Tool( object, Dictifiable ): def map_to_history(value): id = None source = None - if isinstance(value, trans.app.model.HistoryDatasetAssociation): + if isinstance(value, self.app.model.HistoryDatasetAssociation): id = value.dataset.id source = hda_source_dict - elif isinstance(value, trans.app.model.HistoryDatasetCollectionAssociation): + elif isinstance(value, self.app.model.HistoryDatasetCollectionAssociation): id = value.collection.id source = hdca_source_dict else: @@ -2489,18 +2393,7 @@ class Tool( object, Dictifiable ): else: return None - # Unpack unvalidated values to strings, they'll be validated when the - # form is submitted (this happens when re-running a job that was - # initially run by a workflow) - # This needs to be done recursively through grouping parameters def mapping_callback( input, value, prefixed_name, prefixed_label ): - if isinstance( value, UnvalidatedValue ): - try: - return input.to_html_value( value.value, trans.app ) - except Exception, e: - # Need to determine when (if ever) the to_html_value call could fail. - log.debug( "Failed to use input.to_html_value to determine value of unvalidated parameter, defaulting to string: %s" % ( e ) ) - return str( value ) if isinstance( input, DataToolParameter ): if isinstance(value, list): values = [] @@ -2517,7 +2410,7 @@ class Tool( object, Dictifiable ): return map_to_history( value ) visit_input_values( tool_inputs, params, mapping_callback ) - def _compare_tool_version( self, trans, job ): + def _compare_tool_version( self, job ): """ Compares a tool version with the tool version from a job (from ToolRunner). """ diff --git a/lib/galaxy/tools/actions/__init__.py b/lib/galaxy/tools/actions/__init__.py index eacae091ddf..f14fe80168b 100644 --- a/lib/galaxy/tools/actions/__init__.py +++ b/lib/galaxy/tools/actions/__init__.py @@ -6,6 +6,7 @@ from galaxy.model import LibraryDatasetDatasetAssociation from galaxy import model from galaxy.tools.parameters.basic import DataCollectionToolParameter, DataToolParameter from galaxy.tools.parameters.wrapped import WrappedParameters +from galaxy.tools.parameters import update_param from galaxy.util import ExecutionTimer from galaxy.util.json import dumps from galaxy.util.none_like import NoneDataset @@ -491,9 +492,10 @@ class DefaultToolAction( object ): if hda.state == hda.states.PAUSED: hda.state = hda.states.NEW hda.info = None + input_values = dict( [ ( p.name, json.loads( p.value ) ) for p in job_to_remap.parameters ] ) + update_param( jtid.name, input_values, str( out_data[ jtod.name ].id ) ) for p in job_to_remap.parameters: - if p.name == jtid.name and p.value == str(jtod.dataset.id): - p.value = str(out_data[jtod.name].id) + p.value = json.dumps( input_values[ p.name ] ) jtid.dataset = out_data[jtod.name] jtid.dataset.hid = jtod.dataset.hid log.info('Job %s input HDA %s remapped to new HDA %s' % (job_to_remap.id, jtod.dataset.id, jtid.dataset.id)) diff --git a/lib/galaxy/tools/evaluation.py b/lib/galaxy/tools/evaluation.py index 3b53819c95e..4fa2eee3a12 100644 --- a/lib/galaxy/tools/evaluation.py +++ b/lib/galaxy/tools/evaluation.py @@ -21,11 +21,11 @@ from galaxy.tools.parameters.basic import ( DataCollectionToolParameter, SelectToolParameter, ) -from galaxy.tools.parameters import wrapped_json +from galaxy.tools.parameters import wrapped_json, visit_input_values from galaxy.tools.parameters.grouping import Conditional, Repeat, Section from galaxy.tools import global_tool_errors from galaxy.jobs.datasets import dataset_path_rewrites - +from galaxy.work.context import WorkRequestContext import logging log = logging.getLogger( __name__ ) @@ -52,8 +52,15 @@ class ToolEvaluator( object ): job = self.job incoming = dict( [ ( p.name, p.value ) for p in job.parameters ] ) incoming = self.tool.params_from_strings( incoming, self.app ) - # Do any validation that could not be done at job creation - self.tool.handle_unvalidated_param_values( incoming, self.app ) + + # Full parameter validation + request_context = WorkRequestContext( app=self.app, user=job.history and job.history.user, history=job.history ) + + def validate_inputs( input, value, prefixed_name, prefixed_label, context ): + value = input.from_html( value, request_context, context ) + input.validate( value, request_context ) + visit_input_values( self.tool.inputs, incoming, validate_inputs, details=True ) + # Restore input / output data lists inp_data = dict( [ ( da.name, da.dataset ) for da in job.input_datasets ] ) out_data = dict( [ ( da.name, da.dataset ) for da in job.output_datasets ] ) @@ -123,7 +130,7 @@ class ToolEvaluator( object ): param_dict.update( incoming ) input_dataset_paths = dataset_path_rewrites( input_paths ) - self.__populate_wrappers(param_dict, input_dataset_paths) + self.__populate_wrappers(param_dict, input_dataset_paths, job_working_directory) self.__populate_input_dataset_wrappers(param_dict, input_datasets, input_dataset_paths) self.__populate_output_dataset_wrappers(param_dict, output_datasets, output_paths, job_working_directory) self.__populate_output_collection_wrappers(param_dict, output_collections, output_paths, job_working_directory) @@ -158,18 +165,20 @@ class ToolEvaluator( object ): do_walk( inputs, input_values ) - def __populate_wrappers(self, param_dict, input_dataset_paths): + def __populate_wrappers(self, param_dict, input_dataset_paths, job_working_directory): def wrap_input( input_values, input ): if isinstance( input, DataToolParameter ) and input.multiple: value = input_values[ input.name ] dataset_instances = DatasetListWrapper.to_dataset_instances( value ) input_values[ input.name ] = \ - DatasetListWrapper( dataset_instances, + DatasetListWrapper( job_working_directory, + dataset_instances, dataset_paths=input_dataset_paths, datatypes_registry=self.app.datatypes_registry, tool=self.tool, name=input.name ) + elif isinstance( input, DataToolParameter ): # FIXME: We're populating param_dict with conversions when # wrapping values, this should happen as a separate @@ -227,6 +236,7 @@ class ToolEvaluator( object ): name=input.name ) wrapper = DatasetCollectionWrapper( + job_working_directory, dataset_collection, **wrapper_kwds ) @@ -299,6 +309,7 @@ class ToolEvaluator( object ): name=name ) wrapper = DatasetCollectionWrapper( + job_working_directory, out_collection, **wrapper_kwds ) diff --git a/lib/galaxy/tools/execute.py b/lib/galaxy/tools/execute.py index e1763f34615..3a2bc03bc45 100644 --- a/lib/galaxy/tools/execute.py +++ b/lib/galaxy/tools/execute.py @@ -39,7 +39,7 @@ def execute( trans, tool, param_combinations, history, rerun_remap_job_id=None, # the state we about to execute one last time. Consider whether tool executions # should run this as well. if workflow_invocation_uuid: - messages = tool.check_and_update_param_values( params, trans, update_values=False, allow_workflow_parameters=False ) + messages = tool.check_and_update_param_values( params, trans, update_values=False ) if messages: execution_tracker.record_error( messages ) return diff --git a/lib/galaxy/tools/imp_exp/__init__.py b/lib/galaxy/tools/imp_exp/__init__.py index 87f65f2f38d..7db8ae032fa 100644 --- a/lib/galaxy/tools/imp_exp/__init__.py +++ b/lib/galaxy/tools/imp_exp/__init__.py @@ -9,7 +9,6 @@ from sqlalchemy.orm import eagerload, eagerload_all from galaxy import model from galaxy.model.item_attrs import UsesAnnotations -from galaxy.tools.parameters.basic import UnvalidatedValue from galaxy.util.json import dumps, loads from galaxy.web.framework.helpers import to_unicode @@ -382,8 +381,6 @@ class JobExportHistoryArchiveWrapper( object, UsesAnnotations ): else: rval['exported'] = True return rval - if isinstance( obj, UnvalidatedValue ): - return obj.__str__() return json.JSONEncoder.default( self, obj ) # diff --git a/lib/galaxy/tools/linters/inputs.py b/lib/galaxy/tools/linters/inputs.py index 85fe452c2ff..042c9d7d1db 100644 --- a/lib/galaxy/tools/linters/inputs.py +++ b/lib/galaxy/tools/linters/inputs.py @@ -51,16 +51,22 @@ def lint_inputs(tool_xml, lint_ctx): lint_ctx.warn("Conditional without or ") continue + test_param_optional = False for select in selects: + test_param_optional = test_param_optional or (select.attrib.get('optional', None) is not None) select_options = _find_with_attribute(select, 'option', 'value') select_option_ids = [option.attrib.get('value', None) for option in select_options] for boolean in booleans: + test_param_optional = test_param_optional or (boolean.attrib.get('optional', None) is not None) select_option_ids = [ boolean.attrib.get('truevalue', 'true'), boolean.attrib.get('falsevalue', 'false') ] + if test_param_optional: + lint_ctx.warn("Conditional test parameter declares an invalid optional attribute.") + whens = conditional.findall('./when') if any(['value' not in when.attrib for when in whens]): lint_ctx.error("When without value") diff --git a/lib/galaxy/tools/parameters/__init__.py b/lib/galaxy/tools/parameters/__init__.py index 67e5bf6f060..c05063b7d82 100644 --- a/lib/galaxy/tools/parameters/__init__.py +++ b/lib/galaxy/tools/parameters/__init__.py @@ -1,15 +1,17 @@ """ Classes encapsulating Galaxy tool parameters. """ - +import re from basic import DataCollectionToolParameter, DataToolParameter, SelectToolParameter from grouping import Conditional, Repeat, Section, UploadDataset +from galaxy.util import string_as_bool from galaxy.util.json import dumps, json_fix, loads +from galaxy.util.expressions import ExpressionContext REPLACE_ON_TRUTHY = object() -def visit_input_values( inputs, input_values, callback, name_prefix="", label_prefix="", no_replacement_value=REPLACE_ON_TRUTHY ): +def visit_input_values( inputs, input_values, callback, name_prefix="", label_prefix="", no_replacement_value=REPLACE_ON_TRUTHY, context=None, details=False ): """ Given a tools parameter definition (`inputs`) and a specific set of parameter `values`, call `callback` for each non-grouping parameter, @@ -22,30 +24,33 @@ def visit_input_values( inputs, input_values, callback, name_prefix="", label_pr Repeat and Group. This tracks labels and those do not. It would be nice to unify all the places that recursively visit inputs. """ + context = ExpressionContext( input_values, context ) for input in inputs.itervalues(): if isinstance( input, Repeat ) or isinstance( input, UploadDataset ): for i, d in enumerate( input_values[ input.name ] ): index = d['__index__'] new_name_prefix = name_prefix + "%s_%d|" % ( input.name, index ) new_label_prefix = label_prefix + "%s %d > " % ( input.title, i + 1 ) - visit_input_values( input.inputs, d, callback, new_name_prefix, new_label_prefix, no_replacement_value=no_replacement_value ) + visit_input_values( input.inputs, d, callback, new_name_prefix, new_label_prefix, no_replacement_value=no_replacement_value, context=context, details=details ) elif isinstance( input, Conditional ): values = input_values[ input.name ] current = values["__current_case__"] - label_prefix = label_prefix new_name_prefix = name_prefix + input.name + "|" - visit_input_values( input.cases[current].inputs, values, callback, new_name_prefix, label_prefix, no_replacement_value=no_replacement_value ) + visit_input_values( input.cases[current].inputs, values, callback, new_name_prefix, label_prefix, no_replacement_value=no_replacement_value, context=context, details=details ) elif isinstance( input, Section ): values = input_values[ input.name ] - label_prefix = label_prefix new_name_prefix = name_prefix + input.name + "|" - visit_input_values( input.inputs, values, callback, new_name_prefix, label_prefix, no_replacement_value=no_replacement_value ) + visit_input_values( input.inputs, values, callback, new_name_prefix, label_prefix, no_replacement_value=no_replacement_value, context=context, details=details ) else: - new_value = callback( input, - input_values[input.name], - prefixed_name=name_prefix + input.name, - prefixed_label=label_prefix + input.label ) - + args = { + 'input' : input, + 'value' : input_values.get( input.name ), + 'prefixed_name' : "%s%s" % ( name_prefix, input.name ), + 'prefixed_label' : "%s%s" % ( label_prefix, input.label ) + } + if details: + args[ 'context' ] = context + new_value = callback( **args ) if no_replacement_value is REPLACE_ON_TRUTHY: replace = bool(new_value) else: @@ -54,7 +59,7 @@ def visit_input_values( inputs, input_values, callback, name_prefix="", label_pr input_values[input.name] = new_value -def check_param( trans, param, incoming_value, param_values, source='html', history=None, workflow_building_mode=False ): +def check_param( trans, param, incoming_value, param_values, source='html', boolean_fix=False ): """ Check the value of a single parameter `param`. The value in `incoming_value` is converted from its HTML encoding and validated. @@ -65,21 +70,20 @@ def check_param( trans, param, incoming_value, param_values, source='html', hist value = incoming_value error = None try: - if history is None: - history = trans.history + # resolves the inconsistent definition of boolean parameters (see base.py) without modifying shared code + if boolean_fix and param.type == 'boolean' and isinstance( value, basestring ): + return [ string_as_bool( value ), None ] if value is not None or isinstance( param, DataToolParameter ) or isinstance( param, DataCollectionToolParameter ): # Convert value from HTML representation if source == 'html': value = param.from_html( value, trans, param_values ) else: value = param.from_json( value, trans, param_values ) - # Allow the value to be converted if necessary - filtered_value = param.filter_value( value, trans, param_values ) # Then do any further validation on the value - param.validate( filtered_value, history, workflow_building_mode=workflow_building_mode ) + param.validate( value, trans ) elif value is None and isinstance( param, SelectToolParameter ): # An empty select list or column list - param.validate( value, history, workflow_building_mode=workflow_building_mode ) + param.validate( value, trans ) except ValueError, e: error = str( e ) return value, error @@ -117,7 +121,7 @@ def params_from_strings( params, param_values, app, ignore_errors=False ): return rval -def params_to_incoming( incoming, inputs, input_values, app, name_prefix="", to_html=True ): +def params_to_incoming( incoming, inputs, input_values, app, name_prefix="" ): """ Given a tool's parameter definition (`inputs`) and a specific set of parameter `input_values` objects, populate `incoming` with the html values. @@ -129,19 +133,36 @@ def params_to_incoming( incoming, inputs, input_values, app, name_prefix="", to_ for d in input_values[ input.name ]: index = d['__index__'] new_name_prefix = name_prefix + "%s_%d|" % ( input.name, index ) - params_to_incoming( incoming, input.inputs, d, app, new_name_prefix, to_html=to_html) + params_to_incoming( incoming, input.inputs, d, app, new_name_prefix ) elif isinstance( input, Conditional ): values = input_values[ input.name ] current = values["__current_case__"] new_name_prefix = name_prefix + input.name + "|" incoming[ new_name_prefix + input.test_param.name ] = values[ input.test_param.name ] - params_to_incoming( incoming, input.cases[current].inputs, values, app, new_name_prefix, to_html=to_html ) + params_to_incoming( incoming, input.cases[current].inputs, values, app, new_name_prefix ) elif isinstance( input, Section ): values = input_values[ input.name ] new_name_prefix = name_prefix + input.name + "|" - params_to_incoming( incoming, input.inputs, values, app, new_name_prefix, to_html=to_html ) + params_to_incoming( incoming, input.inputs, values, app, new_name_prefix ) else: value = input_values.get( input.name ) - if to_html: - value = input.to_html_value( value, app ) incoming[ name_prefix + input.name ] = value + + +def update_param( prefixed_name, input_values, new_value ): + """ + Given a prefixed parameter name, e.g. 'parameter_0|parameter_1', update + the corresponding input value in a nested input values dictionary. + """ + for key in input_values: + match = re.match( '^' + key + '_(\d+)\|(.+)', prefixed_name ) + if match: + index = int( match.group( 1 ) ) + if isinstance( input_values[ key ], list ) and len( input_values[ key ] ) > index: + update_param( match.group( 2 ), input_values[ key ][ index ], new_value ) + else: + match = re.match( '^' + key + '\|(.+)', prefixed_name ) + if isinstance( input_values[ key ], dict ) and match: + update_param( match.group( 1 ), input_values[ key ], new_value ) + elif prefixed_name == key: + input_values[ key ] = new_value diff --git a/lib/galaxy/tools/parameters/basic.py b/lib/galaxy/tools/parameters/basic.py index 462aca2dd1c..55889d268a9 100644 --- a/lib/galaxy/tools/parameters/basic.py +++ b/lib/galaxy/tools/parameters/basic.py @@ -97,7 +97,7 @@ class ToolParameter( object, Dictifiable ): def get_html_field( self, trans=None, value=None, other_values={} ): raise TypeError( "Abstract Method" ) - def get_html( self, trans=None, value=None, other_values={}): + def get_html( self, trans=None, value=None, other_values={} ): """ Returns the html widget corresponding to the parameter. Optionally attempt to retain the current value specific by 'value' @@ -114,13 +114,13 @@ class ToolParameter( object, Dictifiable ): def from_json( self, value, trans=None, other_values={} ): return self.from_html( value, trans, other_values ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): """ Return the starting value of the parameter """ return None - def get_initial_value_from_history_prevent_repeats( self, trans, context, already_used, history=None ): + def get_initial_value_from_history_prevent_repeats( self, trans, other_values, already_used ): """ Get the starting value for the parameter, but if fetching from the history, try to find a value that has not yet been used. already_used is a list of objects that @@ -128,7 +128,7 @@ class ToolParameter( object, Dictifiable ): if a value has already been chosen from the history. This is to support the capability to choose each dataset once """ - return self.get_initial_value(trans, context, history=history) + return self.get_initial_value( trans, other_values ) def get_required_enctype( self ): """ @@ -144,17 +144,6 @@ class ToolParameter( object, Dictifiable ): """ return [] - def filter_value( self, value, trans=None, other_values={} ): - """ - Parse the value returned by the view into a form usable by the tool OR - raise a ValueError. - """ - return value - - def to_html_value( self, value, app ): - """Convert an object value to the value expected from an html post""" - return self.to_string( value, app ) - def to_string( self, value, app ): """Convert a value to a string representation suitable for persisting""" if not isinstance( value, basestring ): @@ -209,11 +198,11 @@ class ToolParameter( object, Dictifiable ): value = sanitize_param( value ) return value - def validate( self, value, history=None, workflow_building_mode=False ): + def validate( self, value, trans=None ): if value == "" and self.optional: return for validator in self.validators: - validator.validate( value, history ) + validator.validate( value, trans ) def to_dict( self, trans, view='collection', value_mapper=None, other_values={} ): """ to_dict tool parameter. This can be overridden by subclasses. """ @@ -285,18 +274,12 @@ class TextToolParameter( ToolParameter ): rval = util.smart_str( value ) return rval - def to_html_value( self, value, app ): - if value is None: - return '' - else: - return self.to_string( value, app ) - - def validate( self, value, history=None, workflow_building_mode=False ): + def validate( self, value, trans=None ): search = self.type == "text" - if not ( workflow_building_mode and contains_workflow_parameter(value, search=search) ): - return super( TextToolParameter, self ).validate( value, history ) + if not ( trans and trans.workflow_building_mode and contains_workflow_parameter(value, search=search) ): + return super( TextToolParameter, self ).validate( value, trans ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): return self.value def to_dict( self, trans, view='collection', value_mapper=None, other_values={} ): @@ -309,15 +292,16 @@ class TextToolParameter( ToolParameter ): class IntegerToolParameter( TextToolParameter ): """ Parameter that takes an integer value. - + >>> from galaxy.util.bunch import Bunch + >>> trans = Bunch( history=Bunch(), workflow_building_mode=True ) >>> p = IntegerToolParameter( None, XML( '' ) ) >>> print p.name blah >>> print p.get_html() - >>> type( p.from_html( "10" ) ) + >>> type( p.from_html( "10", trans ) ) - >>> type( p.from_html( "bleh" ) ) + >>> type( p.from_html( "bleh", trans ) ) Traceback (most recent call last): ... ValueError: An integer or workflow parameter e.g. ${name} is required @@ -355,15 +339,15 @@ class IntegerToolParameter( TextToolParameter ): value = str( value ) return super( IntegerToolParameter, self ).get_html_field( trans=trans, value=value, other_values=other_values ) - def from_html( self, value, trans=None, other_values={} ): + def from_html( self, value, trans, other_values={} ): try: return int( value ) except: - if contains_workflow_parameter(value) and _allow_workflow_parameters_in_context(trans): + if contains_workflow_parameter( value ) and trans.workflow_building_mode: return value if not value and self.optional: return "" - if _allow_workflow_parameters_in_context(trans): + if trans.workflow_building_mode: raise ValueError( "An integer or workflow parameter e.g. ${name} is required" ) else: raise ValueError( "An integer is required" ) @@ -378,7 +362,7 @@ class IntegerToolParameter( TextToolParameter ): return None raise err - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): if self.value: return int( self.value ) else: @@ -388,15 +372,16 @@ class IntegerToolParameter( TextToolParameter ): class FloatToolParameter( TextToolParameter ): """ Parameter that takes a real number value. - + >>> from galaxy.util.bunch import Bunch + >>> trans = Bunch( history=Bunch(), workflow_building_mode=True ) >>> p = FloatToolParameter( None, XML( '' ) ) >>> print p.name blah >>> print p.get_html() - >>> type( p.from_html( "36.1" ) ) + >>> type( p.from_html( "36.1", trans ) ) - >>> type( p.from_html( "bleh" ) ) + >>> type( p.from_html( "bleh", trans ) ) Traceback (most recent call last): ... ValueError: A real number or workflow parameter e.g. ${name} is required @@ -434,15 +419,15 @@ class FloatToolParameter( TextToolParameter ): value = str( value ) return super( FloatToolParameter, self ).get_html_field( trans=trans, value=value, other_values=other_values ) - def from_html( self, value, trans=None, other_values={} ): + def from_html( self, value, trans, other_values={} ): try: return float( value ) except: - if contains_workflow_parameter(value) and _allow_workflow_parameters_in_context(trans): + if contains_workflow_parameter( value ) and trans.workflow_building_mode: return value if not value and self.optional: return "" - if _allow_workflow_parameters_in_context(trans): + if trans and trans.workflow_building_mode: raise ValueError( "A real number or workflow parameter e.g. ${name} is required" ) else: raise ValueError( "A real number is required" ) @@ -457,7 +442,7 @@ class FloatToolParameter( TextToolParameter ): return None raise err - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): try: return float( self.value ) except: @@ -501,16 +486,10 @@ class BooleanToolParameter( ToolParameter ): def from_json( self, value, trans=None, other_values={} ): return string_as_bool( value ) - def to_html_value( self, value, app ): - if value: - return [ 'true', 'true' ] - else: - return [ 'true' ] - def to_python( self, value, app ): return ( value in [ 'True', 'true' ]) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): return self.checked def to_param_dict_string( self, value, other_values={} ): @@ -559,7 +538,7 @@ class FileToolParameter( ToolParameter ): # Middleware or proxies may encode files in special ways (TODO: this # should be pluggable) if type( value ) == dict: - upload_store = self.tool.app.config.nginx_upload_store + upload_store = trans.app.config.nginx_upload_store assert upload_store, \ "Request appears to have been processed by nginx_upload_module \ but Galaxy is not configured to recognize it" @@ -600,7 +579,7 @@ class FileToolParameter( ToolParameter ): else: raise Exception( "FileToolParameter cannot be persisted" ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): return None @@ -615,9 +594,10 @@ class FTPFileToolParameter( ToolParameter ): input_source = ensure_input_source(input_source) ToolParameter.__init__( self, tool, input_source ) self.multiple = input_source.get_bool( 'multiple', True ) + self.optional = input_source.parse_optional( True ) self.user_ftp_dir = '' - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): if trans is not None: if trans.user is not None: self.user_ftp_dir = "%s/" % trans.user_ftp_dir @@ -652,8 +632,6 @@ class FTPFileToolParameter( ToolParameter ): return self.to_python( value, app ) def to_python( self, value, app, validate=False ): - if validate and self.tool.app.config.ftp_upload_dir is None: - raise ValueError( "The FTP directory is not configured." ) if not isinstance( value, list ): value = [ value ] lst = [] @@ -669,6 +647,8 @@ class FTPFileToolParameter( ToolParameter ): if not self.optional and validate: raise ValueError( "Please select a valid FTP file." ) return '' + if validate and self.tool.app.config.ftp_upload_dir is None: + raise ValueError( "The FTP directory is not configured." ) return lst def to_dict( self, trans, view='collection', value_mapper=None, other_values=None ): @@ -699,7 +679,7 @@ class HiddenToolParameter( ToolParameter ): def get_html_field( self, trans=None, value=None, other_values={} ): return form_builder.HiddenField( self.name, self.value ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): return self.value def get_label( self ): @@ -722,7 +702,7 @@ class ColorToolParameter( ToolParameter ): def get_html_field( self, trans=None, value=None, other_values={} ): return form_builder.HiddenField( self.name, self.value ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): return self.value.lower() @@ -736,17 +716,21 @@ class BaseURLToolParameter( HiddenToolParameter ): super( BaseURLToolParameter, self ).__init__( tool, input_source ) self.value = input_source.get( 'value', '' ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): return self._get_value() def get_html_field( self, trans=None, value=None, other_values={} ): return form_builder.HiddenField( self.name, self._get_value() ) - def from_html( self, value=None, trans=None, context={} ): + def from_html( self, value=None, trans=None, other_values={} ): return self._get_value() def _get_value( self ): - return url_for( self.value, qualified=True ) + try: + return url_for( self.value, qualified=True ) + except Exception as e: + log.debug( 'Url creation failed for "%s": %s', self.name, e ) + return self.value def to_dict( self, trans, view='collection', value_mapper=None, other_values={} ): d = super( BaseURLToolParameter, self ).to_dict( trans ) @@ -793,8 +777,6 @@ class SelectToolParameter( ToolParameter ): - >>> print p.filter_value( "y" ) - y >>> p = SelectToolParameter( None, XML( ... ''' @@ -885,12 +867,8 @@ class SelectToolParameter( ToolParameter ): return self.static_options def get_legal_values( self, trans, other_values ): - def _get_UnvalidatedValue_value( value ): - if isinstance( value, UnvalidatedValue ): - return value.value - return value if self.options: - return map( _get_UnvalidatedValue_value, set( v for _, v, _ in self.options.get_options( trans, other_values ) ) ) + return set( v for _, v, _ in self.options.get_options( trans, other_values ) ) elif self.dynamic_options: try: call_other_values = self._get_dynamic_options_call_other_values( trans, other_values ) @@ -901,13 +879,11 @@ class SelectToolParameter( ToolParameter ): else: return self.legal_values - def get_html_field( self, trans=None, value=None, context={} ): + def get_html_field( self, trans=None, value=None, other_values={} ): # Dynamic options are not yet supported in workflow, allow # specifying the value as text for now. - options = list(self.get_options( trans, context )) - if len(list(options)) == 0 and (trans is None or trans.workflow_building_mode): - if isinstance( value, UnvalidatedValue ): - value = value.value + options = list(self.get_options( trans, other_values )) + if len( list( options ) ) == 0 and trans.workflow_building_mode: if self.multiple: if value is None: value = "" @@ -919,21 +895,16 @@ class SelectToolParameter( ToolParameter ): if value is not None: if not isinstance( value, list ): value = [ value ] - # We could have an unvalidated value here when e.g. running a workflow. - value = [ val.value if isinstance( val, UnvalidatedValue ) else val for val in value ] field = form_builder.SelectField( self.name, self.multiple, self.display, self.refresh_on_change, refresh_on_change_values=self.refresh_on_change_values ) for text, optval, selected in options: - if isinstance( optval, UnvalidatedValue ): - optval = optval.value - text = "%s (unvalidated)" % text if value: selected = ( optval in value ) field.add_option( text, optval, selected ) return field - def from_html( self, value, trans=None, context={} ): - legal_values = self.get_legal_values( trans, context ) - if len(list(legal_values)) == 0 and (trans is None or trans.workflow_building_mode): + def from_html( self, value, trans, other_values={} ): + legal_values = self.get_legal_values( trans, other_values ) + if len(list(legal_values)) == 0 and trans.workflow_building_mode: if self.multiple: # While it is generally allowed that a select value can be '', # we do not allow this to be the case in a dynamically @@ -947,8 +918,8 @@ class SelectToolParameter( ToolParameter ): # in interpreting values but also is needed because many browsers # use \r\n to separate lines. value = value.split() - return UnvalidatedValue( value ) - if not legal_values and self.optional: + return value + if ( not legal_values or value is None ) and self.optional: return None if not legal_values: raise ValueError( "Parameter %s requires a value, but has no legal values defined." % self.name ) @@ -973,12 +944,6 @@ class SelectToolParameter( ToolParameter ): raise ValueError( "An invalid option was selected for %s, %r, please verify." % ( self.name, value ) ) return value - def to_html_value( self, value, app ): - if isinstance( value, list ): - return value - else: - return str( value ) - def to_param_dict_string( self, value, other_values={}, value_map=DEFAULT_VALUE_MAP ): if value is None: return "None" @@ -1000,9 +965,7 @@ class SelectToolParameter( ToolParameter ): return value def value_to_basic( self, value, app ): - if isinstance( value, UnvalidatedValue ): - return { "__class__": "UnvalidatedValue", "value": value.value } - elif isinstance( value, RuntimeValue ): + if isinstance( value, RuntimeValue ): # Need to handle runtime value's ourself since delegating to the # parent method causes the value to be turned into a string, which # breaks multiple selection @@ -1010,14 +973,15 @@ class SelectToolParameter( ToolParameter ): return value def value_from_basic( self, value, app, ignore_errors=False ): + # Backward compatibility for unvalidated values already stored in databases if isinstance( value, dict ) and value.get( "__class__", None ) == "UnvalidatedValue": - return UnvalidatedValue( value["value"] ) + return value[ "value" ] return super( SelectToolParameter, self ).value_from_basic( value, app, ignore_errors=ignore_errors ) - def get_initial_value( self, trans, context, history=None ): - options = list( self.get_options( trans, context ) ) - if len(options) == 0 and (trans is None or trans.workflow_building_mode): - return UnvalidatedValue( None ) + def get_initial_value( self, trans, other_values ): + options = list( self.get_options( trans, other_values ) ) + if len(options) == 0 and trans.workflow_building_mode: + return None value = [ optval for _, optval, selected in options if selected ] if len( value ) == 0: if not self.optional and not self.multiple and options: @@ -1031,11 +995,6 @@ class SelectToolParameter( ToolParameter ): return value def value_to_display_text( self, value, app ): - if isinstance( value, UnvalidatedValue ): - suffix = "\n(value not yet validated)" - value = value.value - else: - suffix = "" if not isinstance( value, list ): value = [ value ] # FIXME: Currently only translating values back to labels if they @@ -1048,7 +1007,7 @@ class SelectToolParameter( ToolParameter ): for t, v, s in options: if v in value: rval.append( t ) - return "\n".join( rval ) + suffix + return "\n".join( rval ) def get_dependencies( self ): """ @@ -1123,9 +1082,6 @@ class GenomeBuildParameter( SelectToolParameter ): ... - - >>> print p.filter_value( "hg17" ) - hg17 """ def __init__( self, *args, **kwds ): super( GenomeBuildParameter, self ).__init__( *args, **kwds ) @@ -1158,7 +1114,7 @@ class GenomeBuildParameter( SelectToolParameter ): 'options' : options, 'value' : value, 'display' : self.display, - 'multiple' : self.multiple + 'multiple' : self.multiple, }) return d @@ -1213,7 +1169,7 @@ class ColumnListParameter( SelectToolParameter ): self.is_dynamic = True self.usecolnames = input_source.get_bool( "use_header_names", False ) - def from_html( self, value, trans=None, context={} ): + def from_html( self, value, trans, other_values={} ): """ Label convention prepends column number with a 'c', but tool uses the integer. This removes the 'c' when entered into a workflow. @@ -1237,7 +1193,7 @@ class ColumnListParameter( SelectToolParameter ): value = ColumnListParameter._strip_c( value ) else: value = None - return super( ColumnListParameter, self ).from_html( value, trans, context ) + return super( ColumnListParameter, self ).from_html( value, trans, other_values ) @staticmethod def _strip_c(column): @@ -1327,10 +1283,10 @@ class ColumnListParameter( SelectToolParameter ): options.append( ( 'Column: ' + col, col, False ) ) return options - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): if self.default_value is not None: return self.default_value - return SelectToolParameter.get_initial_value( self, trans, context ) + return SelectToolParameter.get_initial_value( self, trans, other_values ) def get_legal_values( self, trans, other_values ): return set( self.get_column_list( trans, other_values ) ) @@ -1546,9 +1502,7 @@ class DrillDownSelectToolParameter( SelectToolParameter ): # Dynamic options are not yet supported in workflow, allow # specifying the value as text for now. options = self.get_options( trans, value, other_values ) - if len(list(options)) == 0 and (trans is None or trans.workflow_building_mode): - if isinstance( value, UnvalidatedValue ): - value = value.value + if len( list( options ) ) == 0 and trans.workflow_building_mode: if self.multiple: if value is None: value = "" @@ -1559,28 +1513,28 @@ class DrillDownSelectToolParameter( SelectToolParameter ): return form_builder.TextField( self.name, value=(value or "") ) return form_builder.DrillDownField( self.name, self.multiple, self.display, self.refresh_on_change, options, value, refresh_on_change_values=self.refresh_on_change_values ) - def from_html( self, value, trans=None, other_values={} ): + def from_html( self, value, trans, other_values={} ): legal_values = self.get_legal_values( trans, other_values ) - if len(list(legal_values)) == 0 and (trans is None or trans.workflow_building_mode): + if len( list( legal_values ) ) == 0 and trans.workflow_building_mode: if self.multiple: if value == '': # No option selected value = None else: value = value.split( "\n" ) - return UnvalidatedValue( value ) + return value if not value and not self.optional: raise ValueError( "An invalid option was selected for %s, 'None', please verify" % (self.name) ) if not value: return None if not isinstance( value, list ): - value = [value] + value = [ value ] if not( self.repeat ) and len( value ) > 1: assert self.multiple, "Multiple values provided but parameter %s is not expecting multiple values" % self.name rval = [] assert legal_values, "Parameter %s requires a value, but has no legal values defined" % self.name for val in value: if val not in legal_values: - raise ValueError( "An invalid option was selected for %s, %r, please verify" % (self.name, val)) + raise ValueError( "An invalid option was selected for %s, %r, please verify" % ( self.name, val ) ) rval.append( val ) return rval @@ -1625,16 +1579,16 @@ class DrillDownSelectToolParameter( SelectToolParameter ): rval = sanitize_param( rval ) return rval - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): def recurse_options( initial_values, options ): for option in options: if option['selected']: initial_values.append( option['value'] ) recurse_options( initial_values, option['options'] ) # More working around dynamic options for workflow - options = self.get_options( trans=trans, other_values=context ) - if len(list(options)) == 0 and (trans is None or trans.workflow_building_mode): - return UnvalidatedValue( None ) + options = self.get_options( trans=trans, other_values=other_values ) + if len( list( options ) ) == 0 and trans.workflow_building_mode: + return None initial_values = [] recurse_options( initial_values, options ) if len( initial_values ) == 0: @@ -1650,12 +1604,6 @@ class DrillDownSelectToolParameter( SelectToolParameter ): if rval: return rval return None # not found - - if isinstance( value, UnvalidatedValue ): - suffix = "\n(value not yet validated)" - value = value.value - else: - suffix = "" if not value: value = [] elif not isinstance( value, list ): @@ -1674,7 +1622,7 @@ class DrillDownSelectToolParameter( SelectToolParameter ): rval = [] for val in value: rval.append( get_option_display( val, self.options ) or val ) - return "\n".join( map( str, rval ) ) + suffix + return "\n".join( map( str, rval ) ) def get_dependencies( self ): """ @@ -1707,13 +1655,11 @@ class BaseDataToolParameter( ToolParameter ): def __init__( self, tool, input_source, trans ): super(BaseDataToolParameter, self).__init__( tool, input_source ) - def _get_history( self, trans, history=None ): + def _get_history( self, trans ): class_name = self.__class__.__name__ assert trans is not None, "%s requires a trans" % class_name - if history is None: - history = trans.get_history() - assert history is not None, "%s requires a history" % class_name - return history + assert trans.history is not None, "%s requires a history" % class_name + return trans.history def _ensure_selection( self, field ): set_selected = field.get_selected( return_label=True, return_value=True, multi=False ) is not None @@ -1822,7 +1768,7 @@ class DataToolParameter( BaseDataToolParameter ): conv_types = [ tool.app.datatypes_registry.get_datatype_by_extension( conv_extensions.lower() ) ] self.conversions.append( ( name, conv_extensions, conv_types ) ) - def get_html_field( self, trans=None, value=None, other_values={} ): + def get_html_field( self, trans, value=None, other_values={} ): if value is not None: if type( value ) != list: value = [ value ] @@ -1838,7 +1784,7 @@ class DataToolParameter( BaseDataToolParameter ): fields[ "multiselect_single" ] = multi_select if self.__display_multirun_option(): - collection_select = self._get_select_dataset_collection_fields( history, dataset_matcher, suffix="", reduction=True ) + collection_select = self._get_select_dataset_collection_fields( trans, dataset_matcher, suffix="", reduction=True ) if collection_select.get_selected(return_value=True): default_field = "multiselect_collection" fields[ "multiselect_collection" ] = collection_select @@ -1867,12 +1813,12 @@ class DataToolParameter( BaseDataToolParameter ): multi_dataset_matcher = DatasetMatcher( trans, self, multirun_value, other_values ) multi_select = self._get_select_dataset_field( history, multi_dataset_matcher, multiple=True, suffix="|__multirun__" ) fields[ "select_multiple" ] = multi_select - collection_field = self._get_select_dataset_collection_fields( history, dataset_matcher, multiple=False, reduction=False ) + collection_field = self._get_select_dataset_collection_fields( trans, dataset_matcher, multiple=False, reduction=False ) fields[ "select_collection" ] = collection_field return self._switch_fields( fields, default_field=default_field ) - def _get_select_dataset_collection_fields( self, history, dataset_matcher, multiple=False, suffix="|__collection_multirun__", reduction=False ): + def _get_select_dataset_collection_fields( self, trans, dataset_matcher, multiple=False, suffix="|__collection_multirun__", reduction=False ): if not reduction: def value_modifier(x): return x @@ -1888,11 +1834,11 @@ class DataToolParameter( BaseDataToolParameter ): field_name = "%s%s" % ( self.name, suffix ) field = form_builder.SelectField( field_name, multiple, None, self.refresh_on_change, refresh_on_change_values=self.refresh_on_change_values ) - for history_dataset_collection in self.match_collections( history, dataset_matcher, reduction=reduction ): + for history_dataset_collection in self.match_collections( trans.history, dataset_matcher, reduction=reduction ): name = history_dataset_collection.name hid = str( history_dataset_collection.hid ) hidden_text = "" # TODO - id = value_modifier( dataset_matcher.trans.security.encode_id( history_dataset_collection.id ) ) + id = value_modifier( trans.security.encode_id( history_dataset_collection.id ) ) selected = value and history_dataset_collection in value text = "%s:%s %s" % ( hid, hidden_text, name ) field.add_option( text, id, selected ) @@ -1949,19 +1895,19 @@ class DataToolParameter( BaseDataToolParameter ): for item in dataset_collector( history.active_datasets_children_and_roles, None ): yield item - def get_initial_value( self, trans, context, history=None ): - return self.get_initial_value_from_history_prevent_repeats(trans, context, None, history=history) + def get_initial_value( self, trans, other_values ): + return self.get_initial_value_from_history_prevent_repeats(trans, other_values, None ) - def get_initial_value_from_history_prevent_repeats( self, trans, context, already_used, history=None ): + def get_initial_value_from_history_prevent_repeats( self, trans, other_values, already_used ): """ NOTE: This is wasteful since dynamic options and dataset collection happens twice (here and when generating HTML). """ # Can't look at history in workflow mode. Tool shed has no histories. - if trans is None or trans.workflow_building_mode or trans.webapp.name == 'tool_shed': + if trans.workflow_building_mode or trans.app.name == 'tool_shed': return DummyDataset() - history = self._get_history( trans, history ) - dataset_matcher = DatasetMatcher( trans, self, None, context ) + history = self._get_history( trans ) + dataset_matcher = DatasetMatcher( trans, self, None, other_values ) if self.optional: return None most_recent_dataset = [] @@ -1994,7 +1940,7 @@ class DataToolParameter( BaseDataToolParameter ): return None if not value and not self.optional: raise ValueError( "History does not include a dataset of the required format / build" ) - if value in [None, "None", '']: + if value in [ None, "None", '' ]: return None if isinstance( value, str ) and value.find( "," ) > 0: value = [ int( value_part ) for value_part in value.split( "," ) ] @@ -2004,10 +1950,10 @@ class DataToolParameter( BaseDataToolParameter ): for single_value in value: if isinstance( single_value, dict ) and 'src' in single_value and 'id' in single_value: if single_value['src'] == 'hda': - rval.append(trans.sa_session.query( trans.app.model.HistoryDatasetAssociation ).get( trans.app.security.decode_id(single_value['id']) )) + rval.append( trans.sa_session.query( trans.app.model.HistoryDatasetAssociation ).get( trans.security.decode_id(single_value['id']) )) elif single_value['src'] == 'hdca': found_hdca = True - decoded_id = trans.app.security.decode_id( single_value[ 'id' ] ) + decoded_id = trans.security.decode_id( single_value[ 'id' ] ) rval.append( trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( decoded_id ) ) else: raise ValueError("Unknown input source %s passed to job submission API." % single_value['src']) @@ -2025,15 +1971,15 @@ class DataToolParameter( BaseDataToolParameter ): rval = value elif isinstance( value, dict ) and 'src' in value and 'id' in value: if value['src'] == 'hda': - rval = trans.sa_session.query( trans.app.model.HistoryDatasetAssociation ).get( trans.app.security.decode_id(value['id']) ) + rval = trans.sa_session.query( trans.app.model.HistoryDatasetAssociation ).get( trans.security.decode_id(value['id']) ) elif value['src'] == 'hdca': - decoded_id = trans.app.security.decode_id( value[ 'id' ] ) + decoded_id = trans.security.decode_id( value[ 'id' ] ) rval = trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( decoded_id ) else: raise ValueError("Unknown input source %s passed to job submission API." % value['src']) elif str( value ).startswith( "__collection_reduce__|" ): encoded_ids = [ v[ len( "__collection_reduce__|" ): ] for v in str( value ).split(",") ] - decoded_ids = map( trans.app.security.decode_id, encoded_ids ) + decoded_ids = map( trans.security.decode_id, encoded_ids ) rval = [] for decoded_id in decoded_ids: hdca = trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( decoded_id ) @@ -2114,9 +2060,15 @@ class DataToolParameter( BaseDataToolParameter ): pass return "No dataset" - def validate( self, value, history=None, workflow_building_mode=False ): + def validate( self, value, trans=None ): dataset_count = 0 for validator in self.validators: + def do_validate( v ): + if validator.requires_dataset_metadata and v and v.dataset.state != galaxy.model.Dataset.states.OK: + return + else: + validator.validate( v, trans ) + if value and self.multiple: if not isinstance( value, list ): value = [ value ] @@ -2124,14 +2076,14 @@ class DataToolParameter( BaseDataToolParameter ): if isinstance(v, galaxy.model.HistoryDatasetCollectionAssociation): for dataset_instance in v.collection.dataset_instances: dataset_count += 1 - validator.validate( dataset_instance, history ) + do_validate( dataset_instance ) else: dataset_count += 1 - validator.validate( v, history ) + do_validate( v ) else: if value: dataset_count += 1 - validator.validate( value, history ) + do_validate( value ) if self.min is not None: if self.min > dataset_count: @@ -2214,29 +2166,27 @@ class DataToolParameter( BaseDataToolParameter ): if history is None: return d + # build and append a new select option + def append( list, id, hid, name, src ): + return list.append( { 'id' : trans.security.encode_id( id ), 'hid' : hid, 'name' : name, 'src' : src } ) + # add datasets visible_hda = other_values.get( self.name ) + has_matched = False for hda in history.active_datasets_children_and_roles: match = dataset_matcher.hda_match( hda, ensure_visible=visible_hda != hda ) if match: m = match.hda - d['options']['hda'].append({ - 'id' : trans.security.encode_id( m.id ), - 'hid' : m.hid, - 'name' : m.name if m.visible else '(hidden) %s' % m.name, - 'src' : 'hda' - }) + has_matched = has_matched or visible_hda == m + append( d[ 'options' ][ 'hda' ], m.id, m.hid, m.name if m.visible else '(hidden) %s' % m.name, 'hda' ) + if not has_matched and isinstance( visible_hda, trans.app.model.HistoryDatasetAssociation ): + append( d[ 'options' ][ 'hda' ], visible_hda.id, visible_hda.hid, '(unavailable) %s' % visible_hda.name, 'hda' ) # add dataset collections dataset_collection_matcher = DatasetCollectionMatcher( dataset_matcher ) for hdca in history.active_dataset_collections: if dataset_collection_matcher.hdca_match( hdca, reduction=multiple ): - d['options']['hdca'].append({ - 'id' : trans.security.encode_id( hdca.id ), - 'hid' : hdca.hid, - 'name' : hdca.name, - 'src' : 'hdca' - }) + append( d[ 'options' ][ 'hdca' ], hdca.id, hdca.hid, hdca.name, 'hdca' ) # sort both lists d['options']['hda'] = sorted(d['options']['hda'], key=lambda k: k['hid'], reverse=True) @@ -2334,8 +2284,8 @@ class DataCollectionToolParameter( BaseDataToolParameter ): name = history_dataset_collection.name hid = str( history_dataset_collection.hid ) hidden_text = "" # TODO - subcollection_type = self._history_query( trans ).collection_type_description.collection_type - id = "%s|%s" % ( dataset_matcher.trans.security.encode_id( history_dataset_collection.id ), subcollection_type ) + subcollection_type = self._history_query( trans ).can_map_over( history_dataset_collection ).collection_type + id = "%s|%s" % ( trans.security.encode_id( history_dataset_collection.id ), subcollection_type ) text = "%s:%s %s" % ( hid, hidden_text, name ) field.add_option( text, id, False ) @@ -2358,13 +2308,13 @@ class DataCollectionToolParameter( BaseDataToolParameter ): rval = value elif isinstance( value, dict ) and 'src' in value and 'id' in value: if value['src'] == 'hdca': - rval = trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( trans.app.security.decode_id(value['id']) ) + rval = trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( trans.security.decode_id(value['id']) ) elif isinstance( value, list ): if len( value ) > 0: value = value[0] if isinstance( value, dict ) and 'src' in value and 'id' in value: if value['src'] == 'hdca': - rval = trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( trans.app.security.decode_id(value['id']) ) + rval = trans.sa_session.query( trans.app.model.HistoryDatasetCollectionAssociation ).get( trans.security.decode_id(value['id']) ) elif isinstance( value, basestring ): if value.startswith( "dce:" ): rval = trans.sa_session.query( trans.app.model.DatasetCollectionElement ).get( value[ len( "dce:"): ] ) @@ -2420,7 +2370,7 @@ class DataCollectionToolParameter( BaseDataToolParameter ): display_text = "No dataset collection." return display_text - def validate( self, value, history=None, workflow_building_mode=False ): + def validate( self, value, trans=None ): return True # TODO def to_dict( self, trans, view='collection', value_mapper=None, other_values=None ): @@ -2449,7 +2399,7 @@ class DataCollectionToolParameter( BaseDataToolParameter ): # append matching subcollections for hdca in self.match_multirun_collections( trans, history, dataset_matcher ): - subcollection_type = self._history_query( trans ).collection_type_description.collection_type + subcollection_type = self._history_query( trans ).can_map_over( hdca ).collection_type d['options']['hdca'].append({ 'id': trans.security.encode_id( hdca.id ), 'hid': hdca.hid, @@ -2476,7 +2426,7 @@ class HiddenDataToolParameter( HiddenToolParameter, DataToolParameter ): self.type = "hidden_data" self.hidden = True - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): return None def get_html_field( self, trans=None, value=None, other_values={} ): @@ -2496,7 +2446,7 @@ class LibraryDatasetToolParameter( ToolParameter ): def get_html_field( self, trans=None, value=None, other_values={} ): return form_builder.LibraryField( self.name, value=value, trans=trans ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, other_values ): return None def from_html( self, value, trans, other_values={} ): @@ -2577,59 +2527,6 @@ class LibraryDatasetToolParameter( ToolParameter ): d['multiple'] = self.multiple return d - -def _allow_workflow_parameters_in_context(trans): - return trans is None or trans.workflow_building_mode - - -# class RawToolParameter( ToolParameter ): -# """ -# Completely nondescript parameter, HTML representation is provided as text -# contents. -# -# >>> p = RawToolParameter( None, XML( -# ... ''' -# ... -# ... Some random stuff]]> -# ... -# ... ''' ) ) -# >>> print p.name -# blah -# >>> print p.get_html().strip() -# Some random stuff -# """ -# def __init__( self, tool, elem ): -# ToolParameter.__init__( self, tool, elem ) -# self.template = string.Template( elem.text ) -# def get_html( self, prefix="" ): -# context = dict( self.__dict__ ) -# context.update( dict( prefix=prefix ) ) -# return self.template.substitute( context ) - -# class HistoryIDParameter( ToolParameter ): -# """ -# Parameter that takes a name value, makes history.id available. -# -# FIXME: This is a hack (esp. if hidden params are a hack) but in order to -# have the history accessable at the job level, it is necessary -# I also probably wrote this docstring test thing wrong. -# -# >>> from galaxy.model import History -# >>> from galaxy.util.bunch import Bunch -# >>> hist = History( id=1 ) -# >>> p = HistoryIDParameter( None, XML( '' ) ) -# >>> print p.name -# blah -# >>> html_string = '' % hist.id -# >>> assert p.get_html( trans=Bunch( history=hist ) ) == html_string -# """ -# def __init__( self, tool, elem ): -# ToolParameter.__init__( self, tool, elem ) -# def get_html( self, trans, value=None, other_values={} ): -# assert trans.history is not None, "HistoryIDParameter requires a history" -# self.html = form_builder.HiddenField( self.name, trans.history.id ).get_html() -# return self.html - parameter_types = dict( text=TextToolParameter, integer=IntegerToolParameter, @@ -2651,17 +2548,6 @@ parameter_types = dict( ) -class UnvalidatedValue( object ): - """ - Wrapper to mark a value that has not been validated - """ - def __init__( self, value ): - self.value = value - - def __str__( self ): - return str( self.value ) - - class RuntimeValue( object ): """ Wrapper to note a value that is not yet set, but will be required at diff --git a/lib/galaxy/tools/parameters/dynamic_options.py b/lib/galaxy/tools/parameters/dynamic_options.py index e6cb93350fd..c70a385f27c 100644 --- a/lib/galaxy/tools/parameters/dynamic_options.py +++ b/lib/galaxy/tools/parameters/dynamic_options.py @@ -5,7 +5,6 @@ on the values of other parameters or other aspects of the current state) import logging import os -import basic import validation from galaxy.util import string_as_bool from galaxy.model import User @@ -148,7 +147,7 @@ class DataMetaFilter( Filter ): meta_value = ref.metadata.get( self.key, None ) if meta_value is None: # assert meta_value is not None, "Required metadata value '%s' not found in referenced dataset" % self.key - return [ ( disp_name, basic.UnvalidatedValue( optval ), selected ) for disp_name, optval, selected in options ] + return [ ( disp_name, optval, selected ) for disp_name, optval, selected in options ] if self.column is not None: rval = [] diff --git a/lib/galaxy/tools/parameters/grouping.py b/lib/galaxy/tools/parameters/grouping.py index ecd006b934a..b667daa35f3 100644 --- a/lib/galaxy/tools/parameters/grouping.py +++ b/lib/galaxy/tools/parameters/grouping.py @@ -43,7 +43,7 @@ class Group( object, Dictifiable ): """ return value - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, context ): """ Return the initial state/value for this group """ @@ -120,12 +120,12 @@ class Repeat( Group ): else: input.visit_inputs( new_prefix, d[input.name], callback ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, context ): rval = [] for i in range( self.default ): rval_dict = { '__index__': i} for input in self.inputs.itervalues(): - rval_dict[ input.name ] = input.get_initial_value( trans, context, history=history ) + rval_dict[ input.name ] = input.get_initial_value( trans, context ) rval.append( rval_dict ) return rval @@ -182,11 +182,11 @@ class Section( Group ): else: input.visit_inputs( prefix, value[input.name], callback ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, context ): rval = {} child_context = ExpressionContext( rval, context ) for child_input in self.inputs.itervalues(): - rval[ child_input.name ] = child_input.get_initial_value( trans, child_context, history=history ) + rval[ child_input.name ] = child_input.get_initial_value( trans, child_context ) return rval def to_dict( self, trans, view='collection', value_mapper=None ): @@ -296,14 +296,14 @@ class UploadDataset( Group ): else: input.visit_inputs( new_prefix, d[input.name], callback ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, context ): d_type = self.get_datatype( trans, context ) rval = [] for i, ( composite_name, composite_file ) in enumerate( d_type.writable_files.iteritems() ): rval_dict = {} rval_dict['__index__'] = i # create __index__ for input in self.inputs.itervalues(): - rval_dict[ input.name ] = input.get_initial_value( trans, context, history=history ) # input.value_to_basic( d[input.name], app ) + rval_dict[ input.name ] = input.get_initial_value( trans, context ) rval.append( rval_dict ) return rval @@ -323,11 +323,9 @@ class UploadDataset( Group ): if not dataset_info: dataset_info = 'uploaded file' return Bunch( type='file', path=data_file['local_filename'], name=dataset_name ) - # return 'file', data_file['local_filename'], get_file_name( data_file.filename ), dataset_name, dataset_info except: # The uploaded file should've been persisted by the upload tool action return Bunch( type=None, path=None, name=None ) - # return None, None, None, None, None def get_url_paste_urls_or_filename( group_incoming, override_name=None, override_info=None ): url_paste_file = group_incoming.get( 'url_paste', None ) @@ -347,7 +345,6 @@ class UploadDataset( Group ): if not dataset_info: dataset_info = 'uploaded url' yield Bunch( type='url', path=line, name=dataset_name ) - # yield ( 'url', line, precreated_name, dataset_name, dataset_info ) else: dataset_name = dataset_info = precreated_name = 'Pasted Entry' # we need to differentiate between various url pastes here if override_name: @@ -355,7 +352,6 @@ class UploadDataset( Group ): if override_info: dataset_info = override_info yield Bunch( type='file', path=url_paste_file, name=precreated_name ) - # yield ( 'file', url_paste_file, precreated_name, dataset_name, dataset_info ) def get_one_filename( context ): data_file = context['file_data'] @@ -561,7 +557,7 @@ class Conditional( Group ): if isinstance( value, bool ): str_value = self.test_param.to_param_dict_string( value ) else: - str_value = self.test_param.filter_value( value, trans ) + str_value = value # Find the matching case for index, case in enumerate( self.cases ): if str_value == case.value: @@ -611,12 +607,12 @@ class Conditional( Group ): else: input.visit_inputs( prefix, value[input.name], callback ) - def get_initial_value( self, trans, context, history=None ): + def get_initial_value( self, trans, context ): # State for a conditional is a plain dictionary. rval = {} # Get the default value for the 'test element' and use it # to determine the current case - test_value = self.test_param.get_initial_value( trans, context, history=history ) + test_value = self.test_param.get_initial_value( trans, context ) current_case = self.get_current_case( test_value, trans ) # Store the current case in a special value rval['__current_case__'] = current_case @@ -625,7 +621,7 @@ class Conditional( Group ): # Fill in state for selected case child_context = ExpressionContext( rval, context ) for child_input in self.cases[current_case].inputs.itervalues(): - rval[ child_input.name ] = child_input.get_initial_value( trans, child_context, history=history ) + rval[ child_input.name ] = child_input.get_initial_value( trans, child_context ) return rval def to_dict( self, trans, view='collection', value_mapper=None ): diff --git a/lib/galaxy/tools/parameters/validation.py b/lib/galaxy/tools/parameters/validation.py index ff618ec98b6..d802fd8429e 100644 --- a/lib/galaxy/tools/parameters/validation.py +++ b/lib/galaxy/tools/parameters/validation.py @@ -10,16 +10,11 @@ from galaxy import util log = logging.getLogger( __name__ ) -class LateValidationError( Exception ): - - def __init__( self, message ): - self.message = message - - class Validator( object ): """ A validator checks that a value meets some conditions OR raises ValueError """ + requires_dataset_metadata = False @classmethod def from_element( cls, param, elem ): @@ -27,7 +22,7 @@ class Validator( object ): assert type is not None, "Required 'type' attribute missing from validator" return validator_types[type].from_element( param, elem ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): raise TypeError( "Abstract Method" ) @@ -60,7 +55,7 @@ class RegexValidator( Validator ): # the sre module. self.expression = expression - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if re.match( self.expression, value ) is None: raise ValueError( self.message ) @@ -94,7 +89,7 @@ class ExpressionValidator( Validator ): # Save compiled expression, code objects are thread safe (right?) self.expression = compile( expression, '', 'eval' ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if not( eval( self.expression, dict( value=value ) ) ): message = self.message if self.substitute_value_in_message: @@ -155,7 +150,7 @@ class InRangeValidator( Validator ): op2 = '<' self.message = message or "Value must be %s %s and %s %s" % ( op1, self_min_str, op2, self_max_str ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if self.exclude_min: if not self.min < float( value ): raise ValueError( self.message ) @@ -206,7 +201,7 @@ class LengthValidator( Validator ): self.min = length_min self.max = length_max - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if self.min is not None and len( value ) < self.min: raise ValueError( self.message or ( "Must have length of at least %d" % self.min ) ) if self.max is not None and len( value ) > self.max: @@ -225,7 +220,7 @@ class DatasetOkValidator( Validator ): def from_element( cls, param, elem ): return cls( elem.get( 'message', None ) ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if value and value.state != model.Dataset.states.OK: if self.message is None: self.message = "The selected dataset is still being generated, select another dataset or wait until it is completed" @@ -236,6 +231,7 @@ class MetadataValidator( Validator ): """ Validator that checks for missing metadata """ + requires_dataset_metadata = True def __init__( self, message=None, check="", skip="" ): self.message = message @@ -246,7 +242,7 @@ class MetadataValidator( Validator ): def from_element( cls, param, elem ): return cls( message=elem.get( 'message', None ), check=elem.get( 'check', "" ), skip=elem.get( 'skip', "" ) ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if value: if not isinstance( value, model.DatasetInstance ): raise ValueError( 'A non-dataset value was provided.' ) @@ -260,6 +256,7 @@ class UnspecifiedBuildValidator( Validator ): """ Validator that checks for dbkey not equal to '?' """ + requires_dataset_metadata = True def __init__( self, message=None ): if message is None: @@ -271,7 +268,7 @@ class UnspecifiedBuildValidator( Validator ): def from_element( cls, param, elem ): return cls( elem.get( 'message', None ) ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): # if value is None, we cannot validate if value: dbkey = value.metadata.dbkey @@ -291,7 +288,7 @@ class NoOptionsValidator( Validator ): def from_element( cls, param, elem ): return cls( elem.get( 'message', None ) ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if value is None: if self.message is None: self.message = "No options available for selection" @@ -308,7 +305,7 @@ class EmptyTextfieldValidator( Validator ): def from_element( cls, param, elem ): return cls( elem.get( 'message', None ) ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if value == '': if self.message is None: self.message = "Field requires a value" @@ -319,6 +316,7 @@ class MetadataInFileColumnValidator( Validator ): """ Validator that checks if the value for a dataset's metadata item exists in a file. """ + requires_dataset_metadata = True @classmethod def from_element( cls, param, elem ): @@ -345,7 +343,7 @@ class MetadataInFileColumnValidator( Validator ): if metadata_column < len( fields ): self.valid_values.append( fields[metadata_column].strip() ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if not value: return if hasattr( value, "metadata" ): @@ -358,6 +356,7 @@ class MetadataInDataTableColumnValidator( Validator ): """ Validator that checks if the value for a dataset's metadata item exists in a file. """ + requires_dataset_metadata = True @classmethod def from_element( cls, param, elem ): @@ -396,7 +395,7 @@ class MetadataInDataTableColumnValidator( Validator ): if self._metadata_column < len( fields ): self.valid_values.append( fields[ self._metadata_column ] ) - def validate( self, value, history=None ): + def validate( self, value, trans=None ): if not value: return if hasattr( value, "metadata" ): diff --git a/lib/galaxy/tools/parameters/wrapped.py b/lib/galaxy/tools/parameters/wrapped.py index becf89f4872..c97692f46ea 100644 --- a/lib/galaxy/tools/parameters/wrapped.py +++ b/lib/galaxy/tools/parameters/wrapped.py @@ -58,7 +58,8 @@ class WrappedParameters( object ): value = input_values[ input.name ] dataset_instances = DatasetListWrapper.to_dataset_instances( value ) input_values[ input.name ] = \ - DatasetListWrapper( dataset_instances, + DatasetListWrapper( None, + dataset_instances, datatypes_registry=trans.app.datatypes_registry, tool=tool, name=input.name ) @@ -72,6 +73,7 @@ class WrappedParameters( object ): input_values[ input.name ] = SelectToolParameterWrapper( input, input_values[ input.name ], tool.app, other_values=incoming ) elif isinstance( input, DataCollectionToolParameter ): input_values[ input.name ] = DatasetCollectionWrapper( + None, input_values[ input.name ], datatypes_registry=trans.app.datatypes_registry, tool=tool, diff --git a/lib/galaxy/tools/special_tools.py b/lib/galaxy/tools/special_tools.py index b0bfb7de74d..4aa82a0f1d1 100644 --- a/lib/galaxy/tools/special_tools.py +++ b/lib/galaxy/tools/special_tools.py @@ -10,4 +10,4 @@ SPECIAL_TOOLS = { def load_lib_tools( toolbox ): for name, path in SPECIAL_TOOLS.items(): tool = toolbox.load_hidden_lib_tool( path ) - log.debug( "Loaded %s tool: %s", ( name, tool.id ) ) + log.debug( "Loaded %s tool: %s", name, tool.id ) diff --git a/lib/galaxy/tools/toolbox/base.py b/lib/galaxy/tools/toolbox/base.py index fd3df54c2a0..01e9af96d0e 100644 --- a/lib/galaxy/tools/toolbox/base.py +++ b/lib/galaxy/tools/toolbox/base.py @@ -220,6 +220,7 @@ class AbstractToolBox( Dictifiable, ManagesIntegratedToolPanelMixin, object ): tool_section = ToolSection( section_dict ) self._tool_panel.append_section( tool_panel_section_key, tool_section ) log.debug( "Loading new tool panel section: %s" % str( tool_section.name ) ) + self._save_integrated_tool_panel() else: tool_section = None return tool_panel_section_key, tool_section diff --git a/lib/galaxy/tools/wrappers.py b/lib/galaxy/tools/wrappers.py index f61cb1aca18..f0a7ca50f87 100644 --- a/lib/galaxy/tools/wrappers.py +++ b/lib/galaxy/tools/wrappers.py @@ -1,4 +1,6 @@ +import os import pipes +import tempfile from galaxy import exceptions from galaxy.util.none_like import NoneDataset from galaxy.util import odict @@ -263,11 +265,18 @@ class HasDatasets: wrapper_kwds[ "dataset_path" ] = dataset_paths[ real_path ] return DatasetFilenameWrapper( dataset, **wrapper_kwds ) + def paths_as_file(self, sep="\n"): + handle, filepath = tempfile.mkstemp(prefix="gx_file_list", dir=self.job_working_directory) + contents = sep.join(map(str, self)) + os.write(handle, contents) + os.close(handle) + return filepath + class DatasetListWrapper( list, ToolParameterValueWrapper, HasDatasets ): """ """ - def __init__( self, datasets, dataset_paths=[], **kwargs ): + def __init__( self, job_working_directory, datasets, dataset_paths=[], **kwargs ): if not isinstance(datasets, list): datasets = [datasets] @@ -279,6 +288,7 @@ class DatasetListWrapper( list, ToolParameterValueWrapper, HasDatasets ): return self._dataset_wrapper( dataset, dataset_paths, **kwargs ) list.__init__( self, map( to_wrapper, datasets ) ) + self.job_working_directory = job_working_directory @staticmethod def to_dataset_instances( dataset_instance_sources ): @@ -300,8 +310,9 @@ class DatasetListWrapper( list, ToolParameterValueWrapper, HasDatasets ): class DatasetCollectionWrapper( ToolParameterValueWrapper, HasDatasets ): - def __init__( self, has_collection, dataset_paths=[], **kwargs ): + def __init__( self, job_working_directory, has_collection, dataset_paths=[], **kwargs ): super(DatasetCollectionWrapper, self).__init__() + self.job_working_directory = job_working_directory if has_collection is None: self.__input_supplied = False @@ -330,7 +341,7 @@ class DatasetCollectionWrapper( ToolParameterValueWrapper, HasDatasets ): element_identifier = dataset_collection_element.element_identifier if dataset_collection_element.is_collection: - element_wrapper = DatasetCollectionWrapper( dataset_collection_element, dataset_paths, **kwargs ) + element_wrapper = DatasetCollectionWrapper(job_working_directory, dataset_collection_element, dataset_paths, **kwargs ) else: element_wrapper = self._dataset_wrapper( element_object, dataset_paths, **kwargs) diff --git a/lib/galaxy/util/__init__.py b/lib/galaxy/util/__init__.py index 0943663d304..d7cea7115f8 100644 --- a/lib/galaxy/util/__init__.py +++ b/lib/galaxy/util/__init__.py @@ -568,6 +568,21 @@ def which(file): return None +def safe_makedirs(path): + """ Safely make a directory, do not fail if it already exist or + is created during execution. + """ + if not os.path.exists(path): + try: + os.makedirs(path) + except OSError as e: + # review source for Python 2.7 this would only ever happen + # for the last path anyway so need to recurse - this exception + # means the last part of the path was already in existence. + if e.errno != errno.EEXIST: + raise + + def in_directory( file, directory, local_path_module=os.path ): """ Return true, if the common prefix of both is equal to directory diff --git a/lib/galaxy/util/heartbeat.py b/lib/galaxy/util/heartbeat.py index d9be8104e54..203f70e860b 100644 --- a/lib/galaxy/util/heartbeat.py +++ b/lib/galaxy/util/heartbeat.py @@ -33,59 +33,77 @@ class Heartbeat( threading.Thread ): """ Thread that periodically dumps the state of all threads to a file """ - def __init__( self, name="Heartbeat Thread", period=20, fname="heartbeat.log" ): + def __init__( self, config, name="Heartbeat Thread", period=20, fname="heartbeat.log" ): threading.Thread.__init__( self, name=name ) + self.config = config self.should_stop = False self.period = period self.fname = fname self.file = None - self.fname_nonsleeping = fname + ".nonsleeping" + self.fname_nonsleeping = None self.file_nonsleeping = None + self.pid = None self.nonsleeping_heartbeats = { } - # Save process id - self.pid = os.getpid() # Event to wait on when sleeping, allows us to interrupt for shutdown self.wait_event = threading.Event() def run( self ): - self.file = open( self.fname, "a" ) - print >> self.file, "Heartbeat for pid %d thread started at %s" % ( self.pid, time.asctime() ) - print >> self.file - self.file_nonsleeping = open( self.fname_nonsleeping, "a" ) - print >> self.file_nonsleeping, "Non-Sleeping-threads for pid %d thread started at %s" % ( self.pid, time.asctime() ) - print >> self.file_nonsleeping - try: - while not self.should_stop: - # Print separator with timestamp - print >> self.file, "Traceback dump for all threads at %s:" % time.asctime() - print >> self.file - # Print the thread states - threads = get_current_thread_object_dict() - for thread_id, frame in iteritems(sys._current_frames()): - if thread_id in threads: - object = repr( threads[thread_id] ) - else: - object = "" - print >> self.file, "Thread %s, %s:" % ( thread_id, object ) - print >> self.file - traceback.print_stack( frame, file=self.file ) - print >> self.file - print >> self.file, "End dump" - print >> self.file - self.file.flush() - self.print_nonsleeping(threads) - # Sleep for a bit - self.wait_event.wait( self.period ) - finally: - print >> self.file, "Heartbeat for pid %d thread stopped at %s" % ( self.pid, time.asctime() ) - print >> self.file - # Cleanup + self.pid = os.getpid() + self.fname = self.fname.format( + server_name=self.config.server_name, + pid=self.pid + ) + fname, ext = os.path.splitext(self.fname) + self.fname_nonsleeping = fname + '.nonsleeping' + ext + wait = self.period + if self.period <= 0: + wait = 60 + while not self.should_stop: + if self.period > 0: + self.dump() + self.wait_event.wait( wait ) + + def open_logs( self ): + if self.file is None or self.file.closed: + self.file = open( self.fname, "a" ) + self.file_nonsleeping = open( self.fname_nonsleeping, "a" ) + self.file.write( "Heartbeat for pid %d thread started at %s\n\n" % ( self.pid, time.asctime() ) ) + self.file_nonsleeping.write( "Non-Sleeping-threads for pid %d thread started at %s\n\n" % ( self.pid, time.asctime() ) ) + + def close_logs( self ): + if self.file is not None and not self.file.closed: + self.file.write( "Heartbeat for pid %d thread stopped at %s\n\n" % ( self.pid, time.asctime() ) ) + self.file_nonsleeping.write( "Non-Sleeping-threads for pid %d thread stopped at %s\n\n" % ( self.pid, time.asctime() ) ) self.file.close() self.file_nonsleeping.close() + def dump( self ): + self.open_logs() + try: + # Print separator with timestamp + self.file.write( "Traceback dump for all threads at %s:\n\n" % time.asctime() ) + # Print the thread states + threads = get_current_thread_object_dict() + for thread_id, frame in iteritems(sys._current_frames()): + if thread_id in threads: + object = repr( threads[thread_id] ) + else: + object = "" + self.file.write( "Thread %s, %s:\n\n" % ( thread_id, object ) ) + traceback.print_stack( frame, file=self.file ) + self.file.write( "\n" ) + self.file.write( "End dump\n\n" ) + self.file.flush() + self.print_nonsleeping(threads) + except: + self.file.write( "Caught exception attempting to dump thread states:" ) + traceback.print_exc( None, self.file ) + self.file.write( "\n" ) + def shutdown( self ): self.should_stop = True self.wait_event.set() + self.close_logs() self.join() def thread_is_sleeping( self, last_stack_frame ): @@ -107,7 +125,8 @@ class Heartbeat( threading.Thread ): return True if _funcname == "accept" and _text[-14:] == "_sock.accept()": return True - if _funcname == "monitor" and _text.startswith("time.sleep( ") and _text.endswith(" )"): + if _funcname in ("monitor", "__monitor", "app_loop", "check") \ + and _text.startswith("time.sleep(") and _text.endswith(")"): return True if _funcname == "drain_events" and _text == "sleep(polling_interval)": return True @@ -139,8 +158,7 @@ class Heartbeat( threading.Thread ): return stack_frames[-1] def print_nonsleeping( self, threads_object_dict ): - print >> self.file_nonsleeping, "Non-Sleeping threads at %s:" % time.asctime() - print >> self.file_nonsleeping + self.file_nonsleeping.write( "Non-Sleeping threads at %s:\n\n" % time.asctime() ) all_threads_are_sleeping = True threads = get_current_thread_object_dict() for thread_id, frame in iteritems(sys._current_frames()): @@ -161,11 +179,14 @@ class Heartbeat( threading.Thread ): self.nonsleeping_heartbeats[thread_id] = 1 good_frame = self.get_interesting_stack_frame(tb) - print >> self.file_nonsleeping, "Thread %s\t%s\tnon-sleeping for %d heartbeat(s)\n File %s:%d\n Function \"%s\"\n %s" % \ - ( thread_id, object, self.nonsleeping_heartbeats[thread_id], good_frame[0], good_frame[1], good_frame[2], good_frame[3] ) + self.file_nonsleeping.write( "Thread %s\t%s\tnon-sleeping for %d heartbeat(s)\n File %s:%d\n Function \"%s\"\n %s\n" % + ( thread_id, object, self.nonsleeping_heartbeats[thread_id], good_frame[0], good_frame[1], good_frame[2], good_frame[3] ) ) all_threads_are_sleeping = False if all_threads_are_sleeping: - print >> self.file_nonsleeping, "All threads are sleeping." - print >> self.file_nonsleeping + self.file_nonsleeping.write( "All threads are sleeping.\n" ) + self.file_nonsleeping.write( "\n" ) self.file_nonsleeping.flush() + + def dump_signal_handler( self, signum, frame ): + self.dump() diff --git a/lib/galaxy/visualization/data_providers/genome.py b/lib/galaxy/visualization/data_providers/genome.py index a8706dfe6f1..a4d0a9a0121 100644 --- a/lib/galaxy/visualization/data_providers/genome.py +++ b/lib/galaxy/visualization/data_providers/genome.py @@ -847,11 +847,11 @@ class BamDataProvider( GenomeDataProvider, FilterableMixin ): """ # Open current BAM file using index. - bamfile = pysam.AlignmentFile( filename=self.original_dataset.file_name, mode='rb', + bamfile = pysam.AlignmentFile( self.original_dataset.file_name, mode='rb', index_filename=self.converted_dataset.file_name ) # TODO: write headers as well? - new_bamfile = pysam.AlignmentFile( template=bamfile, filename=filename, mode='wb' ) + new_bamfile = pysam.AlignmentFile( filename, template=bamfile, mode='wb' ) for region in regions: # Write data from region. @@ -879,7 +879,7 @@ class BamDataProvider( GenomeDataProvider, FilterableMixin ): def open_data_file( self ): # Attempt to open the BAM file with index - return pysam.AlignmentFile( filename=self.original_dataset.file_name, mode='rb', + return pysam.AlignmentFile( self.original_dataset.file_name, mode='rb', index_filename=self.converted_dataset.file_name ) def get_iterator( self, data_file, chrom, start, end, **kwargs ): diff --git a/lib/galaxy/webapps/galaxy/api/folder_contents.py b/lib/galaxy/webapps/galaxy/api/folder_contents.py index 19678837d11..c58235570fc 100644 --- a/lib/galaxy/webapps/galaxy/api/folder_contents.py +++ b/lib/galaxy/webapps/galaxy/api/folder_contents.py @@ -84,6 +84,8 @@ class FolderContentsController( BaseAPIController, UsesLibraryMixin, UsesLibrary can_modify = is_admin or ( trans.user and trans.app.security_agent.can_modify_library_item( current_user_roles, folder ) ) can_manage = is_admin or ( trans.user and trans.app.security_agent.can_manage_library_item( current_user_roles, folder ) ) return_item.update( dict( can_modify=can_modify, can_manage=can_manage ) ) + if content_item.description: + return_item.update( dict( description=content_item.description ) ) if content_item.api_type == 'file': # Is the dataset public or private? @@ -107,7 +109,10 @@ class FolderContentsController( BaseAPIController, UsesLibraryMixin, UsesLibrary is_unrestricted=is_unrestricted, is_private=is_private, can_manage=can_manage, - file_size=nice_size ) ) + file_size=nice_size + ) ) + if content_item.library_dataset_dataset_association.message: + return_item.update( dict( message=content_item.library_dataset_dataset_association.message ) ) # For every item include the default metadata return_item.update( dict( id=encoded_id, diff --git a/lib/galaxy/webapps/galaxy/api/lda_datasets.py b/lib/galaxy/webapps/galaxy/api/lda_datasets.py index 5fbe9ccfc33..52a96c93ce9 100644 --- a/lib/galaxy/webapps/galaxy/api/lda_datasets.py +++ b/lib/galaxy/webapps/galaxy/api/lda_datasets.py @@ -392,6 +392,8 @@ class LibraryDatasetsController( BaseAPIController, UsesVisualizationMixin ): trans.sa_session.flush() rval = trans.security.encode_all_ids( dataset.to_dict() ) + nice_size = util.nice_size( int( dataset.library_dataset_dataset_association.get_size() ) ) + rval[ 'file_size' ] = nice_size rval[ 'update_time' ] = dataset.update_time.strftime( "%Y-%m-%d %I:%M %p" ) rval[ 'deleted' ] = dataset.deleted rval[ 'folder_id' ] = 'F' + rval[ 'folder_id' ] @@ -488,16 +490,15 @@ class LibraryDatasetsController( BaseAPIController, UsesVisualizationMixin ): kwd[ 'filesystem_paths' ] = path if source in [ 'importdir_folder' ]: kwd[ 'filesystem_paths' ] = os.path.join( import_base_dir, path ) - params = util.Params( kwd ) # user wants to import one file only if source in [ "userdir_file", "importdir_file" ]: file = os.path.abspath( path ) abspath_datasets.append( trans.webapp.controllers[ 'library_common' ].make_library_uploaded_dataset( - trans, 'api', params, os.path.basename( file ), file, 'server_dir', library_bunch ) ) + trans, 'api', kwd, os.path.basename( file ), file, 'server_dir', library_bunch ) ) # user wants to import whole folder if source == "userdir_folder": uploaded_datasets_bunch = trans.webapp.controllers[ 'library_common' ].get_path_paste_uploaded_datasets( - trans, 'api', params, library_bunch, 200, '' ) + trans, 'api', kwd, library_bunch, 200, '' ) uploaded_datasets = uploaded_datasets_bunch[ 0 ] if uploaded_datasets is None: raise exceptions.ObjectNotFound( 'Given folder does not contain any datasets.' ) @@ -508,7 +509,7 @@ class LibraryDatasetsController( BaseAPIController, UsesVisualizationMixin ): if source in [ "admin_path", "importdir_folder" ]: # validate the path is within root uploaded_datasets_bunch = trans.webapp.controllers[ 'library_common' ].get_path_paste_uploaded_datasets( - trans, 'api', params, library_bunch, 200, '' ) + trans, 'api', kwd, library_bunch, 200, '' ) uploaded_datasets = uploaded_datasets_bunch[0] if uploaded_datasets is None: raise exceptions.ObjectNotFound( 'Given folder does not contain any datasets.' ) diff --git a/lib/galaxy/webapps/galaxy/controllers/user.py b/lib/galaxy/webapps/galaxy/controllers/user.py index a2dc790c9c5..5701a795e94 100644 --- a/lib/galaxy/webapps/galaxy/controllers/user.py +++ b/lib/galaxy/webapps/galaxy/controllers/user.py @@ -79,7 +79,7 @@ class User( BaseUIController, UsesFormDefinitionsMixin, CreatesUsersMixin, Creat installed_len_files = None @web.expose - def index( self, trans, cntrller, **kwd ): + def index( self, trans, cntrller='user', **kwd ): return trans.fill_template( '/user/index.mako', cntrller=cntrller ) @web.expose diff --git a/lib/galaxy/work/context.py b/lib/galaxy/work/context.py index 47782440b00..4252ef9f4a0 100644 --- a/lib/galaxy/work/context.py +++ b/lib/galaxy/work/context.py @@ -18,12 +18,13 @@ class WorkRequestContext( ProvidesAppContext, ProvidesUserContext, ProvidesHisto objects. """ - def __init__( self, app, user=None, history=None ): + def __init__( self, app, user=None, history=None, workflow_building_mode=False ): self.app = app self.security = app.security self.__user = user self.__history = history self.api_inherit_admin = False + self.workflow_building_mode = workflow_building_mode def get_history( self, create=False ): if create: diff --git a/lib/galaxy/workflow/extract.py b/lib/galaxy/workflow/extract.py index c9309192645..05887a55666 100644 --- a/lib/galaxy/workflow/extract.py +++ b/lib/galaxy/workflow/extract.py @@ -6,10 +6,7 @@ from galaxy import exceptions from galaxy import model from galaxy.tools.parameters.basic import ( DataToolParameter, - DataCollectionToolParameter, - DrillDownSelectToolParameter, - SelectToolParameter, - UnvalidatedValue + DataCollectionToolParameter ) from galaxy.tools.parser import ToolOutputCollectionPart from galaxy.tools.parameters.grouping import ( @@ -317,9 +314,6 @@ def __cleanup_param_values( inputs, values ): # Recursively clean data inputs and dynamic selects def cleanup( prefix, inputs, values ): for key, input in inputs.items(): - if isinstance( input, ( SelectToolParameter, DrillDownSelectToolParameter ) ): - if input.is_dynamic and not isinstance( values[key], UnvalidatedValue ): - values[key] = UnvalidatedValue( values[key] ) if isinstance( input, DataToolParameter ) or isinstance( input, DataCollectionToolParameter ): tmp = values[key] values[key] = None diff --git a/lib/galaxy/workflow/modules.py b/lib/galaxy/workflow/modules.py index 7ae7aa45925..4433d6b8b9d 100644 --- a/lib/galaxy/workflow/modules.py +++ b/lib/galaxy/workflow/modules.py @@ -1080,7 +1080,7 @@ class ToolModule( WorkflowModule ): def check_and_update_state( self ): inputs = self.state.inputs - return self.tool.check_and_update_param_values( inputs, self.trans, allow_workflow_parameters=True ) + return self.tool.check_and_update_param_values( inputs, self.trans, workflow_building_mode=True ) def compute_runtime_state( self, trans, step_updates=None, source="html" ): # Warning: This method destructively modifies existing step state. diff --git a/lib/galaxy/workflow/scheduling_manager.py b/lib/galaxy/workflow/scheduling_manager.py index 6b14926ee7d..0e24b2f27e3 100644 --- a/lib/galaxy/workflow/scheduling_manager.py +++ b/lib/galaxy/workflow/scheduling_manager.py @@ -156,7 +156,8 @@ class WorkflowRequestMonitor( object ): return self.__schedule( workflow_scheduler_id, workflow_scheduler ) - time.sleep(1) # TODO: wake if stopped + # TODO: wake if stopped + time.sleep(1) def __schedule( self, workflow_scheduler_id, workflow_scheduler ): invocation_ids = self.__active_invocation_ids( workflow_scheduler_id ) diff --git a/lib/tool_shed/galaxy_install/install_manager.py b/lib/tool_shed/galaxy_install/install_manager.py index 24245f76f88..5574fc84944 100644 --- a/lib/tool_shed/galaxy_install/install_manager.py +++ b/lib/tool_shed/galaxy_install/install_manager.py @@ -834,6 +834,7 @@ class InstallRepositoryManager( object ): def install_tool_shed_repository( self, tool_shed_repository, repo_info_dict, tool_panel_section_key, shed_tool_conf, tool_path, install_tool_dependencies, reinstalling=False ): + self.app.install_model.context.flush() if tool_panel_section_key: _, tool_section = self.app.toolbox.get_section( tool_panel_section_key ) if tool_section is None: diff --git a/scripts/bootstrap_history.py b/scripts/bootstrap_history.py index c82561b9627..3f37d41192b 100644 --- a/scripts/bootstrap_history.py +++ b/scripts/bootstrap_history.py @@ -35,7 +35,13 @@ RELEASES = [ ] # Uncredit pull requestors... kind of arbitrary at this point. -DEVTEAM = ["afgane", "dannon", "blankenberg", "davebx", "martenson", "jmchilton", "tnabtaf", "natefoo", "carlfeberhard", "jgoecks", "guerler", "jennaj", "nekrut", "jxtx", "nitesh1989"] +DEVTEAM = [ + "afgane", "dannon", "blankenberg", + "davebx", "martenson", "jmchilton", + "tnabtaf", "natefoo", "carlfeberhard", + "jgoecks", "guerler", "jennaj", + "nekrut", "jxtx", "nitesh1989" +] TEMPLATE = """ .. to_doc @@ -44,23 +50,36 @@ TEMPLATE = """ %s ------------------------------- +.. announce_start + Enhancements ------------------------------- -.. enhancements +.. major_feature + + +.. feature + + +.. enhancement + + +.. small_enhancement + Fixes ------------------------------- +.. major_bug -.. fixes + +.. bug .. github_links """ -# TODO: for 15.10 use this template... ANNOUNCE_TEMPLATE = string.Template(""" =========================================================== ${month_name} 20${year} Galaxy Release (v ${release}) @@ -115,7 +134,7 @@ Release Notes =========================================================== .. include:: ${release}.rst - :start-after: enhancements + :start-after: announce_start .. include:: _thanks.rst """) @@ -167,7 +186,7 @@ def do_release(argv): else: next_year = year next_version = "%s.%02d" % (next_year, next_month) - first_of_next_month = datetime.date(next_year + 2000, next_month, 1) + first_of_next_month = datetime.date(int(next_year) + 2000, next_month, 1) freeze_date = next_weekday(first_of_next_month, 0) release_date = next_weekday(first_of_next_month, 0) + datetime.timedelta(21) @@ -181,34 +200,11 @@ def do_release(argv): ) open(next_release_file, "w").write(next_announce.encode("utf-8")) - release_commit_start = None - release_commit_end = None - - for i, release_info in enumerate(RELEASES): - if release_name == release_info[0]: - release_commit_start = release_info[1] - release_commit_end = RELEASES[i + 1][1] - - if release_commit_start is None: - raise Exception("Failed to find information for version %s" % release_name) - - start_release_time = commit_time(release_commit_start) - end_release_time = commit_time(release_commit_end) - for page in _get_prs(): for pr in page: - base_label = pr.base['label'] - if base_label == "galaxyproject:dev": - merged_at = pr.merged_at - if merged_at is None: - continue - before_branch = merged_at < start_release_time - after_branch = merged_at > end_release_time - print "%s %s %s" % (merged_at, start_release_time, end_release_time) - if before_branch or after_branch: - print "SKIPPING" - continue - elif base_label != "galaxyproject:release_%s" % release_name: + merged_at = pr.merged_at + milestone = pr.milestone + if not merged_at or not milestone or milestone['title'] != release_name: continue # 2015-06-29 18:32:13 2015-04-22 19:11:53 2015-08-12 21:15:45 as_dict = { @@ -221,7 +217,11 @@ def do_release(argv): def _get_prs(): github = _github_client() - pull_requests = github.pull_requests.list(state='closed', user=PROJECT_OWNER, repo=PROJECT_NAME) + pull_requests = github.pull_requests.list( + state='closed', + user=PROJECT_OWNER, + repo=PROJECT_NAME, + ) return pull_requests @@ -305,22 +305,47 @@ def main(argv): labels = github.issues.labels.list_by_issue(int(pull_request), user=PROJECT_OWNER, repo=PROJECT_NAME) except Exception: pass - is_bug = is_enhancement = is_minor = False + is_bug = is_enhancement = is_feature = is_minor = is_major = is_merge = is_small_enhancement = False for label in labels: - if label.name.lower() == "minor": + label_name = label.name.lower() + if label_name == "minor": is_minor = True - if label.name.lower() == "bug": + elif label_name == "major": + is_major = True + elif label_name == "merge": + is_merge = True + elif label_name == "kind/bug": is_bug = True - if label.name.lower() == "enhancement": + elif label_name == "kind/feature": + is_feature = True + elif label_name == "kind/enhancement": is_enhancement = True - if is_minor: + elif label_name in ["kind/testing", "kind/refactoring"]: + is_small_enhancement = True + + is_some_kind_of_enhancement = is_enhancement or is_feature or is_small_enhancement + + if not( is_bug or is_some_kind_of_enhancement or is_minor or is_merge ): + print "No kind/ or minor or merge label found for %s" % pull_request + text_target = None + + if is_minor or is_merge: return - if is_enhancement: - text_target = "enhancements" + + if is_some_kind_of_enhancement and is_major: + text_target = "major_feature" + elif is_feature: + text_target = "feature" + elif is_enhancement: + text_target = "enhancement" + elif is_some_kind_of_enhancement: + text_target = "small_enhancement" + elif is_major: + text_target = "major_bug" elif is_bug: - text_target = "fixes" + text_target = "bug" else: - print "Problem not label for %s" % pull_request + print "Logic problem, cannot determine section for %s" % pull_request text_target = None elif ident.startswith("issue"): issue = ident[len("issue"):] diff --git a/scripts/common_startup.sh b/scripts/common_startup.sh index bb5fd8243d1..f1f1cba1ef7 100755 --- a/scripts/common_startup.sh +++ b/scripts/common_startup.sh @@ -1,11 +1,18 @@ #!/bin/bash set -e +GXPIP_VERSION='8.0.2+gx2' + SET_VENV=1 for arg in "$@"; do [ "$arg" = "--skip-venv" ] && SET_VENV=0 done +# Conda Python is in use, do not use virtualenv +if python -V 2>&1 | grep -q 'Continuum Analytics'; then + SET_VENV=0 +fi + DEV_WHEELS=0 FETCH_WHEELS=1 CREATE_VENV=1 @@ -132,8 +139,28 @@ fi : ${GALAXY_WHEELS_INDEX_URL:="https://wheels.galaxyproject.org/simple"} if [ $REPLACE_PIP -eq 1 ]; then pip_version=`pip --version | awk '{print $2}'` - pre=`python -c "from pkg_resources import parse_version; from sys import stdout; stdout.write('--pre') if parse_version('$pip_version') >= parse_version('1.4') else stdout.write('')"` - pip install $pre --no-index --find-links ${GALAXY_WHEELS_INDEX_URL}/pip --upgrade pip + method=`python - << EOF +from pkg_resources import parse_version +from sys import stdout +if parse_version('$pip_version') >= parse_version('6.0'): + stdout.write('req') +elif parse_version('$pip_version') >= parse_version('1.5'): + stdout.write('wheel') +else: + stdout.write('sdist') +EOF` + case $method in + req) + pip install --no-index --find-links ${GALAXY_WHEELS_INDEX_URL}/pip --upgrade "pip==${GXPIP_VERSION}" + ;; + wheel) + pip install --upgrade "https://wheels.galaxyproject.org/packages/pip-${GXPIP_VERSION}-py2.py3-none-any.whl" + ;; + sdist) + pip install --upgrade "https://wheels.galaxyproject.org/packages/pip-${GXPIP_VERSION}.tar.gz" + ;; + esac + # binary-compatibility.cfg may need to be created (e.g. on CentOS) [ -n "$VIRTUAL_ENV" -a ! -f ${VIRTUAL_ENV}/binary-compatibility.cfg ] && python ./scripts/binary_compatibility.py -o ${VIRTUAL_ENV}/binary-compatibility.cfg fi diff --git a/static/maps/layout/menu.js.map b/static/maps/layout/menu.js.map index 728ee577fc0..2b6c8021677 100644 --- a/static/maps/layout/menu.js.map +++ b/static/maps/layout/menu.js.map @@ -1 +1 @@ -{"version":3,"file":"menu.js","sources":["../../src/layout/menu.js"],"names":["define","Tours","Collection","Backbone","extend","model","Model","defaults","visible","target","fetch","options","this","reset","add","id","title","url","tooltip","disabled","Galaxy","user","menu","divider","user_requests","lims_doc_url","get","cls","helpTab","support_url","search_url","mailing_lists","screencasts_url","wiki_url","citation_url","onclick","app","display","ToursView","terms_url","push","biostar_url","unshift","biostar_url_redirect","userTab","use_remote_user","allow_user_creation","activeView","active_view","set","jQuery","Deferred","resolve","promise","Tab","View","initialize","setElement","_template","$dropdown","$","$toggle","$menu","$note","listenTo","render","events","click .dropdown-toggle","self","remove","$el","attr","css","visibility","_formatUrl","html","removeClass","addClass","placement","show","off","on","hide","empty","_","each","menuItem","append","_buildMenuItem","e","preventDefault","frame","_toggleClick","buildLink","label","root","trigger","m","popover","content","setTimeout","attributes","indexOf","charAt"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"menu.js","sources":["../../src/layout/menu.js"],"names":["define","Tours","Collection","Backbone","extend","model","Model","defaults","visible","target","fetch","options","this","reset","add","id","title","url","tooltip","disabled","Galaxy","user","menu","divider","user_requests","lims_doc_url","get","cls","helpTab","support_url","search_url","mailing_lists","screencasts_url","wiki_url","citation_url","onclick","app","display","ToursView","window","location","root","terms_url","push","biostar_url","unshift","biostar_url_redirect","userTab","use_remote_user","allow_user_creation","activeView","active_view","set","jQuery","Deferred","resolve","promise","Tab","View","initialize","setElement","_template","$dropdown","$","$toggle","$menu","$note","listenTo","render","events","click .dropdown-toggle","self","remove","$el","attr","css","visibility","_formatUrl","html","removeClass","addClass","placement","show","off","on","hide","empty","_","each","menuItem","append","_buildMenuItem","e","preventDefault","frame","_toggleClick","buildLink","label","trigger","m","popover","content","setTimeout","attributes","indexOf","charAt"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/layout/page.js.map b/static/maps/layout/page.js.map index e31ad05e187..3eeabecc8fc 100644 --- a/static/maps/layout/page.js.map +++ b/static/maps/layout/page.js.map @@ -1 +1 @@ -{"version":3,"file":"page.js","sources":["../../src/layout/page.js"],"names":["define","Masthead","Panel","Modal","BaseMVC","PageLayoutView","Backbone","View","extend","LoggableMixin","_logNamespace","el","className","_panelIds","defaultOptions","message_box_visible","message_box_content","message_box_class","show_inactivity_warning","inactivity_box_content","initialize","options","this","log","_","pick","defaults","omit","Galaxy","modal","masthead","config","$el","attr","append","_template","$messagebox","$","$inactivebox","render","remove","renderMessageBox","renderInactivityBox","renderPanels","content","level","addClass","html","toggle","show","removeClass","hide","verificationLink","root","page","forEach","panelId","has","setElement","center","join","toString"],"mappings":"AAAAA,QACI,kBACA,eACA,kBACA,gBACD,SAAUC,EAAUC,EAAOC,EAAOC,GAGrC,GAAIC,GAAiBC,SAASC,KAAKC,OAAQJ,EAAQK,eAAgBD,QAC/DE,cAAgB,SAEhBC,GAAK,OACLC,UAAY,eAEZC,WACI,OAAQ,SAAU,SAGtBC,gBACIC,qBAA0B,EAC1BC,oBAA0B,GAC1BC,kBAA0B,OAC1BC,yBAA0B,EAC1BC,uBAA0B,IAG9BC,WAAa,SAAUC,GAEnBC,KAAKC,IAAKD,KAAO,eAAgBD,GACjCG,EAAEhB,OAAQc,KAAME,EAAEC,KAAMJ,EAASC,KAAKT,YACtCS,KAAKD,QAAUG,EAAEE,SAAUF,EAAEG,KAAMN,EAASC,KAAKT,WAAaS,KAAKR,gBACnEc,OAAOC,MAAQP,KAAKO,MAAQ,GAAI1B,GAAMI,KACtCe,KAAKQ,SAAW,GAAI7B,GAASM,KAAMe,KAAKD,QAAQU,QAChDT,KAAKU,IAAIC,KAAM,SAAU,MACzBX,KAAKU,IAAIE,OAAQZ,KAAKa,aACtBb,KAAKU,IAAIE,OAAQZ,KAAKQ,SAASE,KAC/BV,KAAKU,IAAIE,OAAQZ,KAAKO,MAAMG,KAC5BV,KAAKc,YAAcd,KAAKe,EAAG,eAC3Bf,KAAKgB,aAAehB,KAAKe,EAAG,iBAGhCE,OAAS,WAQL,MANAF,GAAG,8BAA+BG,SAClClB,KAAKC,IAAKD,KAAO,YACjBA,KAAKQ,SAASS,SACdjB,KAAKmB,mBACLnB,KAAKoB,sBACLpB,KAAKqB,eACErB,MAIXmB,iBAAmB,WACf,GAAKnB,KAAKD,QAAQN,oBAAqB,CACnC,GAAI6B,GAAUtB,KAAKD,QAAQL,qBAAuB,GAC9C6B,EAAQvB,KAAKD,QAAQJ,mBAAqB,MAC9CK,MAAKU,IAAIc,SAAU,mBACnBxB,KAAKc,YACAH,KAAM,QAAS,SAAWY,EAAQ,YAClCE,KAAMH,GACNI,SAAUJ,GACVK,WAEL3B,MAAKU,IAAIkB,YAAa,mBACtB5B,KAAKc,YAAYe,MAErB,OAAO7B,OAIXoB,oBAAsB,WAClB,GAAIpB,KAAKD,QAAQH,wBAAyB,CACtC,GAAI0B,GAAUtB,KAAKD,QAAQF,wBAA0B,GACjDiC,EAAmBf,EAAG,QAASJ,KAAM,OAAQL,OAAOyB,KAAO,4BAA6BN,KAAM,uBAClGzB,MAAKU,IAAIc,SAAU,sBACnBxB,KAAKgB,aACAS,KAAMH,GACNV,OAAQ,IAAMkB,GACdJ,SAAUJ,GACVK,WAEL3B,MAAKU,IAAIkB,YAAa,sBACtB5B,KAAKgB,aAAaa,MAEtB,OAAO7B,OAIXqB,aAAe,WACX,GAAIW,GAAOhC,IASX,OARAA,MAAKT,UAAU0C,QAAS,SAAUC,GAC1BhC,EAAEiC,IAAKH,EAAME,IACbF,EAAME,GAAUE,WAAY,IAAMF,GAClCF,EAAME,GAAUjB,UACI,WAAZiB,GACRF,EAAKK,OAAO3B,IAAKwB,EAAS,KAG3BlC,MAIXa,UAAW,WACP,OACI,wBACI,yBACA,yBACA,wDACA,mBACA,qCACA,oBACJ,SACA,wBACA,aACI,4DACI,QACI,wDACA,QACI,gFACA,iDACJ,SACJ,SACJ,SACJ,eACFyB,KAAK,KAGXC,SAAW,WAAa,MAAO,mBAI/B,QACIxD,eAAgBA"} \ No newline at end of file +{"version":3,"file":"page.js","sources":["../../src/layout/page.js"],"names":["define","Masthead","Panel","Modal","BaseMVC","PageLayoutView","Backbone","View","extend","LoggableMixin","_logNamespace","el","className","_panelIds","defaultOptions","message_box_visible","message_box_content","message_box_class","show_inactivity_warning","inactivity_box_content","initialize","options","this","log","_","pick","defaults","omit","Galaxy","modal","masthead","config","$el","attr","append","_template","$messagebox","$","$inactivebox","render","remove","renderMessageBox","renderInactivityBox","renderPanels","content","level","addClass","html","toggle","show","removeClass","hide","verificationLink","root","page","forEach","panelId","has","setElement","center","css","join","toString"],"mappings":"AAAAA,QACI,kBACA,eACA,kBACA,gBACD,SAAUC,EAAUC,EAAOC,EAAOC,GAGrC,GAAIC,GAAiBC,SAASC,KAAKC,OAAQJ,EAAQK,eAAgBD,QAC/DE,cAAgB,SAEhBC,GAAK,OACLC,UAAY,eAEZC,WACI,OAAQ,SAAU,SAGtBC,gBACIC,qBAA0B,EAC1BC,oBAA0B,GAC1BC,kBAA0B,OAC1BC,yBAA0B,EAC1BC,uBAA0B,IAG9BC,WAAa,SAAUC,GAEnBC,KAAKC,IAAKD,KAAO,eAAgBD,GACjCG,EAAEhB,OAAQc,KAAME,EAAEC,KAAMJ,EAASC,KAAKT,YACtCS,KAAKD,QAAUG,EAAEE,SAAUF,EAAEG,KAAMN,EAASC,KAAKT,WAAaS,KAAKR,gBACnEc,OAAOC,MAAQP,KAAKO,MAAQ,GAAI1B,GAAMI,KACtCe,KAAKQ,SAAW,GAAI7B,GAASM,KAAMe,KAAKD,QAAQU,QAChDT,KAAKU,IAAIC,KAAM,SAAU,MACzBX,KAAKU,IAAIE,OAAQZ,KAAKa,aACtBb,KAAKU,IAAIE,OAAQZ,KAAKQ,SAASE,KAC/BV,KAAKU,IAAIE,OAAQZ,KAAKO,MAAMG,KAC5BV,KAAKc,YAAcd,KAAKe,EAAG,eAC3Bf,KAAKgB,aAAehB,KAAKe,EAAG,iBAGhCE,OAAS,WAQL,MANAF,GAAG,8BAA+BG,SAClClB,KAAKC,IAAKD,KAAO,YACjBA,KAAKQ,SAASS,SACdjB,KAAKmB,mBACLnB,KAAKoB,sBACLpB,KAAKqB,eACErB,MAIXmB,iBAAmB,WACf,GAAKnB,KAAKD,QAAQN,oBAAqB,CACnC,GAAI6B,GAAUtB,KAAKD,QAAQL,qBAAuB,GAC9C6B,EAAQvB,KAAKD,QAAQJ,mBAAqB,MAC9CK,MAAKU,IAAIc,SAAU,mBACnBxB,KAAKc,YACAH,KAAM,QAAS,SAAWY,EAAQ,YAClCE,KAAMH,GACNI,SAAUJ,GACVK,WAEL3B,MAAKU,IAAIkB,YAAa,mBACtB5B,KAAKc,YAAYe,MAErB,OAAO7B,OAIXoB,oBAAsB,WAClB,GAAIpB,KAAKD,QAAQH,wBAAyB,CACtC,GAAI0B,GAAUtB,KAAKD,QAAQF,wBAA0B,GACjDiC,EAAmBf,EAAG,QAASJ,KAAM,OAAQL,OAAOyB,KAAO,4BAA6BN,KAAM,uBAClGzB,MAAKU,IAAIc,SAAU,sBACnBxB,KAAKgB,aACAS,KAAMH,GACNV,OAAQ,IAAMkB,GACdJ,SAAUJ,GACVK,WAEL3B,MAAKU,IAAIkB,YAAa,sBACtB5B,KAAKgB,aAAaa,MAEtB,OAAO7B,OAIXqB,aAAe,WACX,GAAIW,GAAOhC,IASX,OARAA,MAAKT,UAAU0C,QAAS,SAAUC,GAC1BhC,EAAEiC,IAAKH,EAAME,IACbF,EAAME,GAAUE,WAAY,IAAMF,GAClCF,EAAME,GAAUjB,UACI,WAAZiB,GACRF,EAAKK,OAAO3B,IAAI4B,IAAKJ,EAAS,KAG/BlC,MAIXa,UAAW,WACP,OACI,wBACI,yBACA,yBACA,wDACA,mBACA,qCACA,oBACJ,SACA,wBACA,aACI,4DACI,QACI,wDACA,QACI,gFACA,iDACJ,SACJ,SACJ,SACJ,eACF0B,KAAK,KAGXC,SAAW,WAAa,MAAO,mBAI/B,QACIzD,eAAgBA"} \ No newline at end of file diff --git a/static/maps/libs/backbone/backbone.js.map b/static/maps/libs/backbone/backbone.js.map deleted file mode 100644 index 3e6767e739a..00000000000 --- a/static/maps/libs/backbone/backbone.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"backbone.js","sources":["../../../src/libs/backbone/backbone.js"],"names":["root","factory","define","amd","_","$","exports","Backbone","require","jQuery","Zepto","ender","this","previousBackbone","array","slice","push","splice","VERSION","noConflict","emulateHTTP","emulateJSON","Events","on","name","callback","context","eventsApi","_events","events","ctx","once","self","off","apply","arguments","_callback","retain","ev","names","i","l","j","k","keys","length","trigger","args","call","allEvents","all","triggerEvents","stopListening","obj","listeningTo","_listeningTo","remove","_listenId","id","isEmpty","eventSplitter","action","rest","key","concat","test","split","a1","a2","a3","listenMethods","listenTo","listenToOnce","each","implementation","method","uniqueId","bind","unbind","extend","Model","attributes","options","attrs","cid","collection","parse","defaults","result","set","changed","initialize","prototype","validationError","idAttribute","toJSON","clone","sync","get","attr","escape","has","val","unset","changes","silent","changing","prev","current","_validate","_changing","_previousAttributes","isEqual","_pending","clear","hasChanged","changedAttributes","diff","old","previous","previousAttributes","fetch","model","success","resp","wrapError","save","xhr","validate","wait","serverAttrs","isObject","isNew","patch","destroy","url","base","urlError","replace","encodeURIComponent","constructor","isValid","error","modelMethods","unshift","Collection","models","comparator","_reset","reset","setOptions","add","merge","addOptions","map","singular","isArray","index","_byId","indexOf","_removeReference","existing","sort","at","targetModel","sortable","sortAttr","isString","toAdd","toRemove","modelMap","order","_prepareModel","_addReference","orderedModels","previousModels","pop","shift","where","first","findWhere","Error","sortBy","pluck","invoke","create","_onModelEvent","event","methods","attributeMethods","value","iterator","isFunction","View","pick","viewOptions","_ensureElement","delegateEvents","delegateEventSplitter","tagName","selector","$el","find","render","setElement","element","delegate","undelegateEvents","el","match","eventName","className","type","methodMap","params","dataType","data","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","noXhrPatch","ActiveXObject","ajax","window","XMLHttpRequest","dispatchEvent","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","RegExp","exec","param","decodeURIComponent","History","handlers","bindAll","location","routeStripper","rootStripper","isExplorer","trailingSlash","pathStripper","started","interval","atRoot","pathname","getHash","href","getFragment","forcePushState","_hasPushState","_wantsHashChange","decodeURI","search","start","hashChange","_wantsPushState","pushState","docMode","document","documentMode","oldIE","navigator","userAgent","toLowerCase","frame","iframe","hide","appendTo","contentWindow","checkUrl","_checkUrlInterval","setInterval","loc","hash","replaceState","title","loadUrl","stop","clearInterval","any","handler","assign","_updateHash","open","close","protoProps","staticProps","child","parent","Surrogate","__super__"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/form/form-input.js.map b/static/maps/mvc/form/form-input.js.map index 9a2cb014a09..f057f7c4b7c 100644 --- a/static/maps/mvc/form/form-input.js.map +++ b/static/maps/mvc/form/form-input.js.map @@ -1 +1 @@ -{"version":3,"file":"form-input.js","sources":["../../../src/mvc/form/form-input.js"],"names":["define","Backbone","View","extend","initialize","app","options","this","field","text_enable","text_disable","cls_enable","cls_disable","setElement","_template","$field","$","$preview","$collapsible","$collapsible_icon","find","$error_text","$error","$backdrop","prepend","$el","collapsed","undefined","collapsible_value","JSON","stringify","value","_refresh","self","on","disable","silent","show","css","opacity","cursor","error","text","html","addClass","reset","hide","removeClass","_tooltip","fadeIn","trigger","title","cls","tooltip","placement","attr","tmp","disabled","label","help","argument","indexOf","collapsible_preview","text_value"],"mappings":"AAGAA,UAAW,WACP,MAAOC,UAASC,KAAKC,QACjBC,WAAY,SAASC,EAAKC,GACtBC,KAAKF,IAAMA,EACXE,KAAKC,MAAQF,EAAQE,MAGrBD,KAAKE,YAAiBJ,EAAIC,QAAQG,aAAe,SACjDF,KAAKG,aAAiBL,EAAIC,QAAQI,cAAgB,UAClDH,KAAKI,WAAiBN,EAAIC,QAAQK,YAAc,4BAChDJ,KAAKK,YAAiBP,EAAIC,QAAQM,aAAe,0BAGjDL,KAAKM,WAAWN,KAAKO,UAAUR,IAG/BC,KAAKQ,OAASR,KAAKS,EAAE,kBACrBT,KAAKU,SAAWV,KAAKS,EAAE,oBACvBT,KAAKW,aAAeX,KAAKS,EAAE,wBAC3BT,KAAKY,kBAAoBZ,KAAKS,EAAE,wBAAwBI,KAAK,SAC7Db,KAAKc,YAAcd,KAAKS,EAAE,uBAC1BT,KAAKe,OAASf,KAAKS,EAAE,kBACrBT,KAAKgB,UAAYhB,KAAKS,EAAE,qBAGxBT,KAAKQ,OAAOS,QAAQjB,KAAKC,MAAMiB,KAG/BlB,KAAKC,MAAMkB,UAA0CC,SAA9BrB,EAAQsB,mBAAmCC,KAAKC,UAAWxB,EAAQyB,QAAWF,KAAKC,UAAWxB,EAAQsB,mBAG7HrB,KAAKyB,UAGL,IAAIC,GAAO1B,IACXA,MAAKW,aAAagB,GAAG,QAAS,WAC1BD,EAAKzB,MAAMkB,WAAaO,EAAKzB,MAAMkB,UACnCO,EAAKD,cAMbG,QAAS,SAAUC,GACf7B,KAAKgB,UAAUc,OACfD,GAAU7B,KAAKgB,UAAUe,KAAMC,QAAW,EAAGC,OAAU,aAK3DC,MAAO,SAASC,GACZnC,KAAKc,YAAYsB,KAAKD,GACtBnC,KAAKe,OAAOe,OACZ9B,KAAKkB,IAAImB,SAAS,aAKtBC,MAAO,WACHtC,KAAKe,OAAOwB,OACZvC,KAAKkB,IAAIsB,YAAY,aAKzBf,SAAU,WACNzB,KAAKY,kBAAkB4B,cAAcH,SAAS,QACzCrC,KAAKC,MAAMkB,WAKZnB,KAAKQ,OAAO+B,OACZvC,KAAKU,SAASoB,OACd9B,KAAKyC,SAASzC,KAAKE,YAAaF,KAAKI,cANrCJ,KAAKQ,OAAOkC,OAAO,QACnB1C,KAAKU,SAAS6B,OACdvC,KAAKyC,SAASzC,KAAKG,aAAcH,KAAKK,cAM1CL,KAAKF,IAAI6C,QAAQ,WAKrBF,SAAU,SAASG,EAAOC,GACtB7C,KAAKY,kBAAkByB,SAASQ,GACZC,SAAUC,UAAW,WACrBC,KAAK,sBAAuBJ,GAC5BE,QAAQ,YAAYA,QAAQ,SAKpDvC,UAAW,SAASR,GAChB,GAAIkD,GAAQ,sKA4BZ,OAlBIA,IALElD,EAAQmD,UAA0C9B,SAA9BrB,EAAQsB,kBAKvBtB,EAAQoD,MAJC,qDAC0BpD,EAAQoD,MAClC,SAIpBF,GAAgB,oCAEhBA,GAAoB,6BAChBlD,EAAQqD,OACRH,GAAoBlD,EAAQqD,KACxBrD,EAAQsD,UAAkE,IAAtDtD,EAAQqD,KAAKE,QAAQ,IAAMvD,EAAQsD,SAAW,OAClEJ,GAAO,KAAOlD,EAAQsD,SAAW,MAGzCJ,GAAoB,8CAGflD,EAAQwD,sBACTN,GAAY,gCAAkClD,EAAQyD,WAAa,UAEvEP,GAAO"} \ No newline at end of file +{"version":3,"file":"form-input.js","sources":["../../../src/mvc/form/form-input.js"],"names":["define","Backbone","View","extend","initialize","app","options","this","field","text_enable","text_disable","cls_enable","cls_disable","setElement","_template","$field","$","$preview","$collapsible","$collapsible_icon","find","$error_text","$error","$backdrop","prepend","$el","collapsed","undefined","collapsible_value","JSON","stringify","value","_refresh","self","on","disable","silent","show","css","opacity","cursor","error","text","html","addClass","reset","hide","removeClass","_tooltip","fadeIn","trigger","title","cls","tooltip","placement","attr","tmp","disabled","label","help","argument","indexOf","collapsible_preview","text_value"],"mappings":"AAGAA,UAAW,WACP,MAAOC,UAASC,KAAKC,QACjBC,WAAY,SAASC,EAAKC,GACtBC,KAAKF,IAAMA,EACXE,KAAKC,MAAQF,EAAQE,MAGrBD,KAAKE,YAAiBJ,EAAIC,QAAQG,aAAe,SACjDF,KAAKG,aAAiBL,EAAIC,QAAQI,cAAgB,UAClDH,KAAKI,WAAiBN,EAAIC,QAAQK,YAAc,4BAChDJ,KAAKK,YAAiBP,EAAIC,QAAQM,aAAe,0BAGjDL,KAAKM,WAAWN,KAAKO,UAAUR,IAG/BC,KAAKQ,OAASR,KAAKS,EAAE,kBACrBT,KAAKU,SAAWV,KAAKS,EAAE,oBACvBT,KAAKW,aAAeX,KAAKS,EAAE,wBAC3BT,KAAKY,kBAAoBZ,KAAKS,EAAE,wBAAwBI,KAAK,SAC7Db,KAAKc,YAAcd,KAAKS,EAAE,uBAC1BT,KAAKe,OAASf,KAAKS,EAAE,kBACrBT,KAAKgB,UAAYhB,KAAKS,EAAE,qBAGxBT,KAAKQ,OAAOS,QAAQjB,KAAKC,MAAMiB,KAG/BlB,KAAKC,MAAMkB,UAA0CC,SAA9BrB,EAAQsB,mBAAmCC,KAAKC,UAAWxB,EAAQyB,QAAWF,KAAKC,UAAWxB,EAAQsB,mBAG7HrB,KAAKyB,UAGL,IAAIC,GAAO1B,IACXA,MAAKW,aAAagB,GAAG,QAAS,WAC1BD,EAAKzB,MAAMkB,WAAaO,EAAKzB,MAAMkB,UACnCO,EAAKD,cAMbG,QAAS,SAAUC,GACf7B,KAAKgB,UAAUc,OACfD,GAAU7B,KAAKgB,UAAUe,KAAMC,QAAW,EAAGC,OAAU,aAK3DC,MAAO,SAASC,GACZnC,KAAKc,YAAYsB,KAAKD,GACtBnC,KAAKe,OAAOe,OACZ9B,KAAKkB,IAAImB,SAAS,aAKtBC,MAAO,WACHtC,KAAKe,OAAOwB,OACZvC,KAAKkB,IAAIsB,YAAY,aAKzBf,SAAU,WACNzB,KAAKY,kBAAkB4B,cAAcH,SAAS,QACzCrC,KAAKC,MAAMkB,WAKZnB,KAAKQ,OAAO+B,OACZvC,KAAKU,SAASoB,OACd9B,KAAKyC,SAASzC,KAAKE,YAAaF,KAAKI,cANrCJ,KAAKQ,OAAOkC,OAAO,QACnB1C,KAAKU,SAAS6B,OACdvC,KAAKyC,SAASzC,KAAKG,aAAcH,KAAKK,cAM1CL,KAAKF,IAAI6C,QAAQ,WAKrBF,SAAU,SAASG,EAAOC,GACtB7C,KAAKY,kBAAkByB,SAASQ,GACZC,SAAUC,UAAW,WACrBC,KAAK,sBAAuBJ,GAC5BE,QAAQ,YAAYA,QAAQ,SAKpDvC,UAAW,SAASR,GAChB,GAAIkD,GAAQ,sKA4BZ,OAlBIA,IALElD,EAAQmD,UAA0C9B,SAA9BrB,EAAQsB,kBAKvBtB,EAAQoD,MAJC,qDAC0BpD,EAAQoD,MAClC,SAIpBF,GAAgB,oCAEhBA,GAAoB,6BAChBlD,EAAQqD,OACRH,GAAoBlD,EAAQqD,MAE5BrD,EAAQsD,UAAkE,IAAtDtD,EAAQqD,KAAKE,QAAQ,IAAMvD,EAAQsD,SAAW,OAClEJ,GAAoB,KAAOlD,EAAQsD,SAAW,KAElDJ,GAAoB,8CAGflD,EAAQwD,sBACTN,GAAY,gCAAkClD,EAAQyD,WAAa,UAEvEP,GAAO"} \ No newline at end of file diff --git a/static/maps/mvc/form/form-section.js.map b/static/maps/mvc/form/form-section.js.map index 87e723cebe6..192e36e2419 100644 --- a/static/maps/mvc/form/form-section.js.map +++ b/static/maps/mvc/form/form-section.js.map @@ -1 +1 @@ -{"version":3,"file":"form-section.js","sources":["../../../src/mvc/form/form-section.js"],"names":["define","Utils","Table","Ui","Portlet","Repeat","InputElement","Parameters","View","Backbone","extend","initialize","app","options","this","inputs","cls","cls_tr","table","parameters","setElement","$el","render","delAll","i","add","input","input_def","jQuery","id","uid","input_list","type","_addConditional","_addRepeat","_addSection","_addRow","self","test_param","sustain_conditionals","disabled","field","onchange","value","selectedCase","data","matchCase","cases","case_def","section_id","section_row","get","nonhidden","j","hidden","fadeIn","hide","trigger","sub_section_id","sub_section","addClass","append","create","block_index","repeat","ondel","del","title","title_new","min","max","onnew","n_min","n_cache","_","size","cache","Math","sustain_repeats","hideOptions","input_element","label","name","help","button_visible","ButtonIcon","icon","tooltip","portlet","collapsible","collapsed","operations","$","html","setOperation","expand","collapse","on","setIcon","input_id","length","expanded","field_list","default_value","text_value","collapsible_value","collapsible_preview","argument","element_list"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"form-section.js","sources":["../../../src/mvc/form/form-section.js"],"names":["define","Utils","Table","Ui","Portlet","Repeat","InputElement","Parameters","View","Backbone","extend","initialize","app","options","this","inputs","cls","cls_tr","table","parameters","setElement","$el","render","delAll","i","add","input","input_def","jQuery","id","uid","input_list","type","_addConditional","_addRepeat","_addSection","_addRow","self","test_param","sustain_conditionals","disabled","field","onchange","value","selectedCase","data","matchCase","cases","case_def","section_id","section_row","get","nonhidden","j","hidden","fadeIn","hide","trigger","sub_section_id","sub_section","addClass","append","create","block_index","repeat","ondel","del","title","title_new","min","max","onnew","n_cache","_","size","cache","Math","default","sustain_repeats","hideOptions","input_element","label","name","help","button_visible","ButtonIcon","icon","tooltip","portlet","collapsible","collapsed","operations","$","html","setOperation","expand","collapse","on","setIcon","input_id","length","expanded","field_list","default_value","text_value","collapsible_value","collapsible_preview","argument","element_list"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/form/form-select-content.js.map b/static/maps/mvc/form/form-select-content.js.map index 619906c4310..52166b9e049 100644 --- a/static/maps/mvc/form/form-select-content.js.map +++ b/static/maps/mvc/form/form-select-content.js.map @@ -1 +1 @@ -{"version":3,"file":"form-select-content.js","sources":["../../../src/mvc/form/form-select-content.js"],"names":["define","Utils","Ui","View","Backbone","extend","initialize","app","options","this","history","self","setElement","list","radio_buttons","mode","type","multiple","current","extensions","textify","hda_error","hdca_error","push","icon","value","tooltip","select_single","Select","optional","error_text","onchange","trigger","field","select_multiple","searchable","select_collection","button_type","RadioButton","data","refresh","$batch","$","template_batch","n_buttons","_","size","button_width","$el","append","Math","max","i","css","margin-left","update","undefined","on","wait","unwait","_update","select_options","item","label","hid","name","id","src","hda","hdca","new_value","values","length","err","Galaxy","emit","debug","id_list","_select","Array","result","batch","_batch","details","sort","a","b","show","hide","map_over_type"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"form-select-content.js","sources":["../../../src/mvc/form/form-select-content.js"],"names":["define","Utils","Ui","View","Backbone","extend","initialize","app","options","this","history","self","setElement","list","radio_buttons","mode","type","multiple","current","extensions","textify","hda_error","hdca_error","push","icon","value","tooltip","select_single","Select","optional","error_text","onchange","trigger","field","select_multiple","searchable","select_collection","button_type","RadioButton","data","refresh","$batch","$","template_batch","n_buttons","_","size","button_width","$el","append","Math","max","i","css","margin-left","update","undefined","on","wait","unwait","_update","select_options","item","hid","label","name","id","src","add","a","b","hda","hdca","new_value","values","length","err","Galaxy","emit","debug","id_list","_select","Array","result","batch","_batch","details","sort","show","hide","map_over_type"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/library/library-folderlist-view.js.map b/static/maps/mvc/library/library-folderlist-view.js.map index c054bef704b..254280ddac6 100644 --- a/static/maps/mvc/library/library-folderlist-view.js.map +++ b/static/maps/mvc/library/library-folderlist-view.js.map @@ -1 +1 @@ -{"version":3,"file":"library-folderlist-view.js","sources":["../../../src/mvc/library/library-folderlist-view.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","mod_library_model","mod_library_folderrow_view","FolderListView","Backbone","View","extend","el","progress","progressStep","folderContainer","sort","events","click #select-all-checkboxes","click .dataset_row","click .folder_row","click .sort-folder-link","collection","defaults","include_deleted","page_count","show_page","initialize","options","this","_","modal","rowViews","Folder","listenTo","renderOne","removeOne","rePaint","fetchFolder","that","FolderContainer","id","url","attributes","urlRoot","fetch","success","folder_container","render","error","model","response","responseJSON","err_msg","onclick","Galaxy","libraries","library_router","back","template","templateFolder","$","hide","upper_folder_id","path","metadata","full_path","length","$el","html","parent_library_id","order","dataset_id","row","findWhere","showDatasetDetails","paginate","tooltip","css","total_items_count","get","models","Math","ceil","preferences","page_start","items_to_render","slice","items_shown","folderToolbarView","renderPaginator","reset","removeAllRows","renderAll","checkEmptiness","addAll","each","folderListView","add","postRender","fetched_metadata","contains_file_or_folder","type","configureElements","hover","find","show","reverse","set","rowView","FolderRowView","after","remove","sortColumnClicked","event","preventDefault","sortFolder","renderSortIcon","sort_by","console","log","sortByNameAsc","sortByNameDesc","selectAll","selected","target","checked","$row","parentElement","makeDarkRow","makeWhiteRow","selectClickedRow","source","checkbox","localName","removeClass","addClass","tmpl_array","push","join"],"mappings":"AAAAA,QACI,kBACA,cACA,cACA,4BACA,qCACA,oCAEJ,SAASC,EACAC,EACAC,EACAC,EACAC,GAIT,GAAIC,GAAiBC,SAASC,KAAKC,QAC/BC,GAAK,wBAELC,SAAU,EAEVC,aAAc,EAEdC,gBAAiB,KAEjBC,KAAM,MAENC,QACIC,+BAAkC,YAClCC,qBAAkC,mBAClCC,oBAAkC,mBAClCC,0BAAkC,qBAGtCC,WAAY,KAEZC,UACIC,iBAAiB,EACjBC,WAAY,KACZC,UAAW,MAOfC,WAAa,SAAUC,GACnBC,KAAKD,QAAUE,EAAEP,SAAUM,KAAKD,YAAeC,KAAKN,SAAUK,GAC9DC,KAAKE,MAAQ,KAEbF,KAAKG,YAGLH,KAAKP,WAAa,GAAIhB,GAAkB2B,OAGxCJ,KAAKK,SAAUL,KAAKP,WAAY,MAAOO,KAAKM,WAC5CN,KAAKK,SAAUL,KAAKP,WAAY,SAAUO,KAAKO,WAC/CP,KAAKK,SAAUL,KAAKP,WAAY,OAAQO,KAAKQ,SAC7CR,KAAKK,SAAUL,KAAKP,WAAY,QAASO,KAAKQ,SAE9CR,KAAKS,eAGTA,YAAa,SAAUV,GACnB,GAAIA,GAAUA,KACdC,MAAKD,QAAQJ,gBAAkBI,EAAQJ,eACvC,IAAIe,GAAOV,IAEXA,MAAKd,gBAAkB,GAAIT,GAAkBkC,iBAAmBC,GAAIZ,KAAKD,QAAQa,KACjFZ,KAAKd,gBAAgB2B,IAAMb,KAAKd,gBAAgB4B,WAAWC,QAAUf,KAAKD,QAAQa,GAAK,YAElFZ,KAAKD,QAAQJ,kBACdK,KAAKd,gBAAgB2B,IAAMb,KAAKd,gBAAgB2B,IAAM,yBAE1Db,KAAKd,gBAAgB8B,OACjBC,QAAS,SAAUC,GACjBR,EAAKQ,iBAAmBA,EACxBR,EAAKS,UAEPC,MAAO,SAAUC,EAAOC,GACgB,mBAA1BA,GAASC,aACnB/C,EAAW4C,MAAOE,EAASC,aAAaC,QAAU,0BAA2B,IAAMC,QAAS,WAAaC,OAAOC,UAAUC,eAAeC,UAEzIrD,EAAW4C,MAAO,2CAA4C,IAAMK,QAAS,WAAaC,OAAOC,UAAUC,eAAeC,cAMtIV,OAAQ,SAAUpB,GACdC,KAAKD,QAAUE,EAAEnB,OAAQkB,KAAKD,QAASA,EACvC,IAAI+B,GAAW9B,KAAK+B,gBACpBC,GAAE,YAAYC,MAGd,IACIC,GADAC,EAAOnC,KAAKd,gBAAgB4B,WAAWsB,SAASC,SAGlDH,GADmB,IAAhBC,EAAKG,OACU,EAEAH,EAAMA,EAAKG,OAAO,GAAK,GAG3CtC,KAAKuC,IAAIC,KAAMV,GACXK,KAAMnC,KAAKd,gBAAgB4B,WAAWsB,SAASC,UAC/CI,kBAAmBzC,KAAKd,gBAAgB4B,WAAWsB,SAASK,kBAC5D7B,GAAIZ,KAAKD,QAAQa,GACjBsB,gBAAiBA,EACjBQ,MAAO1C,KAAKb,QAIXa,KAAKD,QAAQ4C,YACdC,IAAM3C,EAAE4C,UAAWnC,KAAKP,UAAYS,GAAIZ,KAAKD,QAAQ4C,aAChDC,IACHA,IAAIE,qBAEJtE,EAAW4C,MAAO,2DAGY,OAA3BpB,KAAKD,QAAQF,WAAsBG,KAAKD,QAAQF,UAAY,KAC7DG,KAAKD,QAAQF,UAAY,GAE7BG,KAAK+C,YAETf,EAAE,yBAAyBgB,UAC3BhB,EAAE,WAAWiB,IAAI,WAAW,SAGhCF,SAAU,SAAUhD,GAChBC,KAAKD,QAAUE,EAAEnB,OAAQkB,KAAKD,QAASA,IAEP,OAA3BC,KAAKD,QAAQF,WAAsBG,KAAKD,QAAQF,UAAY,KAC7DG,KAAKD,QAAQF,UAAY,GAE7BG,KAAKD,QAAQmD,kBAAoBlD,KAAKkB,iBAAiBiC,IAAK,UAAWC,OAAOd,OAC9EtC,KAAKD,QAAQH,WAAayD,KAAKC,KAAMtD,KAAKD,QAAQmD,kBAAoBxB,OAAOC,UAAU4B,YAAYJ,IAAK,oBACxG,IAAIK,GAAe9B,OAAOC,UAAU4B,YAAYJ,IAAK,qBAAyBnD,KAAKD,QAAQF,UAAY,GACnG4D,EAAkB,IACtBA,GAAkBzD,KAAKkB,iBAAiBiC,IAAK,UAAWC,OAAOM,MAAOF,EAAYA,EAAa9B,OAAOC,UAAU4B,YAAYJ,IAAK,qBACjInD,KAAKD,QAAQ4D,YAAcF,EAAgBnB,OAEtCZ,OAAOC,UAAU4B,YAAYJ,IAAK,oBAAuBnD,KAAKD,QAAQF,UAAcG,KAAKD,QAAQmD,kBAAoBxB,OAAOC,UAAU4B,YAAYJ,IAAK,sBACxJM,MAEJ/B,OAAOC,UAAUiC,kBAAkBC,gBAAiB7D,KAAKD,SACzDC,KAAKP,WAAWqE,MAAOL,IAG3BjD,QAAS,SAAUT,GACfC,KAAKD,QAAUE,EAAEnB,OAAQkB,KAAKD,QAASA,GACvCC,KAAK+D,gBACL/D,KAAKgE,YACLhE,KAAKiE,kBAQTC,OAAQ,SAAUd,GACdnD,EAAEkE,KAAKf,EAAQ,SAAU/B,GACrBK,OAAOC,UAAUyC,eAAe3E,WAAW4E,IAAKhD,GAASlC,MAAM,MAEnE6C,EAAG,yBAA0BgB,UAC7BhD,KAAKiE,iBACLjE,KAAKsE,cAQTA,WAAY,WACR,GAAIC,GAAmBvE,KAAKd,gBAAgB4B,WAAWsB,QACvDmC,GAAiBC,wBAA+E,mBAA9CxE,MAAKP,WAAWoD,WAAW4B,KAAM,UAAmF,mBAAhDzE,MAAKP,WAAWoD,WAAW4B,KAAM,WACvJ/C,OAAOC,UAAUiC,kBAAkBc,kBAAkBH,GACrDvC,EAAE,gBAAgB2C,MAAM,WACtB3C,EAAEhC,MAAM4E,KAAK,kBAAkBC,QAC9B,WACD7C,EAAEhC,MAAM4E,KAAK,kBAAkB3C,UAQrC+B,UAAW,WACP,GAAItD,GAAOV,IACXC,GAAEkE,KAAMnE,KAAKP,WAAW2D,OAAO0B,UAAW,SAAUzD,GAClDX,EAAKJ,UAAWe,KAElBrB,KAAKsE,cAOThE,UAAW,SAASe,GAChBrB,KAAKD,QAAQyE,yBAA0B,EAIvCnD,EAAM0D,IAAI,YAAa/E,KAAKY,GAC5B,IAAIoE,GAAU,GAAItG,GAA2BuG,cAAc5D,EAG3DrB,MAAKG,SAASkB,EAAM8B,IAAI,OAAS6B,EAEjChF,KAAKuC,IAAIqC,KAAK,sBAAsBM,MAAMF,EAAQjG,IAElDiD,EAAE,gBAAgB2C,MAAM,WACtB3C,EAAEhC,MAAM4E,KAAK,kBAAkBC,QAC9B,WACD7C,EAAEhC,MAAM4E,KAAK,kBAAkB3C,UAQrC1B,UAAW,SAAUc,GAClBrB,KAAKuC,IAAIqC,KAAM,IAAMvD,EAAMT,IAAKuE,UAMnCpB,cAAe,WACX/B,EAAE,gBAAgBmD,UAItBlB,eAAiB,WACiC,IAAzCjE,KAAKuC,IAAIqC,KAAK,gBAAgBtC,QAA0D,IAAxCtC,KAAKuC,IAAIqC,KAAK,eAAetC,OAChFtC,KAAKuC,IAAIqC,KAAK,yBAAyBC,OAEvC7E,KAAKuC,IAAIqC,KAAK,yBAAyB3C,QAK7CmD,kBAAoB,SAASC,GACzBA,EAAMC,iBACY,QAAdtF,KAAKb,MACLa,KAAKuF,WAAW,OAAO,QACvBvF,KAAKb,KAAO,SAEZa,KAAKuF,WAAW,OAAO,OACvBvF,KAAKb,KAAO,OAEhBa,KAAKwF,kBAOTD,WAAY,SAASE,EAAS/C,GAG1B,GAFAgD,QAAQC,IAAI,WAEI,cAAZF,GAAqC,cAAV/C,EAC3B,MAAO1C,MAAKP,WAAWmG,eAE3B,IAAgB,SAAZH,EAAmB,CACnB,GAAc,QAAV/C,EACA,MAAO1C,MAAKP,WAAWmG,eACpB,IAAc,SAAVlD,EACP,MAAO1C,MAAKP,WAAWoG,mBASnCC,UAAY,SAAUT,GACjB,GAAIU,GAAWV,EAAMW,OAAOC,OAC5BvF,MAAOV,KAEPgC,EAAE,YAAa,qBAAqBmC,KAAK,WACtCnE,KAAKiG,QAAUF,EACfG,KAAOlE,EAAEhC,KAAKmG,cAAcA,eAExBJ,EACFrF,KAAK0F,YAAYF,MAEjBxF,KAAK2F,aAAaH,SAS5BI,iBAAmB,SAAUjB,GACzB,GACIa,GACAK,EAFAC,EAAW,EAGgB,WAA3BnB,EAAMW,OAAOS,WACbD,EAAWnB,EAAMW,OACjBE,EAAOlE,EAAEqD,EAAMW,OAAOG,cAAcA,eACpCI,EAAS,SACyB,OAA3BlB,EAAMW,OAAOS,YACpBD,EAAWxE,EAAE,IAAMqD,EAAMW,OAAOG,cAAcvF,IAAIgE,KAAK,aAAa,GACpEsB,EAAOlE,EAAEqD,EAAMW,OAAOG,eACtBI,EAAS,MAETC,EAASP,QACI,OAATM,GACAC,EAASP,QAAU,GACnBjG,KAAKqG,aAAaH,IACF,UAATK,GACPvG,KAAKoG,YAAYF,GAGR,OAATK,GACAC,EAASP,QAAU,WACnBjG,KAAKoG,YAAYF,IACD,UAATK,GACPvG,KAAKqG,aAAaH,IAK9BE,YAAa,SAASF,GAClBA,EAAKQ,YAAY,SAASC,SAAS,QACnCT,EAAKtB,KAAK,KAAK8B,YAAY,SAASC,SAAS,QAC7CT,EAAKtB,KAAK,cAAc8B,YAAY,aAAaC,SAAS,WAC1DT,EAAKtB,KAAK,gBAAgB8B,YAAY,eAAeC,SAAS,cAGlEN,aAAc,SAASH,GACnBA,EAAKQ,YAAY,QAAQC,SAAS,SAClCT,EAAKtB,KAAK,KAAK8B,YAAY,QAAQC,SAAS,SAC5CT,EAAKtB,KAAK,YAAY8B,YAAY,WAAWC,SAAS,aACtDT,EAAKtB,KAAK,cAAc8B,YAAY,aAAaC,SAAS,gBAG9DnB,eAAgB,WACM,QAAdxF,KAAKb,KACL6C,EAAE,cAAc0E,YAAY,sBAAsBC,SAAS,qBAE3D3E,EAAE,cAAc0E,YAAY,qBAAqBC,SAAS,uBAIlE5E,eAAiB,WACb,GAAI6E,KAwCJ,OArCAA,GAAWC,KAAK,2BAChBD,EAAWC,KAAK,iFAChBD,EAAWC,KAAK,+CAChBD,EAAWC,KAAK,sCAChBD,EAAWC,KAAK,+GAChBD,EAAWC,KAAS,kBACpBD,EAAWC,KAAK,8FAChBD,EAAWC,KAAK,cAChBD,EAAWC,KAAK,gBAChBD,EAAWC,KAAK,SAGhBD,EAAWC,KAAK,4GAChBD,EAAWC,KAAK,cAChBD,EAAWC,KAAK,2CAChBD,EAAWC,KAAK,wKAChBD,EAAWC,KAAK,4LAChBD,EAAWC,KAAK,+CAChBD,EAAWC,KAAK,2CAChBD,EAAWC,KAAK,2DAChBD,EAAWC,KAAK,wCAChBD,EAAWC,KAAK,eAChBD,EAAWC,KAAK,oCAChBD,EAAWC,KAAK,sCAChBD,EAAWC,KAAK,0LAChBD,EAAWC,KAAK,wBAChBD,EAAWC,KAAK,wBAChBD,EAAWC,KAAK,wBAChBD,EAAWC,KAAK,wBAChBD,EAAWC,KAAK,wBAChBD,EAAWC,KAAK,wBAChBD,EAAWC,KAAK,gBAEhBD,EAAWC,KAAK,eAChBD,EAAWC,KAAK,YAChBD,EAAWC,KAAK,ibAET5G,EAAE6B,SAAS8E,EAAWE,KAAK,OAK1C,QACInI,eAAgBA"} \ No newline at end of file +{"version":3,"file":"library-folderlist-view.js","sources":["../../../src/mvc/library/library-folderlist-view.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","mod_library_model","mod_library_folderrow_view","FolderListView","Backbone","View","extend","el","progress","progressStep","folderContainer","sort","events","click #select-all-checkboxes","click .dataset_row","click .folder_row","click .sort-folder-link","collection","defaults","include_deleted","page_count","show_page","initialize","options","this","_","modal","rowViews","Folder","listenTo","renderOne","removeOne","rePaint","fetchFolder","that","FolderContainer","id","url","attributes","urlRoot","fetch","success","folder_container","render","error","model","response","responseJSON","err_msg","onclick","Galaxy","libraries","library_router","back","template","templateFolder","$","hide","upper_folder_id","path","metadata","full_path","length","$el","html","parent_library_id","order","dataset_id","row","findWhere","showDatasetDetails","paginate","tooltip","css","total_items_count","get","models","Math","ceil","preferences","page_start","items_to_render","slice","items_shown","folderToolbarView","renderPaginator","reset","removeAllRows","renderAll","checkEmptiness","addAll","each","folderListView","add","postRender","fetched_metadata","contains_file_or_folder","type","configureElements","reverse","set","rowView","FolderRowView","find","after","filter","data","remove","show","sortColumnClicked","event","preventDefault","sortFolder","renderSortIcon","sort_by","console","log","sortByNameAsc","sortByNameDesc","selectAll","selected","target","checked","$row","parentElement","makeDarkRow","makeWhiteRow","selectClickedRow","source","checkbox","localName","removeClass","addClass","tmpl_array","push","join"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/library/library-folderrow-view.js.map b/static/maps/mvc/library/library-folderrow-view.js.map index c4122ea9e53..3f5903e0ace 100644 --- a/static/maps/mvc/library/library-folderrow-view.js.map +++ b/static/maps/mvc/library/library-folderrow-view.js.map @@ -1 +1 @@ -{"version":3,"file":"library-folderrow-view.js","sources":["../../../src/mvc/library/library-folderrow-view.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","mod_library_model","mod_library_dataset_view","FolderRowView","Backbone","View","extend","lastSelectedHistory","events","click .undelete_dataset_btn","click .undelete_folder_btn","options","type","initialize","folder_item","this","model","render","template","get","templateRowDeletedFolder","templateRowFolder","templateRowDeletedFile","templateRowFile","console","error","setElement","content_item","$el","show","showDatasetDetails","Galaxy","libraries","datasetView","LibraryDatasetView","id","undeleteDataset","event","$","hide","that","dataset_id","target","closest","dataset","folderListView","collection","url","urlRoot","destroy","success","response","remove","updated_dataset","Item","add","sortByNameAsc","onclick","folder_id","window","location","responseJSON","err_msg","undeleteFolder","folder","updated_folder","FolderAsModel","tmpl_array","push","_","join"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"library-folderrow-view.js","sources":["../../../src/mvc/library/library-folderrow-view.js"],"names":["define","mod_toastr","mod_library_model","mod_library_dataset_view","FolderRowView","Backbone","View","extend","events","click .undelete_dataset_btn","click .undelete_folder_btn","click .edit_folder_btn","click .cancel_folder_btn","click .save_folder_btn","defaults","type","visibility_config","edit_folder_btn","save_folder_btn","cancel_folder_btn","permission_folder_btn","edit_mode","initialize","options","this","_","render","folder_item","model","template","get","prepareButtons","templateRowDeletedFolder","templateRowFolder","templateRowDeletedFile","templateRowFile","console","error","setElement","content_item","button_config","$el","show","folder","vis_config","showDatasetDetails","Galaxy","libraries","datasetView","LibraryDatasetView","id","undeleteDataset","event","$","hide","that","dataset_id","target","closest","data","dataset","folderListView","collection","url","urlRoot","destroy","success","response","remove","updated_dataset","Item","add","sortByNameAsc","onclick","folder_id","window","location","responseJSON","err_msg","undeleteFolder","updated_folder","FolderAsModel","startModifications","repaint","cancelModifications","saveModifications","is_changed","new_name","find","val","length","warning","set","new_description","row_view","save","patch","info","old_element","replaceWith","tooltip","join","tmpl_array","push"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/library/library-foldertoolbar-view.js.map b/static/maps/mvc/library/library-foldertoolbar-view.js.map index 7acd524224b..155538003e7 100644 --- a/static/maps/mvc/library/library-foldertoolbar-view.js.map +++ b/static/maps/mvc/library/library-foldertoolbar-view.js.map @@ -1 +1 @@ -{"version":3,"file":"library-foldertoolbar-view.js","sources":["../../../src/mvc/library/library-foldertoolbar-view.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","mod_library_model","mod_select","FolderToolbarView","Backbone","View","extend","el","events","click #toolbtn_create_folder","click #toolbtn_bulk_import","click #include_deleted_datasets_chk","click #toolbtn_show_libinfo","click #toolbtn_bulk_delete","click #page_size_prompt","defaults","can_add_library_item","contains_file_or_folder","chain_call_control","total_number","failed_number","disabled_jstree_element","modal","jstree","histories","select_genome","select_extension","list_extensions","auto","id","text","description","list_genomes","initialize","options","this","_","fetchExtAndGenomes","render","toolbar_template","templateToolBar","template_defaults","is_admin","is_anonym","mutiple_add_dataset_options","Galaxy","user","isAdmin","isAnonymous","config","user_library_import_dir","allow_library_path_paste","library_import_dir","$el","html","renderPaginator","paginator_template","templatePaginator","find","show_page","parseInt","page_count","total_items_count","items_shown","configureElements","$","show","hide","tooltip","createFolderFromModal","event","preventDefault","stopPropagation","self","template","templateNewFolderInModal","closing_events","title","body","buttons","Create","create_new_folder_event","Close","folderDetails","serialize_new_folder","validate_new_folder","folder","FolderAsModel","url_items","history","fragment","split","current_folder_id","length","url","urlRoot","save","success","set","type","libraries","folderListView","collection","add","error","model","response","responseJSON","err_msg","name","val","modalBulkImport","checkedValues","info","refreshUserHistoriesList","that","templateBulkImportInModal","models","Import","importAllIntoHistory","callback","GalaxyHistories","fetch","disableButton","history_id","history_name","last_used_history_id","dataset_ids","folder_ids","each","parentElement","classList","contains","push","datasets_to_import","i","library_dataset_id","historyItem","HistoryItem","content","source","library_folder_id","initChainCallControl","action","jQuery","getJSON","root","chainCallImportingIntoHistory","updateProgress","progress","progressStep","width","Math","round","txt_representation","download","folder_id","format","data","ld_ids","processDownload","method","param","inputs","pair","appendTo","submit","remove","addFilesFromHistoryModal","template_modal","templateAddFilesFromHistory","folder_name","full_path","Add","addAllDatasetsFromHistory","closing_callback","library_router","back","fetchAndDisplayHistoryContents","change","target","value","importFilesFromPathModal","templateImportPathModal","importFromPathsClicked","navigate","trigger","renderSelectBoxes","get","datatypes","key","extension","description_url","sort","a","b","unshift","genomes","css","container","importFilesFromGalaxyFolderModal","templateBrowserModal","importFromJstreePath","renderJstree","Jstree","require","core","plugins","types","icon","file","checkbox","three_state","err_code","warning","preserve_dirs","is","link_data","file_type","dbkey","paths","valid_paths","trimmed","trim","chainCallImportingFolders","templateAddingDatasetsProgressBar","templateDeletingDatasetsProgressBar","templateImportIntoHistoryProgressBar","console","selected_nodes","get_selected","selection_type","undefined","li_attr","full_source","chainCallImportingUserdirFiles","history_contents","HistoryContents","history_contents_template","templateHistoryContents","contents","reverse","checked_hdas","history_dataset_ids","hdas_to_add","hid","history_dataset_id","folder_item","Item","from_hda_id","chainCallAddingHdas","history_item_set","popped_item","pop","onclick","window","location","promise","when","done","fail","post","hdas_set","added_hdas","Folder","chainCallDeletingItems","items_to_delete","deleted_items","destroy","item","include_deleted","updated_item","model_class","checkIncludeDeleted","fetchFolder","checked","deleteSelectedDatasets","substring","items_total","dataset","showLibInfo","library_id","folderContainer","attributes","metadata","parent_library_id","library","libraryListView","showLibInfoModal","Library","templateLibInfoInModal","showImportModal","showPageSizePrompt","folder_page_size","prompt","preferences","tmpl_array","join"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"library-foldertoolbar-view.js","sources":["../../../src/mvc/library/library-foldertoolbar-view.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","mod_library_model","mod_select","FolderToolbarView","Backbone","View","extend","el","events","click #toolbtn_create_folder","click #toolbtn_bulk_import","click #include_deleted_datasets_chk","click #toolbtn_show_libinfo","click #toolbtn_bulk_delete","click #page_size_prompt","defaults","can_add_library_item","contains_file_or_folder","chain_call_control","total_number","failed_number","disabled_jstree_element","modal","jstree","histories","select_genome","select_extension","list_extensions","auto","id","text","description","list_genomes","initialize","options","this","_","fetchExtAndGenomes","render","toolbar_template","templateToolBar","template_defaults","is_admin","is_anonym","mutiple_add_dataset_options","Galaxy","user","isAdmin","isAnonymous","config","user_library_import_dir","allow_library_path_paste","library_import_dir","$el","html","renderPaginator","paginator_template","templatePaginator","find","show_page","parseInt","page_count","total_items_count","items_shown","configureElements","$","show","hide","tooltip","createFolderFromModal","event","preventDefault","stopPropagation","self","template","templateNewFolderInModal","closing_events","title","body","buttons","Create","create_new_folder_event","Close","folderDetails","serialize_new_folder","validate_new_folder","folder","FolderAsModel","url_items","history","fragment","split","current_folder_id","length","url","urlRoot","save","success","set","type","libraries","folderListView","collection","add","error","model","response","responseJSON","err_msg","name","val","modalBulkImport","checkedValues","info","refreshUserHistoriesList","that","templateBulkImportInModal","models","Import","importAllIntoHistory","callback","GalaxyHistories","fetch","disableButton","history_id","history_name","last_used_history_id","dataset_ids","folder_ids","each","parentElement","data","classList","contains","push","datasets_to_import","i","library_dataset_id","historyItem","HistoryItem","content","source","library_folder_id","initChainCallControl","action","jQuery","getJSON","root","chainCallImportingIntoHistory","updateProgress","progress","progressStep","width","Math","round","txt_representation","download","folder_id","format","ld_ids","processDownload","method","param","inputs","pair","appendTo","submit","remove","addFilesFromHistoryModal","template_modal","templateAddFilesFromHistory","folder_name","full_path","Add","addAllDatasetsFromHistory","closing_callback","library_router","back","fetchAndDisplayHistoryContents","change","target","value","importFilesFromPathModal","templateImportPathModal","importFromPathsClicked","navigate","trigger","renderSelectBoxes","get","datatypes","key","extension","description_url","sort","a","b","unshift","genomes","css","container","importFilesFromGalaxyFolderModal","templateBrowserModal","importFromJstreePath","renderJstree","Jstree","require","core","plugins","types","icon","file","checkbox","three_state","err_code","warning","preserve_dirs","is","link_data","file_type","dbkey","paths","valid_paths","trimmed","trim","chainCallImportingFolders","templateAddingDatasetsProgressBar","templateDeletingDatasetsProgressBar","templateImportIntoHistoryProgressBar","console","selected_nodes","get_selected","selection_type","undefined","li_attr","full_source","chainCallImportingUserdirFiles","history_contents","HistoryContents","history_contents_template","templateHistoryContents","contents","reverse","checked_hdas","history_dataset_ids","hdas_to_add","hid","history_dataset_id","folder_item","Item","from_hda_id","chainCallAddingHdas","history_item_set","popped_item","pop","onclick","window","location","promise","when","done","fail","post","hdas_set","added_hdas","Folder","chainCallDeletingItems","items_to_delete","log","deleted_items","destroy","item","include_deleted","updated_item","model_class","checkIncludeDeleted","fetchFolder","checked","deleteSelectedItems","substring","items_total","dataset","showLibInfo","library_id","folderContainer","attributes","metadata","parent_library_id","library","libraryListView","showLibInfoModal","Library","templateLibInfoInModal","showImportModal","showPageSizePrompt","folder_page_size","prompt","preferences","tmpl_array","join"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/library/library-libraryrow-view.js.map b/static/maps/mvc/library/library-libraryrow-view.js.map index 90842000572..11319dc0fb3 100644 --- a/static/maps/mvc/library/library-libraryrow-view.js.map +++ b/static/maps/mvc/library/library-libraryrow-view.js.map @@ -1 +1 @@ -{"version":3,"file":"library-libraryrow-view.js","sources":["../../../src/mvc/library/library-libraryrow-view.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","LibraryRowView","Backbone","View","extend","events","click .edit_library_btn","click .cancel_library_btn","click .save_library_btn","click .delete_library_btn","click .undelete_library_btn","edit_mode","element_visibility_config","upload_library_btn","edit_library_btn","permission_library_btn","save_library_btn","cancel_library_btn","delete_library_btn","undelete_library_btn","initialize","library","this","render","Galaxy","libraries","libraryListView","collection","get","$el","data","prepareButtons","tmpl","templateRow","setElement","button_config","show","repaint","$","hide","old_element","replaceWith","find","tooltip","vis_config","edit_button_clicked","cancel_library_modification","save_library_modification","is_changed","new_name","val","length","warning","set","new_description","new_synopsis","row_view","save","patch","success","error","model","response","responseJSON","err_msg","info","delete_library","destroy","add","preferences","remove","undelete_library","url","urlRoot","id","tmpl_array","push","_","template","join"],"mappings":"AACAA,QACI,kBACA,cACA,eACJ,SAASC,EACAC,EACAC,GAGT,GAAIC,GAAiBC,SAASC,KAAKC,QACjCC,QACEC,0BAAsC,sBACtCC,4BAAsC,8BACtCC,0BAAsC,4BACtCC,4BAAsC,iBACtCC,8BAAsC,oBAGxCC,WAAW,EAEXC,2BACEC,oBAAoB,EACpBC,kBAAkB,EAClBC,wBAAwB,EACxBC,kBAAkB,EAClBC,oBAAoB,EACpBC,oBAAoB,EACpBC,sBAAsB,GAGxBC,WAAa,SAASC,GACpBC,KAAKC,OAAOF,IAGdE,OAAQ,SAASF,GACQ,mBAAZA,KACTA,EAAUG,OAAOC,UAAUC,gBAAgBC,WAAWC,IAAIN,KAAKO,IAAIC,KAAK,QAE1ER,KAAKS,eAAeV,EACpB,IAAIW,GAAOV,KAAKW,aAGhB,OAFAX,MAAKY,WAAWF,GAAMX,QAAQA,EAASc,cAAeb,KAAKV,0BAA2BD,UAAWW,KAAKX,aACtGW,KAAKO,IAAIO,OACFd,MAGTe,QAAS,SAAShB,GAGhBiB,EAAE,YAAYC,MAGd,IAAIC,GAAclB,KAAKO,GAGvBP,MAAKC,OAAOF,GACZmB,EAAYC,YAAYnB,KAAKO,KAE7BP,KAAKO,IAAIa,KAAK,iBAAiBC,WAOjCZ,eAAgB,SAASV,GACvBuB,WAAatB,KAAKV,0BAEdU,KAAKX,aAAc,GACrBiC,WAAW5B,kBAAmB,EAC9B4B,WAAW3B,oBAAqB,EAChC2B,WAAW1B,oBAAqB,EAC5BG,EAAQO,IAAI,cAAe,GAC3BgB,WAAWzB,sBAAuB,EAClCyB,WAAW/B,oBAAqB,EAChC+B,WAAW9B,kBAAmB,EAC9B8B,WAAW7B,wBAAyB,GAC7BM,EAAQO,IAAI,cAAe,IACpCgB,WAAW5B,kBAAmB,EAC9B4B,WAAW3B,oBAAqB,EAChC2B,WAAWzB,sBAAuB,EAC9BE,EAAQO,IAAI,mBAAoB,IAClCgB,WAAW/B,oBAAqB,GAE9BQ,EAAQO,IAAI,sBAAuB,IACrCgB,WAAW9B,kBAAmB,GAE5BO,EAAQO,IAAI,sBAAuB,IACrCgB,WAAW7B,wBAAyB,KAG/BO,KAAKX,aAAc,IAC5BiC,WAAW/B,oBAAqB,EAChC+B,WAAW9B,kBAAmB,EAC9B8B,WAAW7B,wBAAyB,EACpC6B,WAAW5B,kBAAmB,EAC9B4B,WAAW3B,oBAAqB,EAChC2B,WAAW1B,oBAAqB,EAChC0B,WAAWzB,sBAAuB,GAGpCG,KAAKV,0BAA4BgC,YAKnCC,oBAAqB,WACnBvB,KAAKX,WAAY,EACjBW,KAAKe,WAIPS,4BAA6B,WAE3BxB,KAAKX,WAAY,EACjBW,KAAKe,WAGPU,0BAA2B,WACzB,GAAI1B,GAAUG,OAAOC,UAAUC,gBAAgBC,WAAWC,IAAIN,KAAKO,IAAIC,KAAK,OACxEkB,GAAa,EAEbC,EAAW3B,KAAKO,IAAIa,KAAK,uBAAuBQ,KACpD,IAAwB,mBAAbD,IAA4BA,IAAa5B,EAAQO,IAAI,QAAS,CACrE,KAAIqB,EAASE,OAAS,GAKlB,WADAnD,GAAWoD,QAAQ,qDAHnB/B,GAAQgC,IAAI,OAAQJ,GACpBD,GAAa,EAOrB,GAAIM,GAAkBhC,KAAKO,IAAIa,KAAK,8BAA8BQ,KACnC,oBAApBI,IAAmCA,IAAoBjC,EAAQO,IAAI,iBAC1EP,EAAQgC,IAAI,cAAeC,GAC3BN,GAAa,EAGjB,IAAIO,GAAejC,KAAKO,IAAIa,KAAK,2BAA2BQ,KAM5D,IAL4B,mBAAjBK,IAAgCA,IAAiBlC,EAAQO,IAAI,cACpEP,EAAQgC,IAAI,WAAYE,GACxBP,GAAa,GAGbA,EAAW,CACb,GAAIQ,GAAWlC,IACbD,GAAQoC,KAAK,MACXC,OAAO,EACPC,QAAS,SAAStC,GAChBmC,EAAS7C,WAAY,EACrB6C,EAASnB,QAAQhB,GACjBrB,EAAW2D,QAAQ,8BAErBC,MAAO,SAASC,EAAOC,GAEnB9D,EAAW4D,MADwB,mBAA1BE,GAASC,aACDD,EAASC,aAAaC,QAEtB,mEAKzB1C,MAAKX,WAAY,EACjBW,KAAKe,QAAQhB,GACbrB,EAAWiE,KAAK,yBAIpBC,eAAgB,WACd,GAAI7C,GAAUG,OAAOC,UAAUC,gBAAgBC,WAAWC,IAAIN,KAAKO,IAAIC,KAAK,OACxE0B,EAAWlC,IAEfD,GAAQ8C,SACNR,QAAS,SAAUtC,GACjBA,EAAQgC,IAAI,WAAW,GAEvB7B,OAAOC,UAAUC,gBAAgBC,WAAWyC,IAAI/C,GAChDmC,EAAS7C,WAAY,EACjBa,OAAOC,UAAU4C,YAAYzC,IAAI,mBAAoB,GACvDU,EAAE,YAAYC,OACdiB,EAASnB,QAAQhB,GACjBmC,EAAS3B,IAAIyC,UACJ9C,OAAOC,UAAU4C,YAAYzC,IAAI,mBAAoB,GAC9D4B,EAASnB,QAAQhB,GAEnBrB,EAAW2D,QAAQ,qCAErBC,MAAO,SAASC,EAAOC,GAEnB9D,EAAW4D,MADwB,mBAA1BE,GAASC,aACDD,EAASC,aAAaC,QAEtB,qDAMzBO,iBAAkB,WAChB,GAAIlD,GAAUG,OAAOC,UAAUC,gBAAgBC,WAAWC,IAAIN,KAAKO,IAAIC,KAAK,OACxE0B,EAAWlC,IAGfD,GAAQmD,IAAMnD,EAAQoD,QAAUpD,EAAQqD,GAAK,iBAC7CrD,EAAQ8C,SACNR,QAAS,SAAUtC,GAGjBA,EAAQgC,IAAI,WAAW,GACvB7B,OAAOC,UAAUC,gBAAgBC,WAAWyC,IAAI/C,GAChDmC,EAAS7C,WAAY,EACrB6C,EAASnB,QAAQhB,GACjBrB,EAAW2D,QAAQ,gCAErBC,MAAO,SAASC,EAAOC,GAEnB9D,EAAW4D,MADwB,mBAA1BE,GAASC,aACDD,EAASC,aAAaC,QAEtB,sDAMzB/B,YAAa,WAiDX,MAhDA0C,eAEAA,WAAWC,KAAK,kJAChBD,WAAWC,KAAK,yCAChBD,WAAWC,KAAK,uDAChBD,WAAWC,KAAK,2NAChBD,WAAWC,KAAK,mCAChBD,WAAWC,KAAK,sHAChBD,WAAWC,KAAK,4BAEhBD,WAAWC,KAAK,2DAChBD,WAAWC,KAAK,4EAChBD,WAAWC,KAAK,wMAChBD,WAAWC,KAAK,qCAChBD,WAAWC,KAAK,4EAChBD,WAAWC,KAAK,8BAChBD,WAAWC,KAAK,mCAChBD,WAAWC,KAAK,gCAChBD,WAAWC,KAAK,4BAEhBD,WAAWC,KAAK,wDAChBD,WAAWC,KAAK,0EAChBD,WAAWC,KAAK,mMAChBD,WAAWC,KAAK,qCAChBD,WAAWC,KAAK,yEAChBD,WAAWC,KAAK,8BAChBD,WAAWC,KAAK,mCAChBD,WAAWC,KAAK,gCAChBD,WAAWC,KAAK,4BAEhBD,WAAWC,KAAK,8CAChBD,WAAWC,KAAK,kJAChBD,WAAWC,KAAK,wKAChBD,WAAWC,KAAK,+JAChBD,WAAWC,KAAK,0BAChBD,WAAWC,KAAK,4CAChBD,WAAWC,KAAK,kGAChBD,WAAWC,KAAK,4KAChBD,WAAWC,KAAK,6BAChBD,WAAWC,KAAK,kTAChBD,WAAWC,KAAK,2WAChBD,WAAWC,KAAK,oSAChBD,WAAWC,KAAK,0SAChBD,WAAWC,KAAK,8TAChBD,WAAWC,KAAK,sUAChBD,WAAWC,KAAK,wBAChBD,WAAWC,KAAK,oBAETC,EAAEC,SAASH,WAAWI,KAAK,OAKtC,QACI9E,eAAgBA"} \ No newline at end of file +{"version":3,"file":"library-libraryrow-view.js","sources":["../../../src/mvc/library/library-libraryrow-view.js"],"names":["define","mod_masthead","mod_utils","mod_toastr","LibraryRowView","Backbone","View","extend","events","click .edit_library_btn","click .cancel_library_btn","click .save_library_btn","click .delete_library_btn","click .undelete_library_btn","edit_mode","element_visibility_config","upload_library_btn","edit_library_btn","permission_library_btn","save_library_btn","cancel_library_btn","delete_library_btn","undelete_library_btn","initialize","library","this","render","Galaxy","libraries","libraryListView","collection","get","$el","data","prepareButtons","tmpl","templateRow","setElement","button_config","show","repaint","$","hide","old_element","replaceWith","find","tooltip","vis_config","edit_button_clicked","cancel_library_modification","save_library_modification","is_changed","new_name","val","length","warning","set","new_description","new_synopsis","row_view","save","patch","success","error","model","response","responseJSON","err_msg","info","delete_library","destroy","add","preferences","remove","undelete_library","url","urlRoot","id","_","template","join"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/tours.js.map b/static/maps/mvc/tours.js.map index f21a4539a2d..7b34efeed0d 100644 --- a/static/maps/mvc/tours.js.map +++ b/static/maps/mvc/tours.js.map @@ -1 +1 @@ -{"version":3,"file":"tours.js","sources":["../../src/mvc/tours.js"],"names":["define","tour_opts","storage","window","sessionStorage","onEnd","removeItem","delay","orphan","hooked_tour_from_data","data","_","each","steps","step","preclick","onShow","$","click","postclick","onHide","textinsert","onShown","element","val","trigger","Galaxy","gxy_root","root","TourItem","Backbone","Model","extend","urlRoot","Tours","Collection","url","model","giveTour","tour_id","getJSON","tourdata","console","log","setItem","JSON","stringify","tour","Tour","init","goTo","restart","ToursView","View","initialize","self","this","setElement","fetch","success","render","error","tpl","template","join","$el","html","tours","models","on"],"mappings":"AAUAA,QAAQ,uBAAuB,WAE3B,GAAIC,IAAcC,QAASC,OAAOC,eAChBC,MAAO,WACHD,eAAeE,WAAW,qBAE9BC,MAAO,IACPC,QAAO,GAGrBC,EAAwB,SAASC,GA2BjC,MA1BAC,GAAEC,KAAKF,EAAKG,MAAO,SAASC,GACpBA,EAAKC,WACLD,EAAKE,OAAQ,WACTL,EAAEC,KAAKE,EAAKC,SAAU,SAASA,GAE3BE,EAAEF,GAAUG,YAIpBJ,EAAKK,YACLL,EAAKM,OAAS,WACVT,EAAEC,KAAKE,EAAKK,UAAW,SAASA,GAE5BF,EAAEE,GAAWD,YAIrBJ,EAAKO,aAILP,EAAKQ,QAAS,WACVL,EAAEH,EAAKS,SAASC,IAAIV,EAAKO,YAAYI,QAAQ,cAIlDf,EAKX,IAAqB,mBAAVgB,QACP,GAAIC,GAAWD,OAAOE,SAEtB,IAAID,GAAW,GAGnB,IAAIE,GAAWC,SAASC,MAAMC,QAC5BC,QAASN,EAAW,cAGlBO,EAAQJ,SAASK,WAAWH,QAC9BI,IAAMT,EAAW,YACjBU,MAAOR,IAILS,EAAY,SAASC,GACrB,GAAIH,GAAMT,EAAW,aAAeY,CACpCtB,GAAEuB,QAASJ,EAAK,SAAU1B,GAEtB+B,SAAWhC,EAAsBC,GACjCgC,QAAQC,IAAIF,UACZrC,eAAewC,QAAQ,mBAAoBC,KAAKC,UAAUpC,GAE1D,IAAIqC,GAAO,GAAIC,MAAKrC,EAAEqB,QAClBnB,MAAO4B,SAAS5B,OACjBZ,GAEH8C,GAAKE,OACLF,EAAKG,KAAK,GACVH,EAAKI,aAITC,EAAYtB,SAASuB,KAAKrB,QAE1BsB,WAAY,WACR,GAAIC,GAAOC,IACXA,MAAKC,WAAW,UAChBD,KAAKnB,MAAQ,GAAIH,GACjBsB,KAAKnB,MAAMqB,OACTC,QAAS,WACPJ,EAAKK,UAEPC,MAAO,WAELnB,QAAQmB,MAAM,8BAKtBD,OAAQ,WACJ,GACIE,GAAMnD,EAAEoD,UACR,wBACA,uFACA,2FACA,OACA,uCACI,OACI,4DACI,yCACJ,OACA,mEACJ,QACJ,YACA,SAASC,KAAK,IAClBR,MAAKS,IAAIC,KAAKJ,GAAKK,MAAOX,KAAKnB,MAAM+B,UAAUC,GAAG,QAAS,YAAa,WACpE/B,EAASrB,EAAEuC,MAAM9C,KAAK,gBAKlC,QAAQ0C,UAAWA,EACX3C,sBAAuBA,EACvBR,UAAWA,EACXqC,SAAUA"} \ No newline at end of file +{"version":3,"file":"tours.js","sources":["../../src/mvc/tours.js"],"names":["define","gxy_root","Galaxy","root","tour_opts","storage","window","sessionStorage","onEnd","removeItem","delay","orphan","hooked_tour_from_data","data","_","each","steps","step","preclick","onShow","$","click","postclick","onHide","textinsert","onShown","element","val","trigger","TourItem","Backbone","Model","extend","urlRoot","Tours","Collection","url","model","giveTour","tour_id","getJSON","tourdata","setItem","JSON","stringify","tour","Tour","init","goTo","restart","ToursView","View","initialize","self","this","setElement","fetch","success","render","error","console","tpl","template","join","$el","html","tours","models","on"],"mappings":"AAUAA,QAAQ,uBAAuB,WAE3B,GAAIC,GAA6B,mBAAXC,QAAyB,IAAMA,OAAOC,KAExDC,GAAcC,QAASC,OAAOC,eAChBC,MAAO,WACHD,eAAeE,WAAW,qBAE9BC,MAAO,IACPC,QAAO,GAGrBC,EAAwB,SAASC,GA2BjC,MA1BAC,GAAEC,KAAKF,EAAKG,MAAO,SAASC,GACpBA,EAAKC,WACLD,EAAKE,OAAQ,WACTL,EAAEC,KAAKE,EAAKC,SAAU,SAASA,GAE3BE,EAAEF,GAAUG,YAIpBJ,EAAKK,YACLL,EAAKM,OAAS,WACVT,EAAEC,KAAKE,EAAKK,UAAW,SAASA,GAE5BF,EAAEE,GAAWD,YAIrBJ,EAAKO,aAILP,EAAKQ,QAAS,WACVL,EAAEH,EAAKS,SAASC,IAAIV,EAAKO,YAAYI,QAAQ,cAIlDf,GAGPgB,EAAWC,SAASC,MAAMC,QAC5BC,QAAShC,EAAW,cAGlBiC,EAAQJ,SAASK,WAAWH,QAC9BI,IAAMnC,EAAW,YACjBoC,MAAOR,IAILS,EAAY,SAASC,GACrB,GAAIH,GAAMnC,EAAW,aAAesC,CACpCnB,GAAEoB,QAASJ,EAAK,SAAUvB,GAEtB,GAAI4B,GAAW7B,EAAsBC,EACrCN,gBAAemC,QAAQ,mBAAoBC,KAAKC,UAAU/B,GAE1D,IAAIgC,GAAO,GAAIC,MAAKhC,EAAEkB,QAClBhB,MAAOyB,EAASzB,OACjBZ,GAEHyC,GAAKE,OACLF,EAAKG,KAAK,GACVH,EAAKI,aAGTC,EAAYpB,SAASqB,KAAKnB,QAE1BoB,WAAY,WACR,GAAIC,GAAOC,IACXA,MAAKC,WAAW,UAChBD,KAAKjB,MAAQ,GAAIH,GACjBoB,KAAKjB,MAAMmB,OACTC,QAAS,WACPJ,EAAKK,UAEPC,MAAO,WAELC,QAAQD,MAAM,8BAKtBD,OAAQ,WACJ,GAAIG,GAAM/C,EAAEgD,UACR,wBACA,uFACA,2FACA,OACA,uCACI,OACI,iFACI,yCACJ,OACA,mEACJ,QACJ,YACA,SAASC,KAAK,IAClBT,MAAKU,IAAIC,KAAKJ,GAAKK,MAAOZ,KAAKjB,MAAM8B,UAAUC,GAAG,QAAS,YAAa,WACpE9B,EAASlB,EAAEkC,MAAMzC,KAAK,gBAKlC,QAAQqC,UAAWA,EACXtC,sBAAuBA,EACvBR,UAAWA,EACXkC,SAAUA"} \ No newline at end of file diff --git a/static/maps/mvc/ui/ui-select-default.js.map b/static/maps/mvc/ui/ui-select-default.js.map index 356908dfec3..cd7e827991d 100644 --- a/static/maps/mvc/ui/ui-select-default.js.map +++ b/static/maps/mvc/ui/ui-select-default.js.map @@ -1 +1 @@ -{"version":3,"file":"ui-select-default.js","sources":["../../../src/mvc/ui/ui-select-default.js"],"names":["define","Utils","Buttons","View","Backbone","extend","optionsDefault","id","uid","cls","error_text","empty_text","visible","wait","multiple","searchable","optional","initialize","options","self","this","merge","setElement","_template","$select","$el","find","$icon_dropdown","on","select2","minHeight","$","event","currentY","pageY","currentHeight","height","show","Math","max","hide","off","all_button","ButtonCheck","onclick","new_value","value","_availableOptions","trigger","prepend","addClass","prop","remove","update","data","undefined","onchange","exists","val","current","_getValue","isArray","length","_size","first","text","unwait","removeClass","disabled","is","enable","disable","append","_templateOption","label","key","closeOnSelect","setOnChange","callback","validate","available","each","i","e","push","attr","_","escape"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ui-select-default.js","sources":["../../../src/mvc/ui/ui-select-default.js"],"names":["define","Utils","Buttons","View","Backbone","extend","optionsDefault","id","uid","cls","error_text","empty_text","visible","wait","multiple","searchable","optional","initialize","options","self","this","model","Model","merge","setElement","_template","$select","$el","find","$icon_dropdown","on","select2","minHeight","$","event","currentY","pageY","currentHeight","height","show","Math","max","hide","off","all_button","ButtonCheck","onclick","new_value","value","_availableOptions","trigger","prepend","addClass","prop","remove","update","data","undefined","onchange","exists","val","current","_getValue","isArray","length","_size","first","text","unwait","removeClass","disabled","is","enable","disable","add","sorter","_","each","get","v","findWhere","push","sort","append","_templateOption","label","set","key","closeOnSelect","setOnChange","callback","validate","available","i","e","attr","escape"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/upload/default/default-row.js.map b/static/maps/mvc/upload/default/default-row.js.map index 11376dd3438..f3f7378278c 100644 --- a/static/maps/mvc/upload/default/default-row.js.map +++ b/static/maps/mvc/upload/default/default-row.js.map @@ -1 +1 @@ -{"version":3,"file":"default-row.js","sources":["../../../../src/mvc/upload/default/default-row.js"],"names":["define","Utils","UploadModel","UploadSettings","Popover","Select","Backbone","View","extend","status_classes","init","queued","running","success","error","settings","select_genome","select_extension","initialize","app","options","this","self","model","setElement","_template","title","container","$","placement","default_genome","value","css","onchange","genome","set","updateGenome","data","list_genomes","default_extension","extension","updateExtension","list_extensions","on","_removeRow","e","showExtensionInfo","$el","target","text","preventDefault","_showSettings","val","length","_refreshPercentage","_refreshStatus","_refreshInfo","_refreshGenome","_refreshExtension","_refreshFileSize","remove","collection","render","file_name","get","file_size","file_mode","html","bytesToString","removeClass","addClass","width","top","height","show","prototype","apply","info","hide","percentage","parseInt","status","enabled","attr","enable","disable","count","visible","empty","append","id"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"default-row.js","sources":["../../../../src/mvc/upload/default/default-row.js"],"names":["define","Utils","UploadModel","UploadSettings","Popover","Select","Backbone","View","extend","status_classes","init","queued","running","success","error","settings","select_genome","select_extension","initialize","app","options","this","self","model","setElement","_template","title","container","$","placement","default_genome","value","css","onchange","genome","set","data","list_genomes","default_extension","extension","list_extensions","on","_removeRow","e","showExtensionInfo","$el","target","text","preventDefault","_showSettings","val","length","_refreshPercentage","_refreshStatus","_refreshInfo","_refreshGenome","_refreshExtension","_refreshFileSize","remove","collection","render","file_name","get","file_size","file_mode","html","bytesToString","removeClass","addClass","width","top","height","show","prototype","apply","info","hide","percentage","parseInt","status","enabled","attr","enable","disable","count","visible","empty","append","id"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/mvc/visualization/visualization-model.js.map b/static/maps/mvc/visualization/visualization-model.js.map index be38b058ef6..0e61f110ffe 100644 --- a/static/maps/mvc/visualization/visualization-model.js.map +++ b/static/maps/mvc/visualization/visualization-model.js.map @@ -1 +1 @@ -{"version":3,"file":"visualization-model.js","sources":["../../../src/mvc/visualization/visualization-model.js"],"names":["Visualization","Backbone","Model","extend","defaults","config","urlRoot","apiUrl","Galaxy","root","initialize","data","_","isObject","this","_setUpListeners","set","key","val","oldConfig","get","clone","prototype","call","toString","idAndTitle","VisualizationCollection","Collection","model","url","models","options","collection","map","existing","id","merged","toJSON","historyId","length","join"],"mappings":"AASA,GAAIA,eAAgBC,SAASC,MAAMC,QAQ/BC,UACIC,WAIJC,QAAU,WACN,GAAIC,GAAS,qBACb,OAAOC,QAAOC,KAAOF,GAMzBG,WAAa,SAAUC,GAIfC,EAAEC,SAAUF,EAAKN,SAAYO,EAAEC,SAAUC,KAAKV,SAASC,SACvDO,EAAER,SAAUO,EAAKN,OAAQS,KAAKV,SAASC,QAG3CS,KAAKC,mBAKTA,gBAAkB,aAQlBC,IAAK,SAAUC,EAAKC,GAEhB,GAAY,WAARD,EAAkB,CAClB,GAAIE,GAAYL,KAAKM,IAAK,SAGtBR,GAAEC,SAAUM,KACZD,EAAMN,EAAET,OAAQS,EAAES,MAAOF,GAAaD,IAI9C,MADAjB,UAASC,MAAMoB,UAAUN,IAAIO,KAAMT,KAAMG,EAAKC,GACvCJ,MAKXU,SAAW,WACP,GAAIC,GAAaX,KAAKM,IAAK,OAAU,EAIrC,OAHIN,MAAKM,IAAK,WACVK,GAAc,IAAMX,KAAKM,IAAK,UAE3B,iBAAmBK,EAAa,OAU3CC,wBAA0BzB,SAAS0B,WAAWxB,QAE9CyB,MAAkB5B,cAMlB6B,IAAM,WACF,MAAOrB,QAAOC,KAAO,sBAMzBC,WAAa,SAAUoB,EAAQC,GAC3BA,EAAUA,OAUdf,IAAM,SAAUc,EAAQC,GAMpB,GAAIC,GAAalB,IACjBgB,GAASlB,EAAEqB,IAAKH,EAAQ,SAAUF,GAC9B,GAAIM,GAAWF,EAAWZ,IAAKQ,EAAMO,GACrC,KAAKD,EAAY,MAAON,EAGxB,IAAIQ,GAASF,EAASG,QAEtB,OADAzB,GAAET,OAAQiC,EAAQR,GACXQ,IAGXnC,SAAS0B,WAAWL,UAAUN,IAAIO,KAAMT,KAAMgB,EAAQC,IAI1DP,SAAW,WACN,OAAU,4BAA8BV,KAAKwB,UAAWxB,KAAKyB,QAASC,OAAQ,KAAMA,KAAM"} \ No newline at end of file +{"version":3,"file":"visualization-model.js","sources":["../../../src/mvc/visualization/visualization-model.js"],"names":["Visualization","Backbone","Model","extend","defaults","config","urlRoot","apiUrl","Galaxy","root","initialize","data","_","isObject","this","_setUpListeners","set","key","val","oldConfig","get","clone","prototype","call","toString","idAndTitle","VisualizationCollection","Collection","model","url","models","options","collection","map","existing","id","merged","toJSON","historyId","length","join"],"mappings":"AASA,GAAIA,eAAgBC,SAASC,MAAMC,QAQ/BC,UACIC,WAIJC,QAAU,WACN,GAAIC,GAAS,oBACb,OAAOC,QAAOC,KAAOF,GAMzBG,WAAa,SAAUC,GAIfC,EAAEC,SAAUF,EAAKN,SAAYO,EAAEC,SAAUC,KAAKV,SAASC,SACvDO,EAAER,SAAUO,EAAKN,OAAQS,KAAKV,SAASC,QAG3CS,KAAKC,mBAKTA,gBAAkB,aAQlBC,IAAK,SAAUC,EAAKC,GAEhB,GAAY,WAARD,EAAkB,CAClB,GAAIE,GAAYL,KAAKM,IAAK,SAGtBR,GAAEC,SAAUM,KACZD,EAAMN,EAAET,OAAQS,EAAES,MAAOF,GAAaD,IAI9C,MADAjB,UAASC,MAAMoB,UAAUN,IAAIO,KAAMT,KAAMG,EAAKC,GACvCJ,MAKXU,SAAW,WACP,GAAIC,GAAaX,KAAKM,IAAK,OAAU,EAIrC,OAHIN,MAAKM,IAAK,WACVK,GAAc,IAAMX,KAAKM,IAAK,UAE3B,iBAAmBK,EAAa,OAU3CC,wBAA0BzB,SAAS0B,WAAWxB,QAE9CyB,MAAkB5B,cAMlB6B,IAAM,WACF,MAAOrB,QAAOC,KAAO,sBAMzBC,WAAa,SAAUoB,EAAQC,GAC3BA,EAAUA,OAUdf,IAAM,SAAUc,EAAQC,GAMpB,GAAIC,GAAalB,IACjBgB,GAASlB,EAAEqB,IAAKH,EAAQ,SAAUF,GAC9B,GAAIM,GAAWF,EAAWZ,IAAKQ,EAAMO,GACrC,KAAKD,EAAY,MAAON,EAGxB,IAAIQ,GAASF,EAASG,QAEtB,OADAzB,GAAET,OAAQiC,EAAQR,GACXQ,IAGXnC,SAAS0B,WAAWL,UAAUN,IAAIO,KAAMT,KAAMgB,EAAQC,IAI1DP,SAAW,WACN,OAAU,4BAA8BV,KAAKwB,UAAWxB,KAAKyB,QAASC,OAAQ,KAAMA,KAAM"} \ No newline at end of file diff --git a/static/maps/mvc/workflow/workflow-view.js.map b/static/maps/mvc/workflow/workflow-view.js.map index 4321e1b9533..f9831cc4470 100644 --- a/static/maps/mvc/workflow/workflow-view.js.map +++ b/static/maps/mvc/workflow/workflow-view.js.map @@ -1 +1 @@ -{"version":3,"file":"workflow-view.js","sources":["../../../src/mvc/workflow/workflow-view.js"],"names":["define","Utils","Globals","Workflow","WorkflowCanvas","Node","ToolForm","Ui","async_save_text","Toastr","reset_tool_search","initValue","tool_menu_frame","$","contents","length","document","this","removeClass","find","hide","show","each","attr","hasClass","search_input","val","NODE_ICONS","tool","data_input","data_collection_input","subworkflow","pause","add_node_icon","$to_el","nodeType","iconStyle","$icon","addClass","before","EditorFormView","Backbone","View","extend","initialize","options","merge","$el","workflowView","node","html","setElement","id","after","_genericStepAttributesTemplate","type","$titleText","data","text","make_text_editable","on_finish","newLabel","lastValue","workflow","attemptUpdateNodeLabel","submit","name","warning","ajaxForm","dataType","success","active_form_has_changes","update_field_data","showWorkflowParameters","beforeSubmit","push","value","content_id","tool_state","form","change","bind","_annotationTemplate","annotation","layout_editor","self","layout","fit_canvas_to_nodes","scroll_to_nodes","canvas_manager","draw_overview","edit_workflow_attributes","clear_active_node","show_overview","jStorage","set","css","hide_overview","app","urls","active_ajax_call","close_editor","check_changes_in_active_form","has_changes","do_close","window","onbeforeunload","undefined","location","workflow_index","show_modal","Cancel","hide_modal","Save Changes","save_current_workflow","Don't Save","eventObj","success_callback","show_message","rectify_workflow_outputs","savefn","callback","ajax","url","save_workflow","workflow_data","JSON","stringify","to_simple","_","body","message","errors","errlist","i","v","appendTo","append","stored","Ok","unbind","click","focus","select","keyup","q","timer","clearTimeout","setTimeout","get","tool_search","s","map","n","index","parent","this_label","next","no_visible_tools","is","reset","datatypes","parse","Galaxy","root","async","responseText","datatypes_mapping","ext_to_type","ext_to_class_name","type_to_type","class_to_classes","_workflowLoadAjax","from_simple","upgrade_message","upgrade_messages","k","parseInt","nodes","vv","Continue","ajaxStart","ajaxError","e","x","statusText","Ignore error","make_popupmenu","Save","Run","run_workflow","Edit Attributes","Auto Re-layout","Close","overview_size","width","height","d","op","offsetParent","opo","offset","new_size","Math","max","offsetX","left","offsetY","top","workflows","_buildToolPanelWorkflows","wrap","last_expanded","slideUp","slideDown","rename_async","annotate_async","$section","copy","ButtonIcon","icon","cls","tooltip","onclick","step_count","copy_into_workflow","modal","title","buttons","Copy","$add","on","add_node_for_subworkflow","latest_id","workflowId","remove_all","cv","cc","load_workflow","cache","_moduleInitAjax","request_data","get_new_module_info","global","init_field_data","error","m","status","add_node_for_tool","create_node","add_node_for_module","display_pja","pja","get_pja_form","action_to_rem","closest","children","remove","active_node","post_job_actions","display_pja_list","pja_list","display_file_list","addlist","out_terminal","output_terminals","new_pja","action_type","target","output_name","parameter_re","workflow_parameters","wf_parm_container","wf_parm_box","new_parameter_content","matches","form_matches","form_html","match","concat","action_arguments","action_argument","arg_matches","element","inArray","substring","showToolForm","$container","$current","formView","isJSON","scrollTop","isSubType","child","$newNodeElement","title_text","$f","$title","scrollLeft","$b","prebuildNode","tmp","destroy","o","position","p","prependTo","activate_node","node_changed","po","y","terminal","redraw"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"workflow-view.js","sources":["../../../src/mvc/workflow/workflow-view.js"],"names":["define","Utils","Globals","Workflow","WorkflowCanvas","Node","ToolForm","Ui","async_save_text","Toastr","reset_tool_search","initValue","tool_menu_frame","$","contents","length","document","this","removeClass","find","hide","show","each","attr","hasClass","search_input","val","NODE_ICONS","tool","data_input","data_collection_input","subworkflow","pause","add_node_icon","$to_el","nodeType","iconStyle","$icon","addClass","before","EditorFormView","Backbone","View","extend","initialize","options","merge","$el","workflowView","node","html","setElement","id","after","_genericStepAttributesTemplate","type","$titleText","data","text","make_text_editable","on_finish","newLabel","lastValue","workflow","attemptUpdateNodeLabel","submit","name","warning","ajaxForm","dataType","success","active_form_has_changes","update_field_data","showWorkflowParameters","beforeSubmit","push","value","content_id","tool_state","form","change","bind","_annotationTemplate","annotation","layout_editor","self","layout","fit_canvas_to_nodes","scroll_to_nodes","canvas_manager","draw_overview","edit_workflow_attributes","clear_active_node","show_overview","jStorage","set","css","hide_overview","app","urls","active_ajax_call","close_editor","check_changes_in_active_form","has_changes","do_close","window","onbeforeunload","undefined","location","workflow_index","show_modal","Cancel","hide_modal","Save Changes","save_current_workflow","Don't Save","eventObj","success_callback","show_message","rectify_workflow_outputs","savefn","callback","ajax","url","save_workflow","workflow_data","JSON","stringify","to_simple","_","body","message","errors","errlist","i","v","appendTo","append","stored","Ok","unbind","click","focus","select","keyup","q","timer","clearTimeout","setTimeout","get","tool_search","s","map","n","index","parent","this_label","next","no_visible_tools","is","reset","datatypes","parse","Galaxy","root","async","responseText","datatypes_mapping","ext_to_type","ext_to_class_name","type_to_type","class_to_classes","_workflowLoadAjax","from_simple","upgrade_message","upgrade_messages","step_id","messages","details","deepeach","d","parseInt","nodes","Continue","ajaxStart","ajaxError","e","x","statusText","Ignore error","make_popupmenu","Save","Run","run_workflow","Edit Attributes","Auto Re-layout","Close","overview_size","width","height","op","offsetParent","opo","offset","new_size","Math","max","offsetX","left","offsetY","top","workflows","_buildToolPanelWorkflows","wrap","last_expanded","slideUp","slideDown","rename_async","annotate_async","$section","copy","ButtonIcon","icon","cls","tooltip","onclick","step_count","copy_into_workflow","modal","title","buttons","Copy","$add","on","add_node_for_subworkflow","latest_id","workflowId","k","vv","remove_all","cv","cc","load_workflow","cache","_moduleInitAjax","request_data","get_new_module_info","global","init_field_data","error","m","status","add_node_for_tool","create_node","add_node_for_module","display_pja","pja","get_pja_form","action_to_rem","closest","children","remove","active_node","post_job_actions","display_pja_list","pja_list","display_file_list","addlist","out_terminal","output_terminals","new_pja","action_type","target","output_name","parameter_re","workflow_parameters","wf_parm_container","wf_parm_box","new_parameter_content","matches","form_matches","form_html","match","concat","action_arguments","action_argument","arg_matches","element","inArray","substring","showToolForm","$container","$current","formView","isJSON","scrollTop","isSubType","child","$newNodeElement","title_text","$f","$title","scrollLeft","$b","prebuildNode","tmp","destroy","o","position","p","prependTo","activate_node","node_changed","po","y","terminal","redraw"],"mappings":"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"} \ No newline at end of file diff --git a/static/maps/onload.js.map b/static/maps/onload.js.map index c389fb68872..8ee28fba807 100644 --- a/static/maps/onload.js.map +++ b/static/maps/onload.js.map @@ -1 +1 @@ -{"version":3,"file":"onload.js","sources":["../src/onload.js"],"names":["replace_big_select_inputs","min_length","max_length","select_elts","refresh_select2","element","select_elt","$","options","placeholder","closeOnSelect","is","dropdownAutoWidth","containerCssClass","select2","jQuery","fn","undefined","each","this","not","num_options","find","length","hasClass","init_refresh_on_change","off","change","select_field","select_val","val","ref_on_change_vals","attr","split","last_selected_value","inArray","window","trigger","document","get","form","submit","click","confirm","_","Backbone","panels","require","extend","async_save_text","POPUPMENU","make_popupmenu","make_popup_menus","init_tag_click_function","TOURS","ready","tooltip","placement","anchor","galaxy_main_exists","parent","frames","galaxy_main","href","indexOf","urlparms","object","compact","map","location","search","slice","item","tour_id","url","repacked_url_args","Object","getOwnPropertyNames","k","join","history","pushState","giveTour","et","JSON","parse","sessionStorage","getItem","hooked_tour_from_data","steps","tour","Tour","tour_opts","init","restart","ex","console","log"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"onload.js","sources":["../src/onload.js"],"names":["replace_big_select_inputs","min_length","max_length","select_elts","refresh_select2","element","select_elt","$","options","placeholder","closeOnSelect","is","dropdownAutoWidth","containerCssClass","select2","jQuery","fn","undefined","each","this","not","num_options","find","length","hasClass","init_refresh_on_change","off","change","select_field","select_val","val","ref_on_change_vals","attr","split","last_selected_value","inArray","window","trigger","document","get","form","submit","click","confirm","_","Backbone","panels","require","extend","async_save_text","POPUPMENU","make_popupmenu","make_popup_menus","init_tag_click_function","TOURS","QUERY_STRING","ready","tooltip","placement","anchor","galaxy_main_exists","parent","frames","galaxy_main","href","indexOf","et","JSON","parse","sessionStorage","getItem","hooked_tour_from_data","steps","tour","Tour","tour_opts","init","restart"],"mappings":"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"} \ No newline at end of file diff --git a/static/scripts/bundled/analysis.bundled.js b/static/scripts/bundled/analysis.bundled.js index 99186c9585e..fc43504e577 100644 --- a/static/scripts/bundled/analysis.bundled.js +++ b/static/scripts/bundled/analysis.bundled.js @@ -1,12 +1,12 @@ -webpackJsonp([3,1],[function(t,e,i){(function(t,e){var n=i(1),s=n,o=i(59).GalaxyApp,a=i(57),r=i(10),l=i(89),c=i(88),d=i(61),h=i(19);window.app=function(i,n){window.Galaxy=new o(i,n),Galaxy.debug("analysis app");var u=i.config,p=new l({el:"#left",userIsAnonymous:Galaxy.user.isAnonymous(),search_url:u.search_url,toolbox:u.toolbox,toolbox_in_panel:u.toolbox_in_panel,stored_workflow_menu_entries:u.stored_workflow_menu_entries,nginx_upload_path:u.nginx_upload_path,ftp_upload_site:u.ftp_upload_site,default_genome:u.default_genome,default_extension:u.default_extension}),g=new r.CenterPanel({el:"#center"}),f=new c({el:"#right",galaxyRoot:Galaxy.root,userIsAnonymous:Galaxy.user.isAnonymous(),allow_user_dataset_purge:u.allow_user_dataset_purge}),m=new d.PageLayoutView(t.extend(i,{el:"body",left:p,center:g,right:f}));Galaxy.page=m,Galaxy.params=Galaxy.config.params,Galaxy.toolPanel=p.tool_panel,Galaxy.upload=p.uploadButton,Galaxy.currHistoryPanel=f.historyView,Galaxy.currHistoryPanel.listenToGalaxy(Galaxy),Galaxy.app={display:function(t,e){s(".select2-hidden-accessible").remove(),g.display(t)}};new(e.Router.extend({initialize:function(t){this.options=t},execute:function(t,e,i){Galaxy.debug("router execute:",t,e,i);var n=a.parse(e.pop());e.push(n),t&&t.apply(this,e)},routes:{"(/)":"home","(/)root*":"home"},home:function(t){(t.tool_id||t.job_id)&&"upload1"!==t.tool_id?this._loadToolForm(t):t.workflow_id?this._loadCenterIframe("workflow/run?id="+t.workflow_id):t.m_c?this._loadCenterIframe(t.m_c+"/"+t.m_a):this._loadCenterIframe("welcome")},_loadToolForm:function(t){t.id=t.tool_id,g.display(new h.View(t))},_loadCenterIframe:function(t,e){e=e||Galaxy.root,t=e+t,g.$("#galaxy_main").prop("src",t)}}))(i);s(function(){m.render().right.historyView.loadCurrentHistory(),Galaxy.listenTo(m.right.historyView,"history-size-change",function(){Galaxy.user.fetch({url:Galaxy.user.urlRoot()+"/"+(Galaxy.user.id||"current")})}),m.right.historyView.connectToQuotaMeter(m.masthead.quotaMeter),e.history.start({root:Galaxy.root,pushState:!0})})}}).call(e,i(3),i(2))},,,,,,,function(t,e,i){var n,s;(function(o,a){n=[i(4),i(50),i(53),i(22),i(49),i(13),i(8)],s=function(t,e,i,n,s,r,l){var c=o.View.extend({tagName:"label",initialize:function(t){this.model=t&&t.model||new o.Model(t),this.tagName=t.tagName||this.tagName,this.setElement(a("<"+this.tagName+"/>")),this.listenTo(this.model,"change",this.render,this),this.render()},title:function(t){this.model.set("title",t)},value:function(){return this.model.get("title")},render:function(){return this.$el.removeClass().addClass("ui-label").addClass(this.model.get("cls")).html(this.model.get("title")),this}}),d=o.View.extend({initialize:function(t){this.model=t&&t.model||new o.Model({message:null,status:"info",cls:"",persistent:!1}).set(t),this.listenTo(this.model,"change",this.render,this),this.render()},update:function(t){this.model.set(t)},render:function(){this.$el.removeClass().addClass("ui-message").addClass(this.model.get("cls"));var t=this.model.get("status");if(this.model.get("large")?this.$el.addClass(("success"==t&&"done"||"danger"==t&&"error"||t)+"messagelarge"):this.$el.addClass("alert").addClass("alert-"+t),this.model.get("message")){if(this.$el.html(this.model.get("message")),this.$el.fadeIn(),this.timeout&&window.clearTimeout(this.timeout),!this.model.get("persistent")){var e=this;this.timeout=window.setTimeout(function(){e.$el.fadeOut()},3e3)}}else this.$el.fadeOut();return this}}),h=o.View.extend({initialize:function(t){this.model=t&&t.model||new o.Model({type:"text",placeholder:"",disabled:!1,visible:!0,cls:"",area:!1}).set(t),this.tagName=this.model.get("area")?"textarea":"input",this.setElement(a("<"+this.tagName+"/>")),this.listenTo(this.model,"change",this.render,this),this.render()},events:{input:"_onchange"},value:function(t){return void 0!==t&&this.model.set("value","string"==typeof t?t:""),this.model.get("value")},render:function(){return this.$el.removeClass().addClass("ui-"+this.tagName).addClass(this.model.get("cls")).attr("id",this.model.id).attr("type",this.model.get("type")).attr("placeholder",this.model.get("placeholder")).val(this.model.get("value")),this.model.get("disabled")?this.$el.attr("disabled",!0):this.$el.removeAttr("disabled"),this.$el[this.model.get("visible")?"show":"hide"](),this},_onchange:function(){this.value(this.$el.val()),this.model.get("onchange")&&this.model.get("onchange")(this.model.get("value"))}}),u=o.View.extend({initialize:function(t){this.model=t&&t.model||new o.Model(t),this.setElement(a("
    ").append(this.$info=a("
    ")).append(this.$hidden=a("
    "))),this.listenTo(this.model,"change",this.render,this),this.render()},value:function(t){return void 0!==t&&this.model.set("value",t),this.model.get("value")},render:function(){return this.$el.attr("id",this.model.id),this.$hidden.val(this.model.get("value")),this.model.get("info")?this.$info.show().html(this.model.get("info")):this.$info.hide(),this}});return{Button:r.ButtonDefault,ButtonIcon:r.ButtonIcon,ButtonCheck:r.ButtonCheck,ButtonMenu:r.ButtonMenu,ButtonLink:r.ButtonLink,Input:h,Label:c,Message:d,Modal:l,RadioButton:n.RadioButton,Checkbox:n.Checkbox,Radio:n.Radio,Select:e,Hidden:u,Slider:i,Drilldown:s}}.apply(e,n),!(void 0!==s&&(t.exports=s))}).call(e,i(2),i(1))},,function(t,e,i){var n,s;(function(o,a){n=[i(4)],s=function(t){var e=o.View.extend({visible:!1,initialize:function(e){var i=this;this.options=t.merge(e,{id:t.uid(),title:"",icon:"",buttons:null,body:null,scrollable:!0,nopadding:!1,operations:null,placement:"bottom",cls:"ui-portlet",operations_flt:"right",collapsible:!1,collapsed:!1}),this.setElement(this._template(this.options)),this.$body=this.$(".portlet-body"),this.$title=this.$(".portlet-title-text"),this.$header=this.$(".portlet-header"),this.$content=this.$(".portlet-content"),this.$footer=this.$(".portlet-footer"),this.options.nopadding&&(this.$content.css("padding","0px"),this.$body.css("padding","0px")),this.$buttons=this.$(".portlet-buttons"),this.options.buttons?a.each(this.options.buttons,function(t,e){e.$el.prop("id",t),i.$buttons.append(e.$el)}):this.$buttons.remove(),this.$operations=this.$(".portlet-operations"),this.options.operations&&a.each(this.options.operations,function(t,e){e.$el.prop("id",t),i.$operations.append(e.$el)}),this.options.body&&this.append(this.options.body),this.collapsed=!1,this.options.collapsible&&(this.$title.addClass("no-highlight").css({cursor:"pointer","text-decoration":"underline"}),this.$title.on("click",function(){i.collapsed?i.expand():i.collapse()}),this.options.collapsed&&this.collapse())},append:function(t){this.$body.append(t)},empty:function(){this.$body.empty()},header:function(){return this.$header},body:function(){return this.$body},footer:function(){return this.$footer},show:function(){this.visible=!0,this.$el.fadeIn("fast")},hide:function(){this.visible=!1,this.$el.fadeOut("fast")},enableButton:function(t){this.$buttons.find("#"+t).prop("disabled",!1)},disableButton:function(t){this.$buttons.find("#"+t).prop("disabled",!0)},hideOperation:function(t){this.$operations.find("#"+t).hide()},showOperation:function(t){this.$operations.find("#"+t).show()},setOperation:function(t,e){var i=this.$operations.find("#"+t);i.off("click"),i.on("click",e)},title:function(t){var e=this.$title;return t&&e.html(t),e.html()},collapse:function(){this.collapsed=!0,this.$content.height("0%"),this.$body.hide(),this.$footer.hide(),this.trigger("collapsed")},expand:function(){this.collapsed=!1,this.$content.height("100%"),this.$body.fadeIn("fast"),this.$footer.fadeIn("fast"),this.trigger("expanded")},disable:function(){this.$(".portlet-backdrop").show()},enable:function(){this.$(".portlet-backdrop").hide()},_template:function(t){var e='
    ';return t.title&&(e+='
    ',t.icon&&(e+=' '),e+=''+t.title+"
    "),e+='
    ',"top"==t.placement&&(e+='
    '),e+='
    ',"bottom"==t.placement&&(e+='
    '),e+='