mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Improve error message handling when setting metadata on tool shed repositories. Display the repository owner in the table grid when displaying invalid tools in the tool shed.
This commit is contained in:
@@ -696,9 +696,14 @@ class AdminController( BaseUIController, Admin ):
|
||||
owner = repository_name_owner_list[ 1 ]
|
||||
repository = get_repository_by_name_and_owner( trans, name, owner )
|
||||
try:
|
||||
reset_all_metadata_on_repository( trans, trans.security.encode_id( repository.id ) )
|
||||
log.debug( "Successfully reset metadata on repository %s" % repository.name )
|
||||
successful_count += 1
|
||||
invalid_file_tups = reset_all_metadata_on_repository( trans, trans.security.encode_id( repository.id ) )
|
||||
if invalid_file_tups:
|
||||
message = generate_message_for_invalid_tools( invalid_file_tups, repository, None, as_html=False )
|
||||
log.debug( message )
|
||||
unsuccessful_count += 1
|
||||
else:
|
||||
log.debug( "Successfully reset metadata on repository %s" % repository.name )
|
||||
successful_count += 1
|
||||
except Exception, e:
|
||||
log.debug( "Error attempting to reset metadata on repository '%s': %s" % ( repository.name, str( e ) ) )
|
||||
unsuccessful_count += 1
|
||||
|
||||
@@ -277,6 +277,41 @@ def generate_clone_url( trans, repository_id ):
|
||||
return '%s://%s%s/repos/%s/%s' % ( protocol, username, base, repository.user.username, repository.name )
|
||||
else:
|
||||
return '%s/repos/%s/%s' % ( base_url, repository.user.username, repository.name )
|
||||
def generate_message_for_invalid_tools( invalid_file_tups, repository, metadata_dict, as_html=True ):
|
||||
if as_html:
|
||||
new_line = '<br/>'
|
||||
bold_start = '<b>'
|
||||
bold_end = '</b>'
|
||||
else:
|
||||
new_line = '\n'
|
||||
bold_start = ''
|
||||
bold_end = ''
|
||||
message = ''
|
||||
if metadata_dict:
|
||||
message += "Metadata was defined for some items in revision '%s'. " % str( repository.tip )
|
||||
message += "Correct the following problems if necessary and reset metadata.%s" % new_line
|
||||
else:
|
||||
message += "Metadata cannot be defined for revision '%s' so this revision cannot be automatically " % str( repository.tip )
|
||||
message += "installed into a local Galaxy instance. Correct the following problems and reset metadata.%s" % new_line
|
||||
for itc_tup in invalid_file_tups:
|
||||
tool_file, exception_msg = itc_tup
|
||||
if exception_msg.find( 'No such file or directory' ) >= 0:
|
||||
exception_items = exception_msg.split()
|
||||
missing_file_items = exception_items[ 7 ].split( '/' )
|
||||
missing_file = missing_file_items[ -1 ].rstrip( '\'' )
|
||||
if missing_file.endswith( '.loc' ):
|
||||
sample_ext = '%s.sample' % missing_file
|
||||
else:
|
||||
sample_ext = missing_file
|
||||
correction_msg = "This file refers to a missing file %s%s%s. " % ( bold_start, str( missing_file ), bold_end )
|
||||
correction_msg += "Upload a file named %s%s%s to the repository to correct this error." % ( bold_start, sample_ext, bold_end )
|
||||
else:
|
||||
if as_html:
|
||||
correction_msg = exception_msg
|
||||
else:
|
||||
correction_msg = exception_msg.replace( '<br/>', new_line ).replace( '<b>', bold_start ).replace( '</b>', bold_end )
|
||||
message += "%s%s%s - %s%s" % ( bold_start, tool_file, bold_end, correction_msg, new_line )
|
||||
return message
|
||||
def generate_tool_guid( trans, repository, tool ):
|
||||
"""
|
||||
Generate a guid for the received tool. The form of the guid is
|
||||
@@ -854,6 +889,7 @@ def reset_all_metadata_on_repository( trans, id, **kwd ):
|
||||
clean_repository_metadata( trans, id, changeset_revisions )
|
||||
# Set tool version information for all downloadable changeset revisions. Get the list of changeset revisions from the changelog.
|
||||
reset_all_tool_versions( trans, id, repo )
|
||||
return invalid_file_tups
|
||||
def set_repository_metadata( trans, repository, content_alert_str='', **kwd ):
|
||||
"""
|
||||
Set metadata using the repository's current disk files, returning specific error messages (if any) to alert the repository owner that the changeset
|
||||
@@ -931,27 +967,7 @@ def set_repository_metadata( trans, repository, content_alert_str='', **kwd ):
|
||||
message += "be defined so this revision cannot be automatically installed into a local Galaxy instance."
|
||||
status = "error"
|
||||
if invalid_file_tups:
|
||||
if metadata_dict:
|
||||
message += "Metadata was defined for some items in revision '%s'. " % str( repository.tip )
|
||||
message += "Correct the following problems if necessary and reset metadata.<br/>"
|
||||
else:
|
||||
message += "Metadata cannot be defined for revision '%s' so this revision cannot be automatically " % str( repository.tip )
|
||||
message += "installed into a local Galaxy instance. Correct the following problems and reset metadata.<br/>"
|
||||
for itc_tup in invalid_file_tups:
|
||||
tool_file, exception_msg = itc_tup
|
||||
if exception_msg.find( 'No such file or directory' ) >= 0:
|
||||
exception_items = exception_msg.split()
|
||||
missing_file_items = exception_items[ 7 ].split( '/' )
|
||||
missing_file = missing_file_items[ -1 ].rstrip( '\'' )
|
||||
if missing_file.endswith( '.loc' ):
|
||||
sample_ext = '%s.sample' % missing_file
|
||||
else:
|
||||
sample_ext = missing_file
|
||||
correction_msg = "This file refers to a missing file <b>%s</b>. " % str( missing_file )
|
||||
correction_msg += "Upload a file named <b>%s</b> to the repository to correct this error." % sample_ext
|
||||
else:
|
||||
correction_msg = exception_msg
|
||||
message += "<b>%s</b> - %s<br/>" % ( tool_file, correction_msg )
|
||||
message = generate_message_for_invalid_tools( invalid_file_tups, repository, metadata_dict )
|
||||
status = 'error'
|
||||
return message, status
|
||||
def set_repository_metadata_due_to_new_tip( trans, repository, content_alert_str=None, **kwd ):
|
||||
|
||||
@@ -458,7 +458,10 @@ class RepositoryController( BaseUIController, ItemRatings ):
|
||||
metadata = downloadable_revision.metadata
|
||||
invalid_tools = metadata.get( 'invalid_tools', [] )
|
||||
for invalid_tool_config in invalid_tools:
|
||||
invalid_tools_dict[ invalid_tool_config ] = ( repository.id, repository.name, downloadable_revision.changeset_revision )
|
||||
invalid_tools_dict[ invalid_tool_config ] = ( repository.id,
|
||||
repository.name,
|
||||
repository.user.username,
|
||||
downloadable_revision.changeset_revision )
|
||||
else:
|
||||
for repository in trans.sa_session.query( trans.model.Repository ) \
|
||||
.filter( and_( trans.model.Repository.table.c.deleted == False,
|
||||
@@ -468,7 +471,10 @@ class RepositoryController( BaseUIController, ItemRatings ):
|
||||
metadata = downloadable_revision.metadata
|
||||
invalid_tools = metadata.get( 'invalid_tools', [] )
|
||||
for invalid_tool_config in invalid_tools:
|
||||
invalid_tools_dict[ invalid_tool_config ] = ( repository.id, repository.name, downloadable_revision.changeset_revision )
|
||||
invalid_tools_dict[ invalid_tool_config ] = ( repository.id,
|
||||
repository.name,
|
||||
repository.user.username,
|
||||
downloadable_revision.changeset_revision )
|
||||
return trans.fill_template( '/webapps/community/repository/browse_invalid_tools.mako',
|
||||
cntrller=cntrller,
|
||||
invalid_tools_dict=invalid_tools_dict,
|
||||
@@ -1373,6 +1379,7 @@ class RepositoryController( BaseUIController, ItemRatings ):
|
||||
return trans.response.send_redirect( url )
|
||||
@web.expose
|
||||
def load_invalid_tool( self, trans, repository_id, tool_config, changeset_revision, **kwd ):
|
||||
# FIXME: loading an invalid tool should display an appropriate message as to why the tool is invalid. This worked until recently.
|
||||
params = util.Params( kwd )
|
||||
message = util.restore_text( params.get( 'message', '' ) )
|
||||
status = params.get( 'status', 'error' )
|
||||
@@ -1752,9 +1759,14 @@ class RepositoryController( BaseUIController, ItemRatings ):
|
||||
status=status )
|
||||
@web.expose
|
||||
def reset_all_metadata( self, trans, id, **kwd ):
|
||||
reset_all_metadata_on_repository( trans, id, **kwd )
|
||||
message = "All repository metadata has been reset."
|
||||
status = 'done'
|
||||
invalid_file_tups = reset_all_metadata_on_repository( trans, id, **kwd )
|
||||
if invalid_file_tups:
|
||||
repository = get_repository( trans, id )
|
||||
message = generate_message_for_invalid_tools( invalid_file_tups, repository, None )
|
||||
status = 'error'
|
||||
else:
|
||||
message = "All repository metadata has been reset."
|
||||
status = 'done'
|
||||
return trans.response.send_redirect( web.url_for( controller='repository',
|
||||
action='manage_repository',
|
||||
id=id,
|
||||
|
||||
@@ -13,10 +13,11 @@
|
||||
<tr>
|
||||
<th>Tool config</th>
|
||||
<th>Repository name</th>
|
||||
<th>Repository owner</th>
|
||||
<th>Changeset revision</th>
|
||||
</tr>
|
||||
%for invalid_tool_config, repository_tup in invalid_tools_dict.items():
|
||||
<% repository_id, repository_name, changeset_revision = repository_tup %>
|
||||
<% repository_id, repository_name, repository_owner, changeset_revision = repository_tup %>
|
||||
<tr>
|
||||
<td>
|
||||
<a class="view-info" href="${h.url_for( controller='repository', action='load_invalid_tool', repository_id=trans.security.encode_id( repository_id ), tool_config=invalid_tool_config, changeset_revision=changeset_revision, webapp=webapp )}">
|
||||
@@ -24,6 +25,7 @@
|
||||
</a>
|
||||
</td>
|
||||
<td>${repository_name}</td>
|
||||
<td>${repository_owner}</td>
|
||||
<td>${changeset_revision}</td>
|
||||
</tr>
|
||||
%endfor
|
||||
|
||||
Reference in New Issue
Block a user