Handle strangely defined tool tests when setting metadata in tool shed repositories.

This commit is contained in:
Greg Von Kuster
2013-12-17 10:08:03 -05:00
parent eb3907c797
commit 2e925a429d
2 changed files with 42 additions and 28 deletions
+26 -10
View File
@@ -927,10 +927,13 @@ def generate_tool_metadata( tool_config, tool, repository_clone_url, metadata_di
guid = suc.generate_tool_guid( repository_clone_url, tool )
# Handle tool.requirements.
tool_requirements = []
for tr in tool.requirements:
requirement_dict = dict( name=tr.name,
type=tr.type,
version=tr.version )
for tool_requirement in tool.requirements:
name = str( tool_requirement.name )
type = str( tool_requirement.type )
version = str( tool_requirement.version ) if tool_requirement.version else None
requirement_dict = dict( name=name,
type=type,
version=version )
tool_requirements.append( requirement_dict )
# Handle tool.tests.
tool_tests = []
@@ -941,18 +944,31 @@ def generate_tool_metadata( tool_config, tool, repository_clone_url, metadata_di
value, extra = required_file
required_files.append( ( value ) )
inputs = []
for input_field, values in ttb.inputs.iteritems():
if len( values ) == 1:
inputs.append( ( input_field, values[0] ) )
else:
inputs.append( ( input_field, values ) )
for param_name, values in ttb.inputs.iteritems():
# Handle improperly defined or strange test parameters and values.
if param_name is not None:
if values is None:
# An example is the 3rd test in http://testtoolshed.g2.bx.psu.edu/view/devteam/samtools_rmdup
# which is defined as:
# <test>
# <param name="input1" value="1.bam" ftype="bam" />
# <param name="bam_paired_end_type_selector" value="PE" />
# <param name="force_se" />
# <output name="output1" file="1.bam" ftype="bam" sort="True" />
# </test>
inputs.append( ( param_name, values ) )
else:
if len( values ) == 1:
inputs.append( ( param_name, values[ 0 ] ) )
else:
inputs.append( ( param_name, values ) )
outputs = []
for output in ttb.outputs:
name, file_name, extra = output
outputs.append( ( name, suc.strip_path( file_name ) if file_name else None ) )
if file_name not in required_files and file_name is not None:
required_files.append( file_name )
test_dict = dict( name=ttb.name,
test_dict = dict( name=str( ttb.name ),
required_files=required_files,
inputs=inputs,
outputs=outputs )
+16 -18
View File
@@ -254,11 +254,8 @@ def create_or_update_tool_shed_repository( app, name, description, installed_cha
else:
deleted = False
uninstalled = False
tool_shed_repository = get_tool_shed_repository_by_shed_name_owner_installed_changeset_revision( app,
tool_shed,
name,
owner,
installed_changeset_revision )
tool_shed_repository = \
get_tool_shed_repository_by_shed_name_owner_installed_changeset_revision( app, tool_shed, name, owner, installed_changeset_revision )
if tool_shed_repository:
log.debug( "Updating an existing row for repository '%s' in the tool_shed_repository table, status set to '%s'." % ( str( name ), str( status ) ) )
tool_shed_repository.description = description
@@ -271,19 +268,20 @@ def create_or_update_tool_shed_repository( app, name, description, installed_cha
tool_shed_repository.status = status
else:
log.debug( "Adding new row for repository '%s' in the tool_shed_repository table, status set to '%s'." % ( str( name ), str( status ) ) )
tool_shed_repository = app.install_model.ToolShedRepository( tool_shed=tool_shed,
name=name,
description=description,
owner=owner,
installed_changeset_revision=installed_changeset_revision,
changeset_revision=current_changeset_revision,
ctx_rev=ctx_rev,
metadata=metadata_dict,
includes_datatypes=includes_datatypes,
dist_to_shed=dist_to_shed,
deleted=deleted,
uninstalled=uninstalled,
status=status )
tool_shed_repository = \
app.install_model.ToolShedRepository( tool_shed=tool_shed,
name=name,
description=description,
owner=owner,
installed_changeset_revision=installed_changeset_revision,
changeset_revision=current_changeset_revision,
ctx_rev=ctx_rev,
metadata=metadata_dict,
includes_datatypes=includes_datatypes,
dist_to_shed=dist_to_shed,
deleted=deleted,
uninstalled=uninstalled,
status=status )
context.add( tool_shed_repository )
context.flush()
return tool_shed_repository