commit/galaxy-central: 3 new changesets
3 new commits in galaxy-central: https://bitbucket.org/galaxy/galaxy-central/commits/a2cfc332d7b8/ changeset: a2cfc332d7b8 user: Kyle Ellrott date: 2013-01-30 00:58:58 summary: Enabling dataset UUID setting through library upload, upload1 tool, and galaxy.json file affected #: 5 files diff -r c7bde6953174eabe5510c89d023ffd8232592f11 -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 lib/galaxy/jobs/__init__.py --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -907,7 +907,6 @@ job_context = ExpressionContext( dict( stdout = job.stdout, stderr = job.stderr ) ) job_tool = self.app.toolbox.tools_by_id.get( job.tool_id, None ) - for dataset_assoc in job.output_datasets + job.output_library_datasets: context = self.get_dataset_finish_context( job_context, dataset_assoc.dataset.dataset ) #should this also be checking library associations? - can a library item be added from a history before the job has ended? - lets not allow this to occur @@ -917,6 +916,8 @@ dataset.info = ( dataset.info or '' ) + context['stdout'] + context['stderr'] dataset.tool_version = self.version_string dataset.set_size() + if 'uuid' in context: + dataset.dataset.uuid = context['uuid'] # 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) diff -r c7bde6953174eabe5510c89d023ffd8232592f11 -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 lib/galaxy/tools/actions/upload_common.py --- a/lib/galaxy/tools/actions/upload_common.py +++ b/lib/galaxy/tools/actions/upload_common.py @@ -294,6 +294,10 @@ link_data_only = uploaded_dataset.link_data_only except: link_data_only = 'copy_files' + try: + uuid_str = uploaded_dataset.uuid + except: + uuid_str = None json = dict( file_type = uploaded_dataset.file_type, ext = uploaded_dataset.ext, name = uploaded_dataset.name, @@ -302,6 +306,7 @@ type = uploaded_dataset.type, is_binary = is_binary, link_data_only = link_data_only, + uuid = uuid_str, space_to_tab = uploaded_dataset.space_to_tab, in_place = trans.app.config.external_chown_script is None, path = uploaded_dataset.path ) diff -r c7bde6953174eabe5510c89d023ffd8232592f11 -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 lib/galaxy/webapps/galaxy/controllers/library_common.py --- a/lib/galaxy/webapps/galaxy/controllers/library_common.py +++ b/lib/galaxy/webapps/galaxy/controllers/library_common.py @@ -1070,11 +1070,13 @@ job, output = upload_common.create_job( trans, tool_params, tool, json_file_path, data_list, folder=library_bunch.folder ) # HACK: Prevent outputs_to_working_directory from overwriting inputs when "linking" job.add_parameter( 'link_data_only', to_json_string( kwd.get( 'link_data_only', 'copy_files' ) ) ) + job.add_parameter( 'uuid', to_json_string( kwd.get( 'uuid', None ) ) ) trans.sa_session.add( job ) trans.sa_session.flush() return output def make_library_uploaded_dataset( self, trans, cntrller, params, name, path, type, library_bunch, in_folder=None ): link_data_only = params.get( 'link_data_only', 'copy_files' ) + uuid_str = params.get( 'uuid', None ) library_bunch.replace_dataset = None # not valid for these types of upload uploaded_dataset = util.bunch.Bunch() new_name = name @@ -1096,6 +1098,7 @@ uploaded_dataset.in_folder = in_folder uploaded_dataset.data = upload_common.new_upload( trans, cntrller, uploaded_dataset, library_bunch ) uploaded_dataset.link_data_only = link_data_only + uploaded_dataset.uuid = uuid_str if link_data_only == 'link_to_files': uploaded_dataset.data.file_name = os.path.abspath( path ) # Since we are not copying the file into Galaxy's managed diff -r c7bde6953174eabe5510c89d023ffd8232592f11 -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 scripts/api/load_data_with_metadata.py --- a/scripts/api/load_data_with_metadata.py +++ b/scripts/api/load_data_with_metadata.py @@ -15,10 +15,34 @@ import sys import json import time +import argparse + sys.path.insert( 0, os.path.dirname( __file__ ) ) from common import submit, display -def main(api_key, api_url, in_folder, data_library): +def load_file(fullpath, api_key, api_url, library_id, library_folder_id, uuid_field=None): + data = {} + data['folder_id'] = library_folder_id + data['file_type'] = 'auto' + data['dbkey'] = '' + data['upload_option'] = 'upload_paths' + data['filesystem_paths'] = fullpath + data['create_type'] = 'file' + data['link_data_only'] = 'link_to_files' + + handle = open( fullpath + ".json" ) + smeta = handle.read() + handle.close() + ext_meta = json.loads(smeta) + data['extended_metadata'] = ext_meta + if uuid_field is not None and uuid_field in ext_meta: + data['uuid'] = ext_meta[uuid_field] + + libset = submit(api_key, api_url + "libraries/%s/contents" % library_id, data, return_formatted = True) + print libset + + +def main(api_key, api_url, in_folder, data_library, uuid_field=None): # Find/Create data library with the above name. Assume we're putting datasets in the root folder '/' libs = display(api_key, api_url + 'libraries', return_formatted=False) library_id = None @@ -28,7 +52,7 @@ if not library_id: lib_create_data = {'name':data_library} library = submit(api_key, api_url + 'libraries', lib_create_data, return_formatted=False) - library_id = library[0]['id'] + library_id = library['id'] folders = display(api_key, api_url + "libraries/%s/contents" % library_id, return_formatted = False) for f in folders: if f['name'] == "/": @@ -37,35 +61,24 @@ print "Failure to configure library destination." sys.exit(1) - for fname in os.listdir(in_folder): - fullpath = os.path.join(in_folder, fname) - if os.path.isfile(fullpath) and os.path.exists(fullpath + ".json"): + if os.path.isfile(in_folder): + if os.path.exists(in_folder + ".json"): + fullpath = os.path.abspath(in_folder) print "Loading", fullpath - data = {} - data['folder_id'] = library_folder_id - data['file_type'] = 'auto' - data['dbkey'] = '' - data['upload_option'] = 'upload_paths' - data['filesystem_paths'] = fullpath - data['create_type'] = 'file' - - data['link_data_only'] = 'link_to_files' - - handle = open( fullpath + ".json" ) - smeta = handle.read() - handle.close() - data['extended_metadata'] = json.loads(smeta) - libset = submit(api_key, api_url + "libraries/%s/contents" % library_id, data, return_formatted = True) - print libset + load_file(fullpath, api_key, api_url, library_id, library_folder_id, uuid_field) + else: + for fname in os.listdir(in_folder): + fullpath = os.path.join(in_folder, fname) + if os.path.isfile(fullpath) and os.path.exists(fullpath + ".json"): + print "Loading", fullpath + load_file(fullpath, api_key, api_url, library_id, library_folder_id, uuid_field) if __name__ == '__main__': - try: - api_key = sys.argv[1] - api_url = sys.argv[2] - in_folder = sys.argv[3] - data_library = sys.argv[4] - except IndexError: - print 'usage: %s key url in_folder data_library' % os.path.basename( sys.argv[0] ) - sys.exit( 1 ) - main(api_key, api_url, in_folder, data_library ) - + parser = argparse.ArgumentParser() + parser.add_argument("api_key", help="API KEY") + parser.add_argument('api_url', help='API URL') + parser.add_argument("in_folder", help="Input Folder") + parser.add_argument("data_library", help="Data Library") + parser.add_argument("--uuid_field", help="UUID Field", default=None) + args = parser.parse_args() + main(args.api_key, args.api_url, args.in_folder, args.data_library, args.uuid_field) diff -r c7bde6953174eabe5510c89d023ffd8232592f11 -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 tools/data_source/upload.py --- a/tools/data_source/upload.py +++ b/tools/data_source/upload.py @@ -307,6 +307,8 @@ stdout = stdout, name = dataset.name, line_count = line_count ) + if dataset.get('uuid', None) is not None: + info['uuid'] = dataset.get('uuid') json_file.write( to_json_string( info ) + "\n" ) if link_data_only == 'copy_files' and datatype.dataset_content_needs_grooming( output_path ): https://bitbucket.org/galaxy/galaxy-central/commits/ddcce8b55152/ changeset: ddcce8b55152 user: dannon date: 2013-03-08 17:35:06 summary: Merge changes from PR https://bitbucket.org/galaxy/galaxy-central/pull-request/115/adding-dataset-... affected #: 6 files diff -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 -r ddcce8b55152c47177d85ab1a2433f80f162b64f lib/galaxy/model/__init__.py --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -1774,6 +1774,10 @@ misc_info = ldda.info, misc_blurb = ldda.blurb, template_data = template_data ) + if ldda.dataset.uuid is None: + rval['uuid'] = None + else: + rval['uuid'] = str(ldda.dataset.uuid) for name, spec in ldda.metadata.spec.items(): val = ldda.metadata.get( name ) if isinstance( val, MetadataFile ): diff -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 -r ddcce8b55152c47177d85ab1a2433f80f162b64f lib/galaxy/tools/__init__.py --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -1922,6 +1922,8 @@ if "runtool_btn" not in incoming and "URL" not in incoming: if not self.display_interface: return 'message.mako', dict( status='info', message="The interface for this tool cannot be displayed", refresh_frames=['everything'] ) + if len(incoming): + self.update_state( trans, self.inputs_by_page[state.page], state.inputs, incoming, old_errors=old_errors or {} ) return "tool_form.mako", dict( errors={}, tool_state=state, param_values={}, incoming={} ) # Process incoming data if not( self.check_values ): diff -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 -r ddcce8b55152c47177d85ab1a2433f80f162b64f lib/galaxy/webapps/galaxy/api/history_contents.py --- a/lib/galaxy/webapps/galaxy/api/history_contents.py +++ b/lib/galaxy/webapps/galaxy/api/history_contents.py @@ -220,6 +220,11 @@ hda_dict[ 'display_apps' ] = get_display_apps( trans, hda ) hda_dict[ 'display_types' ] = get_old_display_applications( trans, hda ) + if hda.dataset.uuid is None: + hda_dict['uuid'] = None + else: + hda_dict['uuid'] = str(hda.dataset.uuid) + hda_dict[ 'visualizations' ] = hda.get_visualizations() if hda.peek and hda.peek != 'no peek': hda_dict[ 'peek' ] = to_unicode( hda.display_peek() ) diff -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 -r ddcce8b55152c47177d85ab1a2433f80f162b64f lib/galaxy/webapps/galaxy/controllers/root.py --- a/lib/galaxy/webapps/galaxy/controllers/root.py +++ b/lib/galaxy/webapps/galaxy/controllers/root.py @@ -22,7 +22,8 @@ return trans.fill_template( "root/index.mako", tool_id=tool_id, workflow_id=workflow_id, - m_c=m_c, m_a=m_a ) + m_c=m_c, m_a=m_a, + params=kwd ) ## ---- Tool related ----------------------------------------------------- diff -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 -r ddcce8b55152c47177d85ab1a2433f80f162b64f templates/webapps/galaxy/library/common/ldda_info.mako --- a/templates/webapps/galaxy/library/common/ldda_info.mako +++ b/templates/webapps/galaxy/library/common/ldda_info.mako @@ -100,6 +100,13 @@ ${ldda.get_size( nice_size=True )} <div style="clear: both"></div></div> + %if ldda.dataset.uuid: + <div class="form-row"> + <label>UUID:</label> + ${ldda.dataset.uuid} + <div style="clear: both"></div> + </div> + %endif %if ldda.tool_version: <div class="form-row"><label>Tool version:</label> diff -r a2cfc332d7b8e0f3b765b5d5b3c5b012521c39c0 -r ddcce8b55152c47177d85ab1a2433f80f162b64f templates/webapps/galaxy/root/index.mako --- a/templates/webapps/galaxy/root/index.mako +++ b/templates/webapps/galaxy/root/index.mako @@ -118,7 +118,7 @@ if trans.app.config.require_login and not trans.user: center_url = h.url_for( controller='user', action='login' ) elif tool_id is not None: - center_url = h.url_for( 'tool_runner', tool_id=tool_id, from_noframe=True ) + center_url = h.url_for( 'tool_runner', tool_id=tool_id, from_noframe=True, **params ) elif workflow_id is not None: center_url = h.url_for( controller='workflow', action='run', id=workflow_id ) elif m_c is not None: https://bitbucket.org/galaxy/galaxy-central/commits/a37fbe9cbd93/ changeset: a37fbe9cbd93 user: dannon date: 2013-03-08 20:15:11 summary: Merge affected #: 6 files diff -r ddcce8b55152c47177d85ab1a2433f80f162b64f -r a37fbe9cbd93a4e73a765d50be3aca4f31968f0b lib/galaxy/webapps/galaxy/controllers/tool_runner.py --- a/lib/galaxy/webapps/galaxy/controllers/tool_runner.py +++ b/lib/galaxy/webapps/galaxy/controllers/tool_runner.py @@ -2,15 +2,20 @@ Upload class """ -from galaxy.web.base.controller import * +import logging +import galaxy.util + +from galaxy import web +from galaxy.tools import DefaultToolState +from galaxy.tools.actions import upload_common +from galaxy.tools.parameters import params_to_incoming, visit_input_values +from galaxy.tools.parameters.basic import DataToolParameter, UnvalidatedValue from galaxy.util.bunch import Bunch from galaxy.util.hash_util import is_hashable -from galaxy.tools import DefaultToolState -from galaxy.tools.parameters.basic import UnvalidatedValue -from galaxy.tools.parameters import params_to_incoming -from galaxy.tools.actions import upload_common +from galaxy.web import error, url_for +from galaxy.web.base.controller import BaseUIController +from galaxy.web.form_builder import SelectField -import logging log = logging.getLogger( __name__ ) class AddFrameData: @@ -47,7 +52,7 @@ tools = [] tool = None # Backwards compatibility for datasource tools that have default tool_id configured, but which are now using only GALAXY_URL. - tool_ids = util.listify( tool_id ) + tool_ids = galaxy.util.listify( tool_id ) for tool_id in tool_ids: if get_loaded_tools_by_lineage: tools = toolbox.get_loaded_tools_by_lineage( tool_id ) @@ -83,7 +88,7 @@ message=message, status=status, redirect=redirect ) ) - params = util.Params( kwd, sanitize = False ) #Sanitize parameters when substituting into command line via input wrappers + params = galaxy.util.Params( kwd, sanitize = False ) #Sanitize parameters when substituting into command line via input wrappers #do param translation here, used by datasource tools if tool.input_translator: tool.input_translator.translate( params ) @@ -103,7 +108,7 @@ toolbox=self.get_toolbox(), tool_version_select_field=tool_version_select_field, tool=tool, - util=util, + util=galaxy.util, add_frame=add_frame, **vars ) @@ -215,7 +220,7 @@ #create an incoming object from the original job's dataset-modified param objects incoming = {} params_to_incoming( incoming, tool.inputs, params_objects, trans.app ) - incoming[ "tool_state" ] = util.object_to_string( state.encode( tool, trans.app ) ) + incoming[ "tool_state" ] = galaxy.util.object_to_string( state.encode( tool, trans.app ) ) template, vars = tool.handle_input( trans, incoming, old_errors=upgrade_messages ) #update new state with old parameters # Is the "add frame" stuff neccesary here? add_frame = AddFrameData() @@ -228,7 +233,7 @@ toolbox=self.get_toolbox(), tool_version_select_field=tool_version_select_field, tool=tool, - util=util, + util=galaxy.util, add_frame=add_frame, tool_id_version_message=tool_id_version_message, **vars ) @@ -288,9 +293,9 @@ tool = self.get_toolbox().get_tool( tool_id ) if not tool: return False # bad tool_id - nonfile_params = util.Params( kwd, sanitize=False ) + nonfile_params = galaxy.util.Params( kwd, sanitize=False ) if kwd.get( 'tool_state', None ) not in ( None, 'None' ): - encoded_state = util.string_to_object( kwd["tool_state"] ) + encoded_state = galaxy.util.string_to_object( kwd["tool_state"] ) tool_state = DefaultToolState() tool_state.decode( encoded_state, tool, trans.app ) else: diff -r ddcce8b55152c47177d85ab1a2433f80f162b64f -r a37fbe9cbd93a4e73a765d50be3aca4f31968f0b test-data/sort_in1.bed --- a/test-data/sort_in1.bed +++ b/test-data/sort_in1.bed @@ -1,3 +1,6 @@ +# comment 1 \n\n''" again +# comment 2 **}"''' special +# comment 3 @n/n""" characters chr6 108298214 108386086 NM_007214 0 - 108299600 108385906 0 21 1530,105,99,102,159,174,60,83,148,155,93,133,95,109,51,59,62,113,115,100,304, 0,2490,6246,10831,12670,23164,23520,27331,31052,32526,34311,36130,36365,38609,41028,42398,43048,51479,54500,59097,87568, chr6 108593954 108616704 NM_003269 0 + 108594662 108615360 0 9 733,146,88,236,147,97,150,106,1507, 0,5400,8778,10445,12037,14265,14749,15488,21243, chr6 108639410 108689143 NM_152827 0 - 108640045 108688818 0 3 741,125,487, 0,2984,49246, diff -r ddcce8b55152c47177d85ab1a2433f80f162b64f -r a37fbe9cbd93a4e73a765d50be3aca4f31968f0b test-data/sort_out1.bed --- a/test-data/sort_out1.bed +++ b/test-data/sort_out1.bed @@ -1,29 +1,32 @@ +# comment 1 \n\n''" again +# comment 2 **}"''' special +# comment 3 @n/n""" characters +chr1 148185113 148187485 NM_002796 0 + 148185136 148187378 0 7 163,207,147,82,117,89,120, 0,416,877,1199,1674,1977,2252, +chr1 148077485 148111797 NM_002651 0 - 148078400 148111728 0 12 1097,121,133,266,124,105,110,228,228,45,937,77, 0,2081,2472,6871,9907,10257,11604,14199,15637,18274,23636,34235, +chr1 147984101 148035079 BC007833 0 + 147984545 148033414 0 14 529,32,81,131,118,153,300,206,84,49,85,130,46,1668, 0,25695,28767,33118,33695,33998,35644,38005,39629,40577,41402,43885,48367,49310, +chr1 147962006 147975713 NM_005997 0 - 147962192 147975670 0 6 574,145,177,115,153,160, 0,1543,7859,9048,9340,13547, +chr2 220229182 220233943 NM_024536 0 - 220229609 220233765 0 4 1687,180,574,492, 0,1990,2660,4269, +chr2 220108603 220116964 NM_001927 0 + 220108689 220116217 0 9 664,61,96,162,126,221,44,83,789, 0,1718,1874,2118,2451,2963,5400,7286,7572, +chr2 118389378 118390700 BC005078 0 - 118390395 118390500 0 1 1322, 0, +chr2 118288484 118306183 NM_006773 0 + 118288583 118304530 0 14 184,285,144,136,101,200,115,140,162,153,114,57,178,1796, 0,2765,4970,6482,6971,7183,7468,9890,10261,10768,11590,14270,14610,15903, +chr5 131621285 131637046 NM_003687 0 + 131621326 131635821 0 7 134,152,82,179,164,118,1430, 0,4915,8770,13221,13609,14097,14331, +chr5 131556201 131590458 NM_004199 0 - 131556601 131582218 0 15 471,97,69,66,54,100,71,177,194,240,138,152,97,100,170, 0,2316,2802,5596,6269,11138,11472,15098,16528,17674,21306,24587,25142,25935,34087, +chr5 131424245 131426795 NM_000588 0 + 131424298 131426383 0 5 215,42,90,42,535, 0,313,1658,1872,2015, +chr5 131170738 131357870 AF099740 0 - 131311206 131357817 0 31 112,124,120,81,65,40,120,129,61,88,94,79,72,102,144,117,89,73,96,135,135,78,74,52,33,179,100,102,65,115,248, 0,11593,44117,47607,104668,109739,114675,126366,135488,137518,138009,140437,152389,153373,155388,159269,160793,162981,164403,165577,166119,167611,169501,178260,179675,180901,181658,182260,182953,183706,186884, +chr6 108722790 108950942 NM_145315 0 + 108722976 108950321 0 13 325,224,52,102,131,100,59,83,71,101,141,114,750, 0,28931,52094,60760,61796,71339,107102,152319,181970,182297,215317,224802,227402, +chr6 108639410 108689143 NM_152827 0 - 108640045 108688818 0 3 741,125,487, 0,2984,49246, +chr6 108593954 108616704 NM_003269 0 + 108594662 108615360 0 9 733,146,88,236,147,97,150,106,1507, 0,5400,8778,10445,12037,14265,14749,15488,21243, chr6 108298214 108386086 NM_007214 0 - 108299600 108385906 0 21 1530,105,99,102,159,174,60,83,148,155,93,133,95,109,51,59,62,113,115,100,304, 0,2490,6246,10831,12670,23164,23520,27331,31052,32526,34311,36130,36365,38609,41028,42398,43048,51479,54500,59097,87568, -chr6 108593954 108616704 NM_003269 0 + 108594662 108615360 0 9 733,146,88,236,147,97,150,106,1507, 0,5400,8778,10445,12037,14265,14749,15488,21243, -chr6 108639410 108689143 NM_152827 0 - 108640045 108688818 0 3 741,125,487, 0,2984,49246, -chr6 108722790 108950942 NM_145315 0 + 108722976 108950321 0 13 325,224,52,102,131,100,59,83,71,101,141,114,750, 0,28931,52094,60760,61796,71339,107102,152319,181970,182297,215317,224802,227402, +chr7 116944658 117107512 AF377960 0 - 116945541 116979926 0 23 1129,102,133,64,186,206,179,188,153,100,87,80,96,276,118,255,151,100,204,1654,225,108,173, 0,7364,8850,10413,13893,14398,17435,24259,24615,35177,35359,45901,47221,49781,56405,66857,69787,72208,73597,80474,100111,150555,162681, +chr7 116713967 116902666 NM_000492 0 + 116714099 116901113 0 27 185,111,109,216,90,164,126,247,93,183,192,95,87,724,129,38,251,80,151,228,101,249,156,90,173,106,1754, 0,24290,29071,50936,54313,55285,56585,60137,62053,68678,79501,107776,110390,111971,114967,122863,123569,126711,130556,131618,134650,147559,162475,172879,184725,185496,186945, +chr7 116511232 116557294 NM_003391 0 - 116512159 116556994 0 5 1157,265,278,227,383, 0,20384,37843,43339,45679, chr7 113320332 113924911 AK131266 0 + 113862563 113893433 0 20 285,91,178,90,58,75,138,51,201,178,214,105,88,84,77,102,122,70,164,1124, 0,201692,340175,448290,451999,484480,542213,543265,543478,545201,556083,558358,565876,567599,573029,573245,575738,577123,577946,603455, -chr7 116511232 116557294 NM_003391 0 - 116512159 116556994 0 5 1157,265,278,227,383, 0,20384,37843,43339,45679, -chr7 116713967 116902666 NM_000492 0 + 116714099 116901113 0 27 185,111,109,216,90,164,126,247,93,183,192,95,87,724,129,38,251,80,151,228,101,249,156,90,173,106,1754, 0,24290,29071,50936,54313,55285,56585,60137,62053,68678,79501,107776,110390,111971,114967,122863,123569,126711,130556,131618,134650,147559,162475,172879,184725,185496,186945, -chr7 116944658 117107512 AF377960 0 - 116945541 116979926 0 23 1129,102,133,64,186,206,179,188,153,100,87,80,96,276,118,255,151,100,204,1654,225,108,173, 0,7364,8850,10413,13893,14398,17435,24259,24615,35177,35359,45901,47221,49781,56405,66857,69787,72208,73597,80474,100111,150555,162681, -chr2 118288484 118306183 NM_006773 0 + 118288583 118304530 0 14 184,285,144,136,101,200,115,140,162,153,114,57,178,1796, 0,2765,4970,6482,6971,7183,7468,9890,10261,10768,11590,14270,14610,15903, -chr2 118389378 118390700 BC005078 0 - 118390395 118390500 0 1 1322, 0, chr8 118880786 119193239 NM_000127 0 - 118881131 119192466 0 11 531,172,161,90,96,119,133,120,108,94,1735, 0,5355,7850,13505,19068,20309,23098,30863,36077,37741,310718, +chr9 128849867 128870133 NM_020145 0 - 128850516 128869987 0 11 757,241,101,90,24,63,93,134,129,142,209, 0,1071,1736,2085,2635,4201,6376,6736,13056,14247,20057, +chr9 128789530 128848928 NM_015354 0 + 128789552 128848511 0 44 54,55,74,85,81,45,93,120,212,115,201,90,66,120,127,153,127,88,77,115,121,67,129,140,107,207,170,70,68,196,78,86,146,182,201,93,159,138,75,228,132,74,130,594, 0,1491,5075,8652,9254,10312,11104,11317,20808,21702,23060,25462,31564,32908,33566,34851,35204,35595,35776,37202,38860,39111,39891,40349,42422,45499,45827,46675,47158,47621,50453,50840,51474,51926,53831,54186,55119,55619,57449,57605,57947,58352,58541,58804, +chr9 128787362 128789566 NM_014908 0 - 128787519 128789136 0 1 2204, 0, +chr9 128763240 128783870 NM_174933 0 + 128764156 128783586 0 12 261,118,74,159,76,48,56,63,129,117,127,370, 0,522,875,5630,12374,12603,15040,15175,18961,19191,20037,20260, +chrX 152693677 152712545 NM_001666 0 - 152694029 152712503 0 22 586,100,93,184,74,234,106,135,78,61,103,28,85,192,102,222,129,183,63,163,205,109, 0,1693,2066,2364,2635,2794,3129,3323,3545,3752,5323,5647,5841,6032,6401,11455,11778,13249,13719,13987,14227,18759, +chrX 152691216 152693487 NM_000054 0 + 152691446 152693029 0 3 255,885,664, 0,616,1607, +chrX 152648233 152662158 NM_000425 0 - 152648964 152662138 0 28 963,12,73,135,156,120,174,123,202,116,223,71,198,111,125,157,167,112,144,132,185,112,171,123,203,106,11,100, 0,1436,1545,1951,2390,2653,2889,3156,3367,3772,4717,5122,5424,5868,6066,6370,6629,6909,7588,7871,8124,8456,8858,9125,10220,10660,11296,13825, chrX 122719582 122773357 NM_001167 0 + 122745047 122766566 0 7 96,909,100,79,43,201,6985, 0,25433,28421,31040,32533,40295,46790, -chr9 128763240 128783870 NM_174933 0 + 128764156 128783586 0 12 261,118,74,159,76,48,56,63,129,117,127,370, 0,522,875,5630,12374,12603,15040,15175,18961,19191,20037,20260, -chr9 128787362 128789566 NM_014908 0 - 128787519 128789136 0 1 2204, 0, -chr9 128789530 128848928 NM_015354 0 + 128789552 128848511 0 44 54,55,74,85,81,45,93,120,212,115,201,90,66,120,127,153,127,88,77,115,121,67,129,140,107,207,170,70,68,196,78,86,146,182,201,93,159,138,75,228,132,74,130,594, 0,1491,5075,8652,9254,10312,11104,11317,20808,21702,23060,25462,31564,32908,33566,34851,35204,35595,35776,37202,38860,39111,39891,40349,42422,45499,45827,46675,47158,47621,50453,50840,51474,51926,53831,54186,55119,55619,57449,57605,57947,58352,58541,58804, -chr9 128849867 128870133 NM_020145 0 - 128850516 128869987 0 11 757,241,101,90,24,63,93,134,129,142,209, 0,1071,1736,2085,2635,4201,6376,6736,13056,14247,20057, -chr5 131170738 131357870 AF099740 0 - 131311206 131357817 0 31 112,124,120,81,65,40,120,129,61,88,94,79,72,102,144,117,89,73,96,135,135,78,74,52,33,179,100,102,65,115,248, 0,11593,44117,47607,104668,109739,114675,126366,135488,137518,138009,140437,152389,153373,155388,159269,160793,162981,164403,165577,166119,167611,169501,178260,179675,180901,181658,182260,182953,183706,186884, -chr5 131424245 131426795 NM_000588 0 + 131424298 131426383 0 5 215,42,90,42,535, 0,313,1658,1872,2015, -chr5 131556201 131590458 NM_004199 0 - 131556601 131582218 0 15 471,97,69,66,54,100,71,177,194,240,138,152,97,100,170, 0,2316,2802,5596,6269,11138,11472,15098,16528,17674,21306,24587,25142,25935,34087, -chr5 131621285 131637046 NM_003687 0 + 131621326 131635821 0 7 134,152,82,179,164,118,1430, 0,4915,8770,13221,13609,14097,14331, -chr1 147962006 147975713 NM_005997 0 - 147962192 147975670 0 6 574,145,177,115,153,160, 0,1543,7859,9048,9340,13547, -chr1 147984101 148035079 BC007833 0 + 147984545 148033414 0 14 529,32,81,131,118,153,300,206,84,49,85,130,46,1668, 0,25695,28767,33118,33695,33998,35644,38005,39629,40577,41402,43885,48367,49310, -chr1 148077485 148111797 NM_002651 0 - 148078400 148111728 0 12 1097,121,133,266,124,105,110,228,228,45,937,77, 0,2081,2472,6871,9907,10257,11604,14199,15637,18274,23636,34235, -chr1 148185113 148187485 NM_002796 0 + 148185136 148187378 0 7 163,207,147,82,117,89,120, 0,416,877,1199,1674,1977,2252, -chrX 152648233 152662158 NM_000425 0 - 152648964 152662138 0 28 963,12,73,135,156,120,174,123,202,116,223,71,198,111,125,157,167,112,144,132,185,112,171,123,203,106,11,100, 0,1436,1545,1951,2390,2653,2889,3156,3367,3772,4717,5122,5424,5868,6066,6370,6629,6909,7588,7871,8124,8456,8858,9125,10220,10660,11296,13825, -chrX 152691216 152693487 NM_000054 0 + 152691446 152693029 0 3 255,885,664, 0,616,1607, -chrX 152693677 152712545 NM_001666 0 - 152694029 152712503 0 22 586,100,93,184,74,234,106,135,78,61,103,28,85,192,102,222,129,183,63,163,205,109, 0,1693,2066,2364,2635,2794,3129,3323,3545,3752,5323,5647,5841,6032,6401,11455,11778,13249,13719,13987,14227,18759, -chr2 220108603 220116964 NM_001927 0 + 220108689 220116217 0 9 664,61,96,162,126,221,44,83,789, 0,1718,1874,2118,2451,2963,5400,7286,7572, -chr2 220229182 220233943 NM_024536 0 - 220229609 220233765 0 4 1687,180,574,492, 0,1990,2660,4269, diff -r ddcce8b55152c47177d85ab1a2433f80f162b64f -r a37fbe9cbd93a4e73a765d50be3aca4f31968f0b test-data/sort_out2.bed --- a/test-data/sort_out2.bed +++ b/test-data/sort_out2.bed @@ -1,3 +1,18 @@ +# comment 1 \n\n''" again +# comment 2 **}"''' special +# comment 3 @n/n""" characters +chr1 147962006 147975713 NM_005997 0 - 147962192 147975670 0 6 574,145,177,115,153,160, 0,1543,7859,9048,9340,13547, +chr1 147984101 148035079 BC007833 0 + 147984545 148033414 0 14 529,32,81,131,118,153,300,206,84,49,85,130,46,1668, 0,25695,28767,33118,33695,33998,35644,38005,39629,40577,41402,43885,48367,49310, +chr1 148077485 148111797 NM_002651 0 - 148078400 148111728 0 12 1097,121,133,266,124,105,110,228,228,45,937,77, 0,2081,2472,6871,9907,10257,11604,14199,15637,18274,23636,34235, +chr1 148185113 148187485 NM_002796 0 + 148185136 148187378 0 7 163,207,147,82,117,89,120, 0,416,877,1199,1674,1977,2252, +chr2 118288484 118306183 NM_006773 0 + 118288583 118304530 0 14 184,285,144,136,101,200,115,140,162,153,114,57,178,1796, 0,2765,4970,6482,6971,7183,7468,9890,10261,10768,11590,14270,14610,15903, +chr2 118389378 118390700 BC005078 0 - 118390395 118390500 0 1 1322, 0, +chr2 220108603 220116964 NM_001927 0 + 220108689 220116217 0 9 664,61,96,162,126,221,44,83,789, 0,1718,1874,2118,2451,2963,5400,7286,7572, +chr2 220229182 220233943 NM_024536 0 - 220229609 220233765 0 4 1687,180,574,492, 0,1990,2660,4269, +chr5 131170738 131357870 AF099740 0 - 131311206 131357817 0 31 112,124,120,81,65,40,120,129,61,88,94,79,72,102,144,117,89,73,96,135,135,78,74,52,33,179,100,102,65,115,248, 0,11593,44117,47607,104668,109739,114675,126366,135488,137518,138009,140437,152389,153373,155388,159269,160793,162981,164403,165577,166119,167611,169501,178260,179675,180901,181658,182260,182953,183706,186884, +chr5 131424245 131426795 NM_000588 0 + 131424298 131426383 0 5 215,42,90,42,535, 0,313,1658,1872,2015, +chr5 131556201 131590458 NM_004199 0 - 131556601 131582218 0 15 471,97,69,66,54,100,71,177,194,240,138,152,97,100,170, 0,2316,2802,5596,6269,11138,11472,15098,16528,17674,21306,24587,25142,25935,34087, +chr5 131621285 131637046 NM_003687 0 + 131621326 131635821 0 7 134,152,82,179,164,118,1430, 0,4915,8770,13221,13609,14097,14331, chr6 108298214 108386086 NM_007214 0 - 108299600 108385906 0 21 1530,105,99,102,159,174,60,83,148,155,93,133,95,109,51,59,62,113,115,100,304, 0,2490,6246,10831,12670,23164,23520,27331,31052,32526,34311,36130,36365,38609,41028,42398,43048,51479,54500,59097,87568, chr6 108593954 108616704 NM_003269 0 + 108594662 108615360 0 9 733,146,88,236,147,97,150,106,1507, 0,5400,8778,10445,12037,14265,14749,15488,21243, chr6 108639410 108689143 NM_152827 0 - 108640045 108688818 0 3 741,125,487, 0,2984,49246, @@ -6,24 +21,12 @@ chr7 116511232 116557294 NM_003391 0 - 116512159 116556994 0 5 1157,265,278,227,383, 0,20384,37843,43339,45679, chr7 116713967 116902666 NM_000492 0 + 116714099 116901113 0 27 185,111,109,216,90,164,126,247,93,183,192,95,87,724,129,38,251,80,151,228,101,249,156,90,173,106,1754, 0,24290,29071,50936,54313,55285,56585,60137,62053,68678,79501,107776,110390,111971,114967,122863,123569,126711,130556,131618,134650,147559,162475,172879,184725,185496,186945, chr7 116944658 117107512 AF377960 0 - 116945541 116979926 0 23 1129,102,133,64,186,206,179,188,153,100,87,80,96,276,118,255,151,100,204,1654,225,108,173, 0,7364,8850,10413,13893,14398,17435,24259,24615,35177,35359,45901,47221,49781,56405,66857,69787,72208,73597,80474,100111,150555,162681, -chr2 118288484 118306183 NM_006773 0 + 118288583 118304530 0 14 184,285,144,136,101,200,115,140,162,153,114,57,178,1796, 0,2765,4970,6482,6971,7183,7468,9890,10261,10768,11590,14270,14610,15903, -chr2 118389378 118390700 BC005078 0 - 118390395 118390500 0 1 1322, 0, chr8 118880786 119193239 NM_000127 0 - 118881131 119192466 0 11 531,172,161,90,96,119,133,120,108,94,1735, 0,5355,7850,13505,19068,20309,23098,30863,36077,37741,310718, -chrX 122719582 122773357 NM_001167 0 + 122745047 122766566 0 7 96,909,100,79,43,201,6985, 0,25433,28421,31040,32533,40295,46790, chr9 128763240 128783870 NM_174933 0 + 128764156 128783586 0 12 261,118,74,159,76,48,56,63,129,117,127,370, 0,522,875,5630,12374,12603,15040,15175,18961,19191,20037,20260, chr9 128787362 128789566 NM_014908 0 - 128787519 128789136 0 1 2204, 0, chr9 128789530 128848928 NM_015354 0 + 128789552 128848511 0 44 54,55,74,85,81,45,93,120,212,115,201,90,66,120,127,153,127,88,77,115,121,67,129,140,107,207,170,70,68,196,78,86,146,182,201,93,159,138,75,228,132,74,130,594, 0,1491,5075,8652,9254,10312,11104,11317,20808,21702,23060,25462,31564,32908,33566,34851,35204,35595,35776,37202,38860,39111,39891,40349,42422,45499,45827,46675,47158,47621,50453,50840,51474,51926,53831,54186,55119,55619,57449,57605,57947,58352,58541,58804, chr9 128849867 128870133 NM_020145 0 - 128850516 128869987 0 11 757,241,101,90,24,63,93,134,129,142,209, 0,1071,1736,2085,2635,4201,6376,6736,13056,14247,20057, -chr5 131170738 131357870 AF099740 0 - 131311206 131357817 0 31 112,124,120,81,65,40,120,129,61,88,94,79,72,102,144,117,89,73,96,135,135,78,74,52,33,179,100,102,65,115,248, 0,11593,44117,47607,104668,109739,114675,126366,135488,137518,138009,140437,152389,153373,155388,159269,160793,162981,164403,165577,166119,167611,169501,178260,179675,180901,181658,182260,182953,183706,186884, -chr5 131424245 131426795 NM_000588 0 + 131424298 131426383 0 5 215,42,90,42,535, 0,313,1658,1872,2015, -chr5 131556201 131590458 NM_004199 0 - 131556601 131582218 0 15 471,97,69,66,54,100,71,177,194,240,138,152,97,100,170, 0,2316,2802,5596,6269,11138,11472,15098,16528,17674,21306,24587,25142,25935,34087, -chr5 131621285 131637046 NM_003687 0 + 131621326 131635821 0 7 134,152,82,179,164,118,1430, 0,4915,8770,13221,13609,14097,14331, -chr1 147962006 147975713 NM_005997 0 - 147962192 147975670 0 6 574,145,177,115,153,160, 0,1543,7859,9048,9340,13547, -chr1 147984101 148035079 BC007833 0 + 147984545 148033414 0 14 529,32,81,131,118,153,300,206,84,49,85,130,46,1668, 0,25695,28767,33118,33695,33998,35644,38005,39629,40577,41402,43885,48367,49310, -chr1 148077485 148111797 NM_002651 0 - 148078400 148111728 0 12 1097,121,133,266,124,105,110,228,228,45,937,77, 0,2081,2472,6871,9907,10257,11604,14199,15637,18274,23636,34235, -chr1 148185113 148187485 NM_002796 0 + 148185136 148187378 0 7 163,207,147,82,117,89,120, 0,416,877,1199,1674,1977,2252, +chrX 122719582 122773357 NM_001167 0 + 122745047 122766566 0 7 96,909,100,79,43,201,6985, 0,25433,28421,31040,32533,40295,46790, chrX 152648233 152662158 NM_000425 0 - 152648964 152662138 0 28 963,12,73,135,156,120,174,123,202,116,223,71,198,111,125,157,167,112,144,132,185,112,171,123,203,106,11,100, 0,1436,1545,1951,2390,2653,2889,3156,3367,3772,4717,5122,5424,5868,6066,6370,6629,6909,7588,7871,8124,8456,8858,9125,10220,10660,11296,13825, chrX 152691216 152693487 NM_000054 0 + 152691446 152693029 0 3 255,885,664, 0,616,1607, chrX 152693677 152712545 NM_001666 0 - 152694029 152712503 0 22 586,100,93,184,74,234,106,135,78,61,103,28,85,192,102,222,129,183,63,163,205,109, 0,1693,2066,2364,2635,2794,3129,3323,3545,3752,5323,5647,5841,6032,6401,11455,11778,13249,13719,13987,14227,18759, -chr2 220108603 220116964 NM_001927 0 + 220108689 220116217 0 9 664,61,96,162,126,221,44,83,789, 0,1718,1874,2118,2451,2963,5400,7286,7572, -chr2 220229182 220233943 NM_024536 0 - 220229609 220233765 0 4 1687,180,574,492, 0,1990,2660,4269, diff -r ddcce8b55152c47177d85ab1a2433f80f162b64f -r a37fbe9cbd93a4e73a765d50be3aca4f31968f0b tools/filters/sorter.py --- a/tools/filters/sorter.py +++ b/tools/filters/sorter.py @@ -1,49 +1,59 @@ """ -Sorts tabular data on one or more columns. + Sorts tabular data on one or more columns. All comments of the file are collected + and placed at the beginning of the sorted output file. + + usage: sorter.py [options] + -i, --input: Tabular file to be sorted + -o, --output: Sorted output file + -k, --key: Key (see manual for bash/sort) + + usage: sorter.py input output [key ...] +""" +# 03/05/2013 guerler -usage: %prog [options] - -i, --input=i: Tabular file to be sorted - -o, --out_file1=o: Sorted output file - -c, --column=c: First column to sort on - -s, --style=s: Sort style (numerical or alphabetical) - -r, --order=r: Order (ASC or DESC) +# imports +import os, re, string, sys +from optparse import OptionParser -usage: %prog input out_file1 column style order [column style ...] -""" - -import os, re, string, sys -from galaxy import eggs -import pkg_resources; pkg_resources.require( "bx-python" ) -from bx.cookbook import doc_optparse - +# error def stop_err( msg ): sys.stderr.write( "%s\n" % msg ) sys.exit() +# main def main(): - #Parse Command Line - options, args = doc_optparse.parse( __doc__ ) + # define options + parser = OptionParser() + parser.add_option("-i", "--input") + parser.add_option("-o", "--output") + parser.add_option("-k", "--key", action="append") + + # parse + options, args = parser.parse_args() + try: - inputfile = options.input - outputfile = '-o %s' % options.out_file1 - columns = [options.column] - styles = [('','n')[options.style == 'num']] - orders = [('','r')[options.order == 'DESC']] - col_style_orders = sys.argv[6:] - if len(col_style_orders) > 1: - columns.extend([col_style_orders[i] for i in range(0,len(col_style_orders),3)]) - styles.extend([('','n')[col_style_orders[i] == 'num'] for i in range(1,len(col_style_orders),3)]) - orders.extend([('','r')[col_style_orders[i] == 'DESC'] for i in range(2,len(col_style_orders),3)]) - cols = [ '-k%s,%s%s%s'%(columns[i], columns[i], styles[i], orders[i]) for i in range(len(columns)) ] + # retrieve options + input = options.input + output = options.output + key = [" -k" + k for k in options.key] + + # grep comments + grep_comments = "(grep '^#' %s) > %s" % (input, output) + #print grep_comments + + # grep and sort columns + sort_columns = "(grep '^[^#]' %s | sort -f -t '\t' %s) >> %s" % (input, ' '.join(key), output) + #print sort_columns + + # execute + os.system(grep_comments) + os.system(sort_columns) + except Exception, ex: - stop_err('Error parsing input parameters\n' + str(ex)) + stop_err('Error running sorter.py\n' + str(ex)) - # Launch sort. - cmd = "sort -f -t ' ' %s %s %s" % (' '.join(cols), outputfile, inputfile) - try: - os.system(cmd) - except Exception, ex: - stop_err('Error running sort command\n' + str(ex)) + # exit + sys.exit(0) if __name__ == "__main__": main() diff -r ddcce8b55152c47177d85ab1a2433f80f162b64f -r a37fbe9cbd93a4e73a765d50be3aca4f31968f0b tools/filters/sorter.xml --- a/tools/filters/sorter.xml +++ b/tools/filters/sorter.xml @@ -1,130 +1,61 @@ -<tool id="sort1" name="Sort" version="1.0.1"> - <description>data in ascending or descending order</description> - <command interpreter="python"> - sorter.py - --input=$input - --out_file1=$out_file1 - --column=$column - --style=$style - --order=$order - #for $col in $column_set: - ${col.other_column} - ${col.other_style} - ${col.other_order} - #end for - </command> - <inputs> - <param format="tabular" name="input" type="data" label="Sort Dataset" /> - <param name="column" label="on column" type="data_column" data_ref="input" accept_default="true"/> - <param name="style" type="select" label="with flavor"> - <option value="num">Numerical sort</option> - <option value="alpha">Alphabetical sort</option> - </param> - <param name="order" type="select" label="everything in"> - <option value="DESC">Descending order</option> - <option value="ASC">Ascending order</option> - </param> - <repeat name="column_set" title="Column selection"> - <param name="other_column" label="on column" type="data_column" data_ref="input" accept_default="true" /> - <param name="other_style" type="select" label="with flavor"> - <option value="num">Numerical sort</option> - <option value="alpha">Alphabetical sort</option> - </param> - <param name="other_order" type="select" label="everything in"> - <option value="DESC">Descending order</option> - <option value="ASC">Ascending order</option> - </param> - </repeat> - </inputs> - <outputs> - <data format="input" name="out_file1" metadata_source="input"/> - </outputs> - <tests> - <test> - <param name="input" value="sort_in1.bed"/> - <param name="column" value="1"/> - <param name="style" value="num"/> - <param name="order" value="ASC"/> - <param name="other_column" value="3"/> - <param name="other_style" value="num"/> - <param name="other_order" value="ASC"/> - <output name="out_file1" file="sort_out1.bed"/> - </test> - <test> - <param name="input" value="sort_in1.bed"/> - <param name="column" value="3"/> - <param name="style" value="alpha"/> - <param name="order" value="ASC"/> - <param name="other_column" value="1"/> - <param name="other_style" value="alpha"/> - <param name="other_order" value="ASC"/> - <output name="out_file1" file="sort_out2.bed"/> - </test> - </tests> - <help> +<tool id="sort1" name="Sort" version="1.0.2"> + <description>data in ascending or descending order</description> + <command interpreter="python"> + sorter.py + --input=$input + --output=$output + --key=$column,$column$style$order + #for $col in $column_set: + --key=${col.other_column},${col.other_column}${col.other_style}${col.other_order} + #end for + </command> + <inputs> + <param format="tabular" name="input" type="data" label="Sort Dataset" /> + <param name="column" label="on column" type="data_column" data_ref="input" accept_default="true"/> + <param name="style" type="select" label="with flavor"> + <option value="n">Numerical sort</option> + <option value="">Alphabetical sort</option> + </param> + <param name="order" type="select" label="everything in"> + <option value="r">Descending order</option> + <option value="">Ascending order</option> + </param> + <repeat name="column_set" title="Column selection"> + <param name="other_column" label="on column" type="data_column" data_ref="input" accept_default="true" /> + <param name="other_style" type="select" label="with flavor"> + <option value="n">Numerical sort</option> + <option value="">Alphabetical sort</option> + </param> + <param name="other_order" type="select" label="everything in"> + <option value="r">Descending order</option> + <option value="">Ascending order</option> + </param> + </repeat> + </inputs> + <outputs> + <data format="input" name="output" metadata_source="input"/> + </outputs> + <tests> + <test> + <param name="input" value="sort_in1.bed"/> + <param name="column" value="1"/> + <param name="style" value=""/> + <param name="order" value=""/> + <param name="other_column" value="3"/> + <param name="other_style" value="n"/> + <param name="other_order" value="r"/> + <output name="output" file="sort_out1.bed"/> + </test> + <test> + <param name="input" value="sort_in1.bed"/> + <param name="column" value="1"/> + <param name="style" value=""/> + <param name="order" value=""/> + <param name="other_column" value="3"/> + <param name="other_style" value="n"/> + <param name="other_order" value=""/> + <output name="output" file="sort_out2.bed"/> + </test> + </tests> -.. class:: infomark - -**TIP:** If your data is not TAB delimited, use *Text Manipulation->Convert* - ------ - -**Syntax** - -This tool sorts the dataset on any number of columns in either ascending or descending order. - -* Numerical sort orders numbers by their magnitude, ignores all characters besides numbers, and evaluates a string of numbers to the value they signify. -* Alphabetical sort is a phonebook type sort based on the conventional order of letters in an alphabet. Each nth letter is compared with the nth letter of other words in the list, starting at the first letter of each word and advancing to the second, third, fourth, and so on, until the order is established. Therefore, in an alphabetical sort, 2 comes after 100 (1 < 2). - ------ - -**Examples** - -The list of numbers 4,17,3,5 collates to 3,4,5,17 by numerical sorting, while it collates to 17,3,4,5 by alphabetical sorting. - -Sorting the following:: - - Q d 7 II jhu 45 - A kk 4 I h 111 - Pd p 1 ktY WS 113 - A g 10 H ZZ 856 - A edf 4 tw b 234 - BBB rt 10 H ZZ 100 - A rew 10 d b 1111 - C sd 19 YH aa 10 - Hah c 23 ver bb 467 - MN gtr 1 a X 32 - N j 9 a T 205 - BBB rrf 10 b Z 134 - odfr ws 6 Weg dew 201 - C f 3 WW SW 34 - A jhg 4 I b 345 - Pd gf 7 Gthe de 567 - rS hty 90 YY LOp 89 - A g 10 H h 43 - A g 4 I h 500 - -on columns 1 (alpha), 3 (num), and 6 (num) in ascending order will yield:: - - A kk 4 I h 111 - A edf 4 tw b 234 - A jhg 4 I b 345 - A g 4 I h 500 - A g 10 H h 43 - A g 10 H ZZ 856 - A rew 10 d b 1111 - BBB rt 10 H ZZ 100 - BBB rrf 10 b Z 134 - C f 3 WW SW 34 - C sd 19 YH aa 10 - Hah c 23 ver bb 467 - MN gtr 1 a X 32 - N j 9 a T 205 - odfr ws 6 Weg dew 201 - Pd p 1 ktY WS 113 - Pd gf 7 Gthe de 567 - Q d 7 II jhu 45 - rS hty 90 YY LOp 89 - - </help></tool> Repository URL: https://bitbucket.org/galaxy/galaxy-central/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email.
participants (1)
-
commits-noreply@bitbucket.org