diff --git a/client/galaxy/scripts/mvc/tool/tools.js b/client/galaxy/scripts/mvc/tool/tools.js index c7f878d38f1..103b8738d60 100644 --- a/client/galaxy/scripts/mvc/tool/tools.js +++ b/client/galaxy/scripts/mvc/tool/tools.js @@ -621,6 +621,7 @@ var ToolSearchView = Backbone.View.extend({ events: { 'click': 'focus_and_select', 'keyup :input': 'query_changed', + 'change :input': 'query_changed', 'click #search-clear-btn': 'clear' }, diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py index 56298a3ed6f..dd457bf1c22 100644 --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -1091,9 +1091,7 @@ class JobWrapper( object, HasResourceParameters ): dataset.mark_unhidden() if dataset.ext == 'auto': dataset.extension = 'data' - # Update (non-library) job output datasets through the object store - if dataset not in job.output_library_datasets: - self.app.object_store.update_from_file(dataset.dataset, create=True) + self.__update_output(job, dataset) # Pause any dependent jobs (and those jobs' outputs) for dep_job_assoc in dataset.dependent_jobs: self.pause( dep_job_assoc.job, "Execution of this dataset's job is paused because its input datasets are in an error state." ) @@ -1111,6 +1109,13 @@ class JobWrapper( object, HasResourceParameters ): self.sa_session.add( job ) self.sa_session.flush() + else: + for dataset_assoc in job.output_datasets: + dataset = dataset_assoc.dataset + # Any reason for clean_only here? We should probably be more consistent and transfer + # the partial files to the object store regardless of whether job.state == DELETED + self.__update_output(job, dataset, clean_only=True) + self._report_error_to_sentry() # Perform email action even on failure. for pja in [pjaa.post_job_action for pjaa in job.post_job_actions if pjaa.post_job_action.action_type == "EmailAction"]: @@ -1298,17 +1303,19 @@ class JobWrapper( object, HasResourceParameters ): # lets not allow this to occur # need to update all associated output hdas, i.e. history was shared with job running for dataset in dataset_assoc.dataset.dataset.history_associations + dataset_assoc.dataset.dataset.library_associations: - trynum = 0 - while trynum < self.app.config.retry_job_output_collection: - try: - # Attempt to short circuit NFS attribute caching - os.stat( dataset.dataset.file_name ) - os.chown( dataset.dataset.file_name, os.getuid(), -1 ) - trynum = self.app.config.retry_job_output_collection - except ( OSError, ObjectNotFound ) as e: - trynum += 1 - log.warning( 'Error accessing %s, will retry: %s', dataset.dataset.file_name, e ) - time.sleep( 2 ) + purged = dataset.dataset.purged + if not purged: + trynum = 0 + while trynum < self.app.config.retry_job_output_collection: + try: + # Attempt to short circuit NFS attribute caching + os.stat( dataset.dataset.file_name ) + os.chown( dataset.dataset.file_name, os.getuid(), -1 ) + trynum = self.app.config.retry_job_output_collection + except ( OSError, ObjectNotFound ) as e: + trynum += 1 + log.warning( 'Error accessing %s, will retry: %s', dataset.dataset.file_name, e ) + time.sleep( 2 ) if getattr( dataset, "hidden_beneath_collection_instance", None ): dataset.visible = False dataset.blurb = 'done' @@ -1327,7 +1334,9 @@ class JobWrapper( object, HasResourceParameters ): # Update (non-library) job output datasets through the object store if dataset not in job.output_library_datasets: self.app.object_store.update_from_file(dataset.dataset, create=True) - self._collect_extra_files(dataset.dataset, self.working_directory) + self.__update_output(job, dataset) + if not purged: + self._collect_extra_files(dataset.dataset, self.working_directory) # Handle composite datatypes of auto_primary_file type if dataset.datatype.composite_type == 'auto_primary_file' and not dataset.has_data(): try: @@ -1341,7 +1350,7 @@ class JobWrapper( object, HasResourceParameters ): if job.states.ERROR == final_job_state: dataset.blurb = "error" dataset.mark_unhidden() - elif dataset.has_data(): + elif not purged and dataset.has_data(): # If the tool was expected to set the extension, attempt to retrieve it if dataset.ext == 'auto': dataset.extension = context.get( 'ext', 'data' ) @@ -1485,8 +1494,9 @@ class JobWrapper( object, HasResourceParameters ): collected_bytes = 0 # Once datasets are collected, set the total dataset size (includes extra files) for dataset_assoc in job.output_datasets: - dataset_assoc.dataset.dataset.set_total_size() - collected_bytes += dataset_assoc.dataset.dataset.get_total_size() + if not dataset_assoc.dataset.dataset.purged: + dataset_assoc.dataset.dataset.set_total_size() + collected_bytes += dataset_assoc.dataset.dataset.get_total_size() if job.user: job.user.adjust_total_disk_usage(collected_bytes) @@ -1503,7 +1513,8 @@ class JobWrapper( object, HasResourceParameters ): # fix permissions for path in [ dp.real_path for dp in self.get_mutable_output_fnames() ]: - util.umask_fix_perms( path, self.app.config.umask, 0o666, self.app.config.gid ) + if os.path.exists(path): + util.umask_fix_perms( path, self.app.config.umask, 0o666, self.app.config.gid ) # Finally set the job state. This should only happen *after* all # dataset creation, and will allow us to eliminate force_history_refresh. @@ -1800,6 +1811,27 @@ class JobWrapper( object, HasResourceParameters ): else: return 'anonymous@unknown' + def __update_output(self, job, dataset, clean_only=False): + """Handle writing outputs to the object store. + + This should be called regardless of whether the job was failed or not so + that writing of partial results happens and so that the object store is + cleaned up if the dataset has been purged. + """ + dataset = dataset.dataset + if dataset not in job.output_library_datasets: + purged = dataset.purged + if not purged and not clean_only: + self.app.object_store.update_from_file(dataset, create=True) + else: + # If the dataset is purged and Galaxy is configured to write directly + # to the object store from jobs - be sure that file is cleaned up. This + # is a bit of hack - our object store abstractions would be stronger + # and more consistent if tools weren't writing there directly. + target = dataset.file_name + if os.path.exists( target ): + os.remove( target ) + def __link_file_check( self ): """ outputs_to_working_directory breaks library uploads where data is linked. This method is a hack that solves that problem, but is diff --git a/lib/galaxy/managers/datasets.py b/lib/galaxy/managers/datasets.py index 6dd1d402f97..9104f1fcd92 100644 --- a/lib/galaxy/managers/datasets.py +++ b/lib/galaxy/managers/datasets.py @@ -300,15 +300,14 @@ class DatasetAssociationManager( base.ModelManager, # error here if disallowed - before jobs are stopped # TODO: this check may belong in the controller self.dataset_manager.error_unless_dataset_purge_allowed() - super( DatasetAssociationManager, self ).purge( dataset_assoc, flush=flush ) + + # We need to ignore a potential flush=False here and force the flush + # so that job cleanup associated with stop_creating_job will see + # the dataset as purged. + super( DatasetAssociationManager, self ).purge( dataset_assoc, flush=True ) # stop any jobs outputing the dataset_assoc - if dataset_assoc.creating_job_associations: - job = dataset_assoc.creating_job_associations[0].job - if not job.finished: - # signal to stop the creating job - job.mark_deleted( self.app.config.track_jobs_in_database ) - self.app.job_manager.job_stop_queue.put( job.id ) + self.stop_creating_job( dataset_assoc ) # more importantly, purge underlying dataset as well if dataset_assoc.dataset.user_can_purge: @@ -335,16 +334,10 @@ class DatasetAssociationManager( base.ModelManager, """ Stops an dataset_assoc's creating job if all the job's other outputs are deleted. """ - # TODO: use in purge above - RUNNING_STATES = ( - self.app.model.Job.states.QUEUED, - self.app.model.Job.states.RUNNING, - self.app.model.Job.states.NEW - ) if dataset_assoc.parent_id is None and len( dataset_assoc.creating_job_associations ) > 0: # Mark associated job for deletion job = dataset_assoc.creating_job_associations[0].job - if job.state in RUNNING_STATES: + if not job.finished: # Are *all* of the job's other output datasets deleted? if job.check_if_output_datasets_deleted(): job.mark_deleted( self.app.config.track_jobs_in_database ) diff --git a/lib/galaxy/queue_worker.py b/lib/galaxy/queue_worker.py index f3f8245b7e9..167be3e2339 100644 --- a/lib/galaxy/queue_worker.py +++ b/lib/galaxy/queue_worker.py @@ -87,7 +87,8 @@ def reload_tool(app, **kwargs): def reload_toolbox(app, **kwargs): log.debug("Executing toolbox reload on '%s'", app.config.server_name) reload_count = app.toolbox._reload_count - app.tool_cache.cleanup() + if app.tool_cache: + app.tool_cache.cleanup() app.toolbox = _get_new_toolbox(app) app.toolbox._reload_count = reload_count + 1 diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index 0e4ce5d49fb..de3b491454e 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -126,6 +126,7 @@ GALAXY_LIB_TOOLS_UNVERSIONED = [ "maf_by_block_number1", "wiggle2simple1", # Converters + "CONVERTER_bed_to_fli_0", "CONVERTER_fastq_to_fqtoc0", "CONVERTER_gff_to_interval_index_0", "CONVERTER_maf_to_fasta_0", diff --git a/lib/galaxy/tools/toolbox/base.py b/lib/galaxy/tools/toolbox/base.py index 402e490bb47..28a73fa4ab0 100644 --- a/lib/galaxy/tools/toolbox/base.py +++ b/lib/galaxy/tools/toolbox/base.py @@ -79,7 +79,13 @@ class AbstractToolBox( Dictifiable, ManagesIntegratedToolPanelMixin, object ): if tool_conf_watcher: self._tool_conf_watcher = tool_conf_watcher # Avoids (re-)starting threads in uwsgi else: - self._tool_conf_watcher = get_tool_conf_watcher(lambda: self.handle_reload_toolbox()) + if hasattr(self.app, 'tool_cache'): + # Normal galaxy instances should have a tool_cache, + # but the toolshed does not. + tool_cache = self.app.tool_cache + else: + tool_cache = None + self._tool_conf_watcher = get_tool_conf_watcher(reload_callback=lambda: self.handle_reload_toolbox(), tool_cache=tool_cache) self._filter_factory = FilterFactory( self ) self._tool_tag_manager = tool_tag_manager( app ) self._init_tools_from_configs( config_filenames ) diff --git a/lib/galaxy/tools/toolbox/cache.py b/lib/galaxy/tools/toolbox/cache.py index ee576d1d865..22b1fc882c6 100644 --- a/lib/galaxy/tools/toolbox/cache.py +++ b/lib/galaxy/tools/toolbox/cache.py @@ -13,16 +13,39 @@ class ToolCache(object): self._hash_by_tool_paths = {} self._tools_by_path = {} self._tool_paths_by_id = {} + self._mod_time_by_path = {} def cleanup(self): - """Remove uninstalled tools from tool cache if they are not on disk anymore or if their content has changed.""" - paths_to_cleanup = {path: tool.all_ids for path, tool in self._tools_by_path.items() if not os.path.exists(path) or md5_hash_file(path) != self._hash_by_tool_paths[path]} - for config_filename, tool_ids in paths_to_cleanup.items(): - del self._hash_by_tool_paths[config_filename] - del self._tools_by_path[config_filename] - for tool_id in tool_ids: - if tool_id in self._tool_paths_by_id: - del self._tool_paths_by_id[tool_id] + """ + Remove uninstalled tools from tool cache if they are not on disk anymore or if their content has changed. + + Returns list of tool_ids that have been removed. + """ + removed_tool_ids = [] + try: + paths_to_cleanup = {path: tool.all_ids for path, tool in self._tools_by_path.items() if self._should_cleanup(path)} + for config_filename, tool_ids in paths_to_cleanup.items(): + del self._hash_by_tool_paths[config_filename] + del self._tools_by_path[config_filename] + for tool_id in tool_ids: + if tool_id in self._tool_paths_by_id: + del self._tool_paths_by_id[tool_id] + removed_tool_ids.extend(tool_ids) + except Exception: + # If by chance the file is being removed while calculating the hash or modtime + # we don't want the thread to die. + pass + return removed_tool_ids + + def _should_cleanup(self, config_filename): + """Return True if `config_filename` does not exist or if modtime and hash have changes, else return False.""" + if not os.path.exists(config_filename): + return True + new_mtime = os.path.getmtime(config_filename) + if self._mod_time_by_path.get(config_filename) < new_mtime: + if md5_hash_file(config_filename) != self._hash_by_tool_paths.get(config_filename): + return True + return False def get_tool(self, config_filename): """ Get the tool from the cache if the tool is up to date. @@ -35,10 +58,12 @@ class ToolCache(object): del self._hash_by_tool_paths[config_filename] del self._tool_paths_by_id[tool_id] del self._tools_by_path[config_filename] + del self._mod_time_by_path[config_filename] def cache_tool(self, config_filename, tool): tool_hash = md5_hash_file(config_filename) tool_id = str( tool.id ) self._hash_by_tool_paths[config_filename] = tool_hash + self._mod_time_by_path[config_filename] = os.path.getmtime(config_filename) self._tool_paths_by_id[tool_id] = config_filename self._tools_by_path[config_filename] = tool diff --git a/lib/galaxy/tools/toolbox/watcher.py b/lib/galaxy/tools/toolbox/watcher.py index 862b30017ee..cbd9fa75a4f 100644 --- a/lib/galaxy/tools/toolbox/watcher.py +++ b/lib/galaxy/tools/toolbox/watcher.py @@ -48,8 +48,8 @@ def get_observer_class(config_value, default, monitor_what_str): return observer_class -def get_tool_conf_watcher(reload_callback): - return ToolConfWatcher(reload_callback) +def get_tool_conf_watcher(reload_callback, tool_cache=None): + return ToolConfWatcher(reload_callback=reload_callback, tool_cache=tool_cache) def get_tool_data_dir_watcher(tool_data_tables, config): @@ -73,8 +73,9 @@ def get_tool_watcher(toolbox, config): class ToolConfWatcher(object): - def __init__(self, reload_callback): + def __init__(self, reload_callback, tool_cache=None): self.paths = {} + self.cache = tool_cache self._active = False self._lock = threading.Lock() self.thread = threading.Thread(target=self.check, name="ToolConfWatcher.thread") @@ -92,6 +93,7 @@ class ToolConfWatcher(object): self.thread.join() def check(self): + """Check for changes in self.paths or self.cache and call the event handler.""" hashes = { key: None for key in self.paths.keys() } while self._active: do_reload = False @@ -113,7 +115,10 @@ class ToolConfWatcher(object): hashes[path] = new_hash log.debug("The file '%s' has changes.", path) do_reload = True - + if not do_reload and self.cache: + removed_ids = self.cache.cleanup() + if removed_ids: + do_reload = True if do_reload: with self._lock: t = threading.Thread(target=self.event_handler.on_any_event) diff --git a/static/maps/mvc/tool/tools.js.map b/static/maps/mvc/tool/tools.js.map index a93eb107e6e..bb236e7c2da 100644 --- a/static/maps/mvc/tool/tools.js.map +++ b/static/maps/mvc/tool/tools.js.map @@ -1 +1 @@ -{"version":3,"file":"tools.js","sources":["../../../src/mvc/tool/tools.js"],"names":["define","_","util","data","VisibilityMixin","hidden","show","this","set","hide","toggle","get","is_visible","attributes","ToolParameter","Backbone","Model","extend","defaults","name","label","type","value","html","num_samples","initialize","unescape","copy","toJSON","set_value","ToolParameterCollection","Collection","model","DataToolParameter","IntegerToolParameter","parseInt","get_samples","d3","scale","linear","domain","ticks","FloatToolParameter","parseFloat","SelectToolParameter","map","option","subModelTypes","integer","float","select","Tool","id","description","target","inputs","outputs","urlRoot","Galaxy","root","options","p","p_class","rval","prototype","call","i","remove_inputs","types","tool","incompatible_inputs","filter","input","indexOf","remove","only_samplable_inputs","valid_inputs","each","push","apply_search_results","results","set_input_value","find","set_input_values","inputs_dict","self","keys","input_name","run","_run","rerun","target_dataset","regions","action","target_dataset_id","get_inputs_dict","input_dict","additional_params","payload","tool_id","run_deferred","$","Deferred","ss_deferred","ServerStateDeferred","ajax_settings","url","JSON","stringify","dataType","contentType","interval","success_fn","response","when","go","then","result","resolve","DatasetCollection","ToolCollection","View","ToolSectionLabel","ToolSection","elems","open","clear_search_results","elt","cur_label","all_hidden","ToolSearch","search_hint_string","min_chars_for_search","clear_btn_url","visible","query","clear_key","on","do_search","length","q","timer","clearTimeout","setTimeout","ga","clear_search","ToolPanel","tool_search","tools","layout","parse","parse_elt","elt_dict","model_class","panel_elt","BaseView","update_visible","$el","ToolLinkView","tagName","render","$link","append","templates","tool_link","formStyle","e","preventDefault","upload","router","version","ToolSectionLabelView","className","text","ToolSectionView","update_open","panel_section","section_body","tool_view","label_view","events","click .toolSectionTitle > a","children","slideDown","slideUp","ToolSearchView","click","keyup :input","click #search-clear-btn","is","css","tooltip","focus_and_select","focus","clear","val","query_changed","evData","which","ToolPanelView","handle_search_results","search_view","section_title_view","attr","split","trigger","ToolFormView","tool_form","tool_panel_view","collection","tool_form_view","show_tool","fetch","done","width","template","join","variable"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tools.js","sources":["../../../src/mvc/tool/tools.js"],"names":["define","_","util","data","VisibilityMixin","hidden","show","this","set","hide","toggle","get","is_visible","attributes","ToolParameter","Backbone","Model","extend","defaults","name","label","type","value","html","num_samples","initialize","unescape","copy","toJSON","set_value","ToolParameterCollection","Collection","model","DataToolParameter","IntegerToolParameter","parseInt","get_samples","d3","scale","linear","domain","ticks","FloatToolParameter","parseFloat","SelectToolParameter","map","option","subModelTypes","integer","float","select","Tool","id","description","target","inputs","outputs","urlRoot","Galaxy","root","options","p","p_class","rval","prototype","call","i","remove_inputs","types","tool","incompatible_inputs","filter","input","indexOf","remove","only_samplable_inputs","valid_inputs","each","push","apply_search_results","results","set_input_value","find","set_input_values","inputs_dict","self","keys","input_name","run","_run","rerun","target_dataset","regions","action","target_dataset_id","get_inputs_dict","input_dict","additional_params","payload","tool_id","run_deferred","$","Deferred","ss_deferred","ServerStateDeferred","ajax_settings","url","JSON","stringify","dataType","contentType","interval","success_fn","response","when","go","then","result","resolve","DatasetCollection","ToolCollection","View","ToolSectionLabel","ToolSection","elems","open","clear_search_results","elt","cur_label","all_hidden","ToolSearch","search_hint_string","min_chars_for_search","clear_btn_url","visible","query","clear_key","on","do_search","length","q","timer","clearTimeout","setTimeout","ga","clear_search","ToolPanel","tool_search","tools","layout","parse","parse_elt","elt_dict","model_class","panel_elt","BaseView","update_visible","$el","ToolLinkView","tagName","render","$link","append","templates","tool_link","formStyle","e","preventDefault","upload","router","version","ToolSectionLabelView","className","text","ToolSectionView","update_open","panel_section","section_body","tool_view","label_view","events","click .toolSectionTitle > a","children","slideDown","slideUp","ToolSearchView","click","keyup :input","change :input","click #search-clear-btn","is","css","tooltip","focus_and_select","focus","clear","val","query_changed","evData","which","ToolPanelView","handle_search_results","search_view","section_title_view","attr","split","trigger","ToolFormView","tool_form","tool_panel_view","collection","tool_form_view","show_tool","fetch","done","width","template","join","variable"],"mappings":"AAICA,QACG,kBACA,qBACA,mBACA,sBAED,SAASC,EAAGC,EAAMC,GACjB,YAKJ,IAAIC,IACAC,QAAQ,EAERC,KAAM,WACFC,KAAKC,IAAI,UAAU,IAGvBC,KAAM,WACFF,KAAKC,IAAI,UAAU,IAGvBE,OAAQ,WACJH,KAAKC,IAAI,UAAWD,KAAKI,IAAI,YAGjCC,WAAY,WACR,OAAQL,KAAKM,WAAWR,SAQ5BS,EAAgBC,SAASC,MAAMC,QAC/BC,UACIC,KAAM,KACNC,MAAO,KACPC,KAAM,KACNC,MAAO,KACPC,KAAM,KACNC,YAAa,GAGjBC,WAAY,WACRlB,KAAKM,WAAWU,KAAOG,SAASnB,KAAKM,WAAWU,OAGpDI,KAAM,WACF,MAAO,IAAIb,GAAcP,KAAKqB,WAGlCC,UAAW,SAASP,GAChBf,KAAKC,IAAI,QAASc,GAAS,OAI/BQ,EAA0Bf,SAASgB,WAAWd,QAC9Ce,MAAOlB,IAMPmB,EAAoBnB,EAAcG,WAKlCiB,EAAuBpB,EAAcG,QACrCY,UAAW,SAASP,GAChBf,KAAKC,IAAI,QAAS2B,SAASb,EAAO,MAMtCc,YAAa,WACT,MAAOC,IAAGC,MAAMC,SACCC,QAAQjC,KAAKI,IAAI,OAAQJ,KAAKI,IAAI,SAClC8B,MAAMlC,KAAKI,IAAI,mBAIpC+B,EAAqBR,EAAqBjB,QAC1CY,UAAW,SAASP,GAChBf,KAAKC,IAAI,QAASmC,WAAWrB,OAOjCsB,EAAsB9B,EAAcG,QAIpCmB,YAAa,WACT,MAAOnC,GAAE4C,IAAItC,KAAKI,IAAI,WAAY,SAASmC,GACvC,MAAOA,GAAO,OAM1BhC,GAAciC,eACVC,QAAWd,EACXe,QAASP,EACTvC,KAAQ8B,EACRiB,OAAUN,EAMd,IAAIO,GAAOpC,SAASC,MAAMC,QAEtBC,UACIkC,GAAI,KACJjC,KAAM,KACNkC,YAAa,KACbC,OAAQ,KACRC,UACAC,YAGJC,QAASC,OAAOC,KAAO,YAEvBlC,WAAY,SAASmC,GAGjBrD,KAAKC,IAAI,SAAU,GAAIsB,GAAwB7B,EAAE4C,IAAIe,EAAQL,OAAQ,SAASM,GAC1E,GAAIC,GAAUhD,EAAciC,cAAcc,EAAExC,OAASP,CACrD,OAAO,IAAIgD,GAAQD,QAO3BjC,OAAQ,WACJ,GAAImC,GAAOhD,SAASC,MAAMgD,UAAUpC,OAAOqC,KAAK1D,KAIhD,OADAwD,GAAKR,OAAShD,KAAKI,IAAI,UAAUkC,IAAI,SAASqB,GAAK,MAAOA,GAAEtC,WACrDmC,GAOXI,cAAe,SAASC,GACpB,GAAIC,GAAO9D,KACP+D,EAAsBD,EAAK1D,IAAI,UAAU4D,OAAQ,SAASC,GACtD,MAAgD,KAAvCJ,EAAMK,QAASD,EAAM7D,IAAI,UAE1C0D,GAAK1D,IAAI,UAAU+D,OAAOJ,IAM9B3C,KAAM,SAASgD,GACX,GAAIhD,GAAO,GAAIwB,GAAK5C,KAAKqB,SAGzB,IAAI+C,EAAuB,CACvB,GAAIC,GAAe,GAAI7D,UAASgB,UAChCJ,GAAKhB,IAAI,UAAUkE,KAAK,SAASL,GACzBA,EAAMpC,eACNwC,EAAaE,KAAKN,KAG1B7C,EAAKnB,IAAI,SAAUoE,GAGvB,MAAOjD,IAGXoD,qBAAsB,SAASC,GAE3B,MAD6C,KAA3C/E,EAAEwE,QAAQO,EAASzE,KAAKM,WAAWuC,IAAa7C,KAAKD,OAASC,KAAKE,OAC9DF,KAAKK,cAMhBqE,gBAAiB,SAAS9D,EAAMG,GAC5Bf,KAAKI,IAAI,UAAUuE,KAAK,SAASV,GAC7B,MAAOA,GAAM7D,IAAI,UAAYQ,IAC9BX,IAAI,QAASc,IAMpB6D,iBAAkB,SAASC,GACvB,GAAIC,GAAO9E,IACXN,GAAE4E,KAAK5E,EAAEqF,KAAKF,GAAc,SAASG,GACjCF,EAAKJ,gBAAgBM,EAAYH,EAAYG,OAOrDC,IAAK,WACD,MAAOjF,MAAKkF,QAMhBC,MAAO,SAASC,EAAgBC,GAC5B,MAAOrF,MAAKkF,MACRI,OAAQ,QACRC,kBAAmBH,EAAevC,GAClCwC,QAASA,KAOjBG,gBAAiB,WACb,GAAIC,KAIJ,OAHAzF,MAAKI,IAAI,UAAUkE,KAAK,SAASL,GAC7BwB,EAAWxB,EAAM7D,IAAI,SAAW6D,EAAM7D,IAAI,WAEvCqF,GAOXP,KAAM,SAASQ,GAEX,GAAIC,GAAUjG,EAAEgB,QACRkF,QAAS5F,KAAK6C,GACdG,OAAQhD,KAAKwF,mBACdE,GAKHG,EAAeC,EAAEC,WACjBC,EAAc,GAAIrG,GAAKsG,qBACvBC,eACIC,IAAKnG,KAAKkD,QACVtD,KAAMwG,KAAKC,UAAUV,GACrBW,SAAU,OACVC,YAAa,mBACbzF,KAAM,QAEV0F,SAAU,IACVC,WAAY,SAASC,GACjB,MAAoB,YAAbA,IAQf,OAHAZ,GAAEa,KAAKX,EAAYY,MAAMC,KAAK,SAASC,GACnCjB,EAAakB,QAAQ,GAAInH,GAAKoH,kBAAkBF,MAE7CjB,IAGfnG,GAAEgB,OAAOkC,EAAKa,UAAW5D,EAKzB,IAOIoH,IAPWzG,SAAS0G,KAAKxG,WAORF,SAASgB,WAAWd,QACrCe,MAAOmB,KAMPuE,EAAmB3G,SAASC,MAAMC,OAAOb,GAKzCuH,EAAc5G,SAASC,MAAMC,QAC7BC,UACI0G,SACAC,MAAM,GAGVC,qBAAsB,WAClB7H,EAAE4E,KAAKtE,KAAKM,WAAW+G,MAAO,SAASG,GACnCA,EAAIzH,SAGRC,KAAKD,OACLC,KAAKC,IAAI,QAAQ,IAGrBuE,qBAAsB,SAASC,GAC3B,GACIgD,GADAC,GAAa,CAEjBhI,GAAE4E,KAAKtE,KAAKM,WAAW+G,MAAO,SAASG,GAC/BA,YAAeL,IACfM,EAAYD,EACZC,EAAUvH,QAELsH,YAAe5E,IAChB4E,EAAIhD,qBAAqBC,KACzBiD,GAAa,EACTD,GACAA,EAAU1H,UAMtB2H,EACA1H,KAAKE,QAGLF,KAAKD,OACLC,KAAKC,IAAI,QAAQ,MAI7BP,GAAEgB,OAAO0G,EAAY3D,UAAW5D,EAOhC,IAAI8H,GAAanH,SAASC,MAAMC,QAC5BC,UACIiH,mBAAoB,eACpBC,qBAAsB,EACtBC,cAAe,GACfC,SAAS,EACTC,MAAO,GACPvD,QAAS,KAETwD,UAAW,IAGf/E,QAASC,OAAOC,KAAO,YAEvBlC,WAAY,WACRlB,KAAKkI,GAAG,eAAgBlI,KAAKmI,YAMjCA,UAAW,WACP,GAAIH,GAAQhI,KAAKM,WAAW0H,KAG5B,IAAIA,EAAMI,OAASpI,KAAKM,WAAWuH,qBAE/B,WADA7H,MAAKC,IAAI,UAAW,KAKxB,IAAIoI,GAAIL,CAEJhI,MAAKsI,OACLC,aAAavI,KAAKsI,OAGtBxC,EAAE,qBAAqB5F,OACvB4F,EAAE,mBAAmB/F,MACrB,IAAI+E,GAAO9E,IACXA,MAAKsI,MAAQE,WAAW,WAED,mBAAPC,KACRA,GAAI,OAAQ,WAAYtF,OAAOC,KAAO,MAAQiF,GAElDvC,EAAE1F,IAAK0E,EAAK5B,SAAWmF,EAAGA,GAAK,SAAUzI,GACrCkF,EAAK7E,IAAI,UAAWL,GACpBkG,EAAE,mBAAmB5F,OACrB4F,EAAE,qBAAqB/F,QACxB,SACJ,MAGP2I,aAAc,WACV1I,KAAKC,IAAI,QAAS,IAClBD,KAAKC,IAAI,UAAW,QAI5BP,GAAEgB,OAAOiH,EAAWlE,UAAW5D,EAK/B,IAAI8I,GAAYnI,SAASC,MAAMC,QAE3BQ,WAAY,SAASmC,GACjBrD,KAAKM,WAAWsI,YAAcvF,EAAQuF,YACtC5I,KAAKM,WAAWsI,YAAYV,GAAG,iBAAkBlI,KAAKwE,qBAAsBxE,MAC5EA,KAAKM,WAAWuI,MAAQxF,EAAQwF,MAChC7I,KAAKM,WAAWwI,OAAS,GAAItI,UAASgB,WAAYxB,KAAK+I,MAAM1F,EAAQyF,UAMzEC,MAAO,SAASrC,GAEZ,GAAI5B,GAAO9E,KAEPgJ,EAAY,SAASC,GACjB,GAAInI,GAAOmI,EAASC,WAGpB,IAAKpI,EAAKoD,QAAQ,UAAYpD,EAAKsH,OAAS,EACxC,MAAOtD,GAAKxE,WAAWuI,MAAMzI,IAAI6I,EAASpG,GAEzC,IAAa,gBAAT/B,EAAwB,CAE7B,GAAIuG,GAAQ3H,EAAE4C,IAAI2G,EAAS5B,MAAO2B,EAElC,OADAC,GAAS5B,MAAQA,EACV,GAAID,GAAY6B,GAEtB,MAAa,qBAATnI,EACE,GAAIqG,GAAiB8B,GAD3B,OAKb,OAAOvJ,GAAE4C,IAAIoE,EAAUsC,IAG3BzB,qBAAsB,WAClBvH,KAAKI,IAAI,UAAUkE,KAAK,SAAS6E,GACzBA,YAAqB/B,GACrB+B,EAAU5B,uBAIV4B,EAAUpJ,UAKtByE,qBAAsB,WAClB,GAAIC,GAAUzE,KAAKI,IAAI,eAAeA,IAAI,UAC1C,IAAgB,OAAZqE,EAEA,WADAzE,MAAKuH,sBAIT,IAAIE,GAAY,IAChBzH,MAAKI,IAAI,UAAUkE,KAAK,SAAS6E,GACzBA,YAAqBhC,IACrBM,EAAY0B,EACZ1B,EAAUvH,QAELiJ,YAAqBvG,GACtBuG,EAAU3E,qBAAqBC,IAC3BgD,GACAA,EAAU1H,QAMlB0H,EAAY,KACZ0B,EAAU3E,qBAAqBC,SAiB3C2E,EAAW5I,SAAS0G,KAAKxG,QACzBQ,WAAY,WACRlB,KAAKyB,MAAMyG,GAAG,gBAAiBlI,KAAKqJ,eAAgBrJ,MACpDA,KAAKqJ,kBAETA,eAAgB,WACVrJ,KAAKyB,MAAMnB,WAAWR,OAASE,KAAKsJ,IAAIpJ,OAASF,KAAKsJ,IAAIvJ,UAOhEwJ,EAAeH,EAAS1I,QACxB8I,QAAS,MAETC,OAAQ,WAEJ,GAAIC,GAAQ5D,EAAE,SACd4D,GAAMC,OAAOC,EAAUC,UAAU7J,KAAKyB,MAAMJ,UAE5C,IAAIyI,GAAY9J,KAAKyB,MAAMrB,IAAK,aAAc,KAE9C,IAAsB,YAAlBJ,KAAKyB,MAAMoB,GACX6G,EAAM/E,KAAK,KAAKuD,GAAG,QAAS,SAAS6B,GACjCA,EAAEC,iBACF7G,OAAO8G,OAAOlK,aAGjB,IAAmB,YAAd+J,EAA0B,CAChC,GAAIhF,GAAO9E,IACX0J,GAAM/E,KAAK,KAAKuD,GAAG,QAAS,SAAS6B,GACjCA,EAAEC,iBACF7G,OAAO+G,OAAO3F,KAAM,KAAOqB,QAAUd,EAAKrD,MAAMoB,GAAIsH,QAAUrF,EAAKrD,MAAMrB,IAAI,eAMrF,MADAJ,MAAKsJ,IAAIK,OAAOD,GACT1J,QAOXoK,EAAuBhB,EAAS1I,QAChC8I,QAAS,MACTa,UAAW,iBAEXZ,OAAQ,WAEJ,MADAzJ,MAAKsJ,IAAIK,OAAQ7D,EAAE,WAAWwE,KAAKtK,KAAKyB,MAAMnB,WAAWgK,OAClDtK,QAOXuK,EAAkBnB,EAAS1I,QAC3B8I,QAAS,MACTa,UAAW,qBAEXnJ,WAAY,WACRkI,EAAS3F,UAAUvC,WAAWwC,KAAK1D,MACnCA,KAAKyB,MAAMyG,GAAG,cAAelI,KAAKwK,YAAaxK,OAGnDyJ,OAAQ,WAEJzJ,KAAKsJ,IAAIK,OAAQC,EAAUa,cAAczK,KAAKyB,MAAMJ,UAGpD,IAAIqJ,GAAe1K,KAAKsJ,IAAI3E,KAAK,mBAgBjC,OAfAjF,GAAE4E,KAAKtE,KAAKyB,MAAMnB,WAAW+G,MAAO,SAASG,GACzC,GAAIA,YAAe5E,GAAM,CACrB,GAAI+H,GAAY,GAAIpB,IAAc9H,MAAO+F,EAAK6C,UAAW,aACzDM,GAAUlB,SACViB,EAAaf,OAAOgB,EAAUrB,SAE7B,IAAI9B,YAAeL,GAAkB,CACtC,GAAIyD,GAAa,GAAIR,IAAsB3I,MAAO+F,GAClDoD,GAAWnB,SACXiB,EAAaf,OAAOiB,EAAWtB,QAMhCtJ,MAGX6K,QACIC,8BAA+B,UAMnC3K,OAAQ,WACJH,KAAKyB,MAAMxB,IAAI,QAASD,KAAKyB,MAAMnB,WAAWgH,OAMlDkD,YAAa,WACRxK,KAAKyB,MAAMnB,WAAWgH,KACnBtH,KAAKsJ,IAAIyB,SAAS,oBAAoBC,UAAU,QAChDhL,KAAKsJ,IAAIyB,SAAS,oBAAoBE,QAAQ,WAKtDC,EAAiB1K,SAAS0G,KAAKxG,QAC/B8I,QAAS,MACT3G,GAAI,cACJwH,UAAW,MAEXQ,QACIM,MAAS,mBACTC,eAAgB,gBAChBC,gBAAiB,gBACjBC,0BAA2B,SAG/B7B,OAAQ,WAYJ,MAXAzJ,MAAKsJ,IAAIK,OAAQC,EAAUhB,YAAY5I,KAAKyB,MAAMJ,WAC7CrB,KAAKyB,MAAMpB,cACZL,KAAKsJ,IAAIpJ,OAIT4F,EAAE,eAAeyF,GAAG,aACpBvL,KAAKsJ,IAAIkC,IAAI,MAAM,QAGvBxL,KAAKsJ,IAAI3E,KAAK,WAAW8G,UAClBzL,MAGX0L,iBAAkB,WACd1L,KAAKsJ,IAAI3E,KAAK,UAAUgH,QAAQhJ,UAGpCiJ,MAAO,WAIH,MAHA5L,MAAKyB,MAAMiH,eACX1I,KAAKsJ,IAAI3E,KAAK,UAAUkH,IAAI,IAC5B7L,KAAK0L,oBACE,GAGXI,cAAe,SAAUC,GAErB,MAAM/L,MAAKyB,MAAMnB,WAAqB,WAChCN,KAAKyB,MAAMnB,WAAW2H,YAAc8D,EAAOC,OAC7ChM,KAAK4L,SACE,OAEX5L,MAAKyB,MAAMxB,IAAI,QAASD,KAAKsJ,IAAI3E,KAAK,UAAUkH,UAQpDI,EAAgBzL,SAAS0G,KAAKxG,QAC9B8I,QAAS,MACTa,UAAW,WAKXnJ,WAAY,WACRlB,KAAKyB,MAAMrB,IAAI,eAAe8H,GAAG,iBAAkBlI,KAAKkM,sBAAuBlM,OAGnFyJ,OAAQ,WACJ,GAAI3E,GAAO9E,KAGPmM,EAAc,GAAIjB,IAAkBzJ,MAAOzB,KAAKyB,MAAMrB,IAAI,gBAiC9D,OAhCA+L,GAAY1C,SACZ3E,EAAKwE,IAAIK,OAAOwC,EAAY7C,KAG5BtJ,KAAKyB,MAAMrB,IAAI,UAAUkE,KAAK,SAAS6E,GACnC,GAAIA,YAAqB/B,GAAa,CAClC,GAAIgF,GAAqB,GAAI7B,IAAiB9I,MAAO0H,GACrDiD,GAAmB3C,SACnB3E,EAAKwE,IAAIK,OAAOyC,EAAmB9C,SAElC,IAAIH,YAAqBvG,GAAM,CAChC,GAAI+H,GAAY,GAAIpB,IAAc9H,MAAO0H,EAAWkB,UAAW,sBAC/DM,GAAUlB,SACV3E,EAAKwE,IAAIK,OAAOgB,EAAUrB,SAEzB,IAAIH,YAAqBhC,GAAkB,CAC5C,GAAIyD,GAAa,GAAIR,IAAsB3I,MAAO0H,GAClDyB,GAAWnB,SACX3E,EAAKwE,IAAIK,OAAOiB,EAAWtB,QAKnCxE,EAAKwE,IAAI3E,KAAK,eAAewG,MAAM,SAASpB,GAExC,GACInE,GAAUE,EAAE9F,MAAMqM,KAAK,SAASC,MAAM,OAAO,GAC7CxI,EAAOgB,EAAKrD,MAAMrB,IAAI,SAASA,IAAIwF,EAEvCd,GAAKyH,QAAQ,kBAAmBxC,EAAGjG,KAGhC9D,MAGXkM,sBAAuB,WACnB,GAAIzH,GAAUzE,KAAKyB,MAAMrB,IAAI,eAAeA,IAAI,UAC5CqE,IAA8B,IAAnBA,EAAQ2D,OACnBtC,EAAE,sBAAsB/F,OAGxB+F,EAAE,sBAAsB5F,UAQhCsM,EAAehM,SAAS0G,KAAKxG,QAC7B2J,UAAW,WAEXZ,OAAQ,WACJzJ,KAAKsJ,IAAIyB,WAAW5G,SACpBnE,KAAKsJ,IAAIK,OAAQC,EAAU6C,UAAUzM,KAAKyB,MAAMJ,cAkDpDuI,GA3C4BpJ,SAAS0G,KAAKxG,QAC1C2J,UAAW,kBAEXnJ,WAAY,WACRlB,KAAK0M,gBAAkB,GAAIT,IAAeU,WAAY3M,KAAK2M,aAC3D3M,KAAK4M,eAAiB,GAAIJ,IAG9B/C,OAAQ,WAEJzJ,KAAK0M,gBAAgBjD,SACrBzJ,KAAK0M,gBAAgBpD,IAAIkC,IAAI,QAAS,QACtCxL,KAAKsJ,IAAIK,OAAO3J,KAAK0M,gBAAgBpD,KAGrCtJ,KAAK4M,eAAetD,IAAIpJ,OACxBF,KAAKsJ,IAAIK,OAAO3J,KAAK4M,eAAetD,IAGpC,IAAIxE,GAAO9E,IACXA,MAAK0M,gBAAgBxE,GAAG,kBAAmB,SAAS6B,EAAGjG,GAEnDiG,EAAEC,iBAEFlF,EAAK+H,UAAU/I,MAOvB+I,UAAW,SAAS/I,GAChB,GAAIgB,GAAO9E,IACX8D,GAAKgJ,QAAQC,KAAM,WACfjI,EAAK8H,eAAenL,MAAQqC,EAC5BgB,EAAK8H,eAAenD,SACpB3E,EAAK8H,eAAetD,IAAIvJ,OACxB+F,EAAE,SAASkH,MAAM,eAQzBpE,YAAclJ,EAAEuN,UACZ,gFACQ,4EACR,4DAEA,kFACFC,KAAK,KAGPzC,cAAgB/K,EAAEuN,UACd,sDACI,4DACJ,SACA,sEACI,oCACJ,SACFC,KAAK,KAGPrD,UAAYnK,EAAEuN,UACV,wBACI,2CACA,wDACI,eACJ,UACA,YACJ,UACA,2GACI,cACJ,OACA,uBACFC,KAAK,KAIPT,UAAY/M,EAAEuN,UACV,kFACA,6BACI,gDACA,yBACI,6DACA,+BACI,oBACJ,SACA,mDACI,oBACJ,SACA,mCACJ,SACA,YACJ,SACA,sCACI,qFACJ,SACA,yBACI,kDACJ,UAGFC,KAAK,KAAOC,SAAU,UAK5B,QACI5M,cAAeA,EACfoB,qBAAsBA,EACtBU,oBAAqBA,EACrBO,KAAMA,EACNqE,eAAgBA,EAChBU,WAAYA,EACZgB,UAAWA,EACXsD,cAAeA,EACfO,aAAcA"} \ No newline at end of file diff --git a/static/scripts/bundled/analysis.bundled.js b/static/scripts/bundled/analysis.bundled.js index 8c6dde1a265..0a5fe2050c7 100644 --- a/static/scripts/bundled/analysis.bundled.js +++ b/static/scripts/bundled/analysis.bundled.js @@ -2,8 +2,8 @@ webpackJsonp([3,1],[function(e,t,i){(function(e,t){var n=i(1),s=n,o=i(56).Galaxy }});return{View:n}}.apply(t,n),!(void 0!==s&&(e.exports=s))}).call(t,i(3),i(1))},function(e,t,i){var n,s;(function(o,a,r){n=[i(4),i(13)],s=function(e,t){var i=o.View.extend({initialize:function(t){var i=this;this.model=t&&t.model||new o.Model({visible:!0,data:[],id:e.uid(),error_text:"No options available.",wait_text:"Please wait...",multiple:!1,optional:!1,onchange:function(){}}).set(t),this.listenTo(this.model,"change:value",this._changeValue,this),this.listenTo(this.model,"change:wait",this._changeWait,this),this.listenTo(this.model,"change:data",this._changeData,this),this.listenTo(this.model,"change:visible",this._changeVisible,this),this.on("change",function(){i.model.get("onchange")(i.value())}),this.render()},render:function(){var e=this;this.$el.empty().removeClass().addClass("ui-options").append(this.$message=a("
")).append(this.$menu=a("
").addClass("ui-options-menu")).append(this.$options=a(this._template())),this.all_button=null,this.model.get("multiple")&&(this.all_button=new t.ButtonCheck({onclick:function(){e.$("input").prop("checked",0!==e.all_button.value()),e.value(e._getValue()),e.trigger("change")}}),this.$menu.append(this.all_button.$el)),this._changeData(),this._changeWait(),this._changeVisible()},_changeData:function(){var e=this;this.$options.empty(),this._templateOptions?this.$options.append(this._templateOptions(this.model.get("data"))):r.each(this.model.get("data"),function(t){e.$options.append(a(e._templateOption(t)).addClass("ui-option").tooltip({title:t.tooltip,placement:"bottom"}))});var e=this;this.$("input").on("change",function(){e.value(e._getValue()),e.trigger("change")}),this._changeValue(),this._changeWait()},_changeVisible:function(){this.$el[this.model.get("visible")?"show":"hide"]()},_changeWait:function(){this.model.get("wait")?0===this.length()&&(this._messageShow(this.model.get("wait_text"),"info"),this.$options.hide(),this.$menu.hide()):0===this.length()?(this._messageShow(this.model.get("error_text"),"danger"),this.$options.hide(),this.$menu.hide()):(this.$message.hide(),this.$options.css("display","inline-block"),this.$menu.show())},_changeValue:function(){this._setValue(this.model.get("value")),null!==this._getValue()||this.model.get("multiple")||this.model.get("optional")||this._setValue(this.first()),this.all_button&&this.all_button.value(a.isArray(this._getValue())?this._getValue().length:0,this.length())},value:function(e){return void 0!==e&&this.model.set("value",e),this._getValue()},first:function(){var e=this.$("input").first();return e.length>0?e.val():null},wait:function(){this.model.set("wait",!0)},unwait:function(){this.model.set("wait",!1)},length:function(){return this.$(".ui-option").length},_setValue:function(e){var t=this;if(void 0!==e&&(this.$("input").prop("checked",!1),null!==e)){var i=a.isArray(e)?e:[e];r.each(i,function(e){t.$('input[value="'+e+'"]').first().prop("checked",!0)})}},_getValue:function(){var t=[];return this.$(":checked").each(function(){t.push(a(this).val())}),e.isEmpty(t)?null:this.model.get("multiple")?t:t[0]},_messageShow:function(e,t){this.$message.show().removeClass().addClass("ui-message alert alert-"+t).html(e)},_template:function(){return a("
").addClass("ui-options-list")}}),n=i.extend({_templateOption:function(t){var i=e.uid();return a("
").addClass("ui-option").append(a("").attr({id:i,type:this.model.get("type"),name:this.model.id,value:t.value})).append(a("