details:
http://www.bx.psu.edu/hg/galaxy/rev/f84112d155c0
changeset: 3504:f84112d155c0
user: Dan Blankenberg <dan(a)bx.psu.edu>
date: Wed Mar 10 11:28:50 2010 -0500
description:
Allow renaming of uploaded files in toolbox tests by including a <edit_attributes
type="name" value="new dataset name" /> child tag. A rename
directive is automatically assigned (no xml changes required) to uploaded composite
datasets, so that they can be identified uniquely.
diffstat:
lib/galaxy/tools/__init__.py | 23 +++++++++++++++++++++++
lib/galaxy/tools/test.py | 11 +++++++----
test/functional/test_toolbox.py | 16 ++++++++++++++--
3 files changed, 44 insertions(+), 6 deletions(-)
diffs (91 lines):
diff -r c73f093219aa -r f84112d155c0 lib/galaxy/tools/__init__.py
--- a/lib/galaxy/tools/__init__.py Wed Mar 10 11:24:49 2010 -0500
+++ b/lib/galaxy/tools/__init__.py Wed Mar 10 11:28:50 2010 -0500
@@ -510,6 +510,7 @@
store in `self.tests`.
"""
self.tests = []
+ composite_data_names_counter = 0 #composite datasets need a unique name: each
test occurs in a fresh history, but we'll keep it unique per set of tests
for i, test_elem in enumerate( tests_elem.findall( 'test' ) ):
name = test_elem.get( 'name', 'Test-%d' % (i+1) )
maxseconds = int( test_elem.get( 'maxseconds', '120' ) )
@@ -524,6 +525,28 @@
else:
value = None
attrib['children'] = list( param_elem.getchildren() )
+ if attrib['children']:
+ #at this time, we can assume having children only occurs on
DataToolParameter test items
+ #but this could change and would cause the below parsing to
change based upon differences in children items
+ attrib['metadata'] = []
+ attrib['composite_data'] = []
+ attrib['edit_attributes'] = []
+ composite_data_name = None #composite datasets need to be renamed
uniquely
+ for child in attrib['children']:
+ if child.tag == 'composite_data':
+ attrib['composite_data'].append( child )
+ if composite_data_name is None:
+ #generate a unique name; each test uses a fresh
history
+ composite_data_name = '_COMPOSITE_RENAMED
%i_' % ( composite_data_names_counter )
+ composite_data_names_counter += 1
+ elif child.tag == 'metadata':
+ attrib['metadata'].append( child )
+ elif child.tag == 'metadata':
+ attrib['metadata'].append( child )
+ elif child.tag == 'edit_attributes':
+ attrib['edit_attributes'].append( child )
+ if composite_data_name:
+ attrib['edit_attributes'].insert( 0, {
'type': 'name', 'value': composite_data_name } ) #composite
datasets need implicit renaming; inserted at front of list so explicit declarations take
precedence
test.add_param( attrib.pop( 'name' ), value, attrib )
for output_elem in test_elem.findall( "output" ):
attrib = dict( output_elem.attrib )
diff -r c73f093219aa -r f84112d155c0 lib/galaxy/tools/test.py
--- a/lib/galaxy/tools/test.py Wed Mar 10 11:24:49 2010 -0500
+++ b/lib/galaxy/tools/test.py Wed Mar 10 11:28:50 2010 -0500
@@ -30,12 +30,15 @@
if isinstance( input_value, grouping.Conditional ) or isinstance(
input_value, grouping.Repeat ):
self.__expand_grouping_for_data_input(name, value, extra,
input_name, input_value)
elif isinstance( self.tool.inputs[name], parameters.DataToolParameter ) and (
value, extra ) not in self.required_files:
- if value is None and len( [ child for child in extra.get(
'children', [] ) if child.tag == 'composite_data' ] ) == 0:
+ name_change = [ att for att in extra.get( 'edit_attributes', [] )
if att.get( 'type' ) == 'name' ]
+ if name_change:
+ name_change = name_change[-1].get( 'value' ) #only the last
name change really matters
+ if value is None and not name_change:
assert self.tool.inputs[name].optional, '%s is not optional. You
must provide a valid filename.' % name
else:
- self.required_files.append( ( value, extra ) )
- if value is None and len( [ child for child in extra.get(
'children', [] ) if child.tag == 'composite_data' ] ) > 0:
- value = extra.get( 'ftype' )
+ self.required_files.append( ( value, extra ) ) #these files will be
uploaded
+ if name_change:
+ value = name_change #change value for select to renamed uploaded
file for e.g. composite dataset
except Exception, e:
log.debug( "Error in add_param for %s: %s" % ( name, e ) )
self.inputs.append( ( name, value, extra ) )
diff -r c73f093219aa -r f84112d155c0 test/functional/test_toolbox.py
--- a/test/functional/test_toolbox.py Wed Mar 10 11:24:49 2010 -0500
+++ b/test/functional/test_toolbox.py Wed Mar 10 11:28:50 2010 -0500
@@ -33,10 +33,22 @@
# Upload any needed files
for fname, extra in testdef.required_files:
children = extra.get( 'children', [] )
- metadata = [ child for child in children if child.tag == 'metadata'
]
- composite_data = [ child for child in children if child.tag ==
'composite_data' ]
+ metadata = extra.get( 'metadata', [] )
+ composite_data = extra.get( 'composite_data', [] )
self.upload_file( fname, ftype=extra.get( 'ftype', 'auto' ),
dbkey=extra.get( 'dbkey', 'hg17' ), metadata = metadata, composite_data =
composite_data )
print "Uploaded file: ", fname, ", ftype: ", extra.get(
'ftype', 'auto' ), ", extra: ", extra
+ #Post upload attribute editing
+ edit_attributes = extra.get( 'edit_attributes', [] )
+ #currently only renaming is supported
+ for edit_att in edit_attributes:
+ if edit_att.get( 'type', None ) == 'name':
+ new_name = edit_att.get( 'value', None )
+ assert new_name, 'You must supply the new dataset name as the
value tag of the edit_attributes tag'
+ hda_id = self.get_history_as_data_list()[-1].get( 'id' )
+ self.edit_hda_attribute_info( hda_id, new_name = new_name )
+ print "Renamed uploaded file to:", new_name
+ else:
+ raise Exception( 'edit_attributes type (%s) is unimplemented'
% edit_att.get( 'type', None ) )
# We need to handle the case where we've uploaded a valid compressed file
since the upload
# tool will have uncompressed it on the fly.
all_inputs = {}