mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Explicitly uninstall tool dependencies that are in an error state.
This commit is contained in:
@@ -8,39 +8,59 @@ log = logging.getLogger(__name__)
|
||||
def delete_obj( obj ):
|
||||
sa_session.delete( obj )
|
||||
sa_session.flush()
|
||||
|
||||
def delete_user_roles( user ):
|
||||
for ura in user.roles:
|
||||
sa_session.delete( ura )
|
||||
sa_session.flush()
|
||||
|
||||
def flush( obj ):
|
||||
sa_session.add( obj )
|
||||
sa_session.flush()
|
||||
|
||||
def get_repository( repository_id ):
|
||||
return sa_session.query( model.ToolShedRepository ) \
|
||||
.filter( model.ToolShedRepository.table.c.id == repository_id ) \
|
||||
.first()
|
||||
|
||||
def get_installed_repository_by_name_owner_changeset_revision( name, owner, changeset_revision ):
|
||||
return sa_session.query( model.ToolShedRepository ) \
|
||||
.filter( and_( model.ToolShedRepository.table.c.name == name,
|
||||
model.ToolShedRepository.table.c.owner == owner,
|
||||
model.ToolShedRepository.table.c.installed_changeset_revision == changeset_revision ) ) \
|
||||
.one()
|
||||
|
||||
def get_private_role( user ):
|
||||
for role in user.all_roles():
|
||||
if role.name == user.email and role.description == 'Private Role for %s' % user.email:
|
||||
return role
|
||||
raise AssertionError( "Private role not found for user '%s'" % user.email )
|
||||
|
||||
def get_tool_dependencies_for_installed_repository( repository_id, status=None ):
|
||||
if status is not None:
|
||||
return sa_session.query( model.ToolDependency ) \
|
||||
.filter( and_( model.ToolDependency.table.c.tool_shed_repository_id == repository_id,
|
||||
model.ToolDependency.table.c.status == status ) ) \
|
||||
.all()
|
||||
else:
|
||||
return sa_session.query( model.ToolDependency ) \
|
||||
.filter( model.ToolDependency.table.c.tool_shed_repository_id == repository_id ) \
|
||||
.all()
|
||||
|
||||
def mark_obj_deleted( obj ):
|
||||
obj.deleted = True
|
||||
sa_session.add( obj )
|
||||
sa_session.flush()
|
||||
|
||||
def refresh( obj ):
|
||||
sa_session.refresh( obj )
|
||||
|
||||
def get_private_role( user ):
|
||||
for role in user.all_roles():
|
||||
if role.name == user.email and role.description == 'Private Role for %s' % user.email:
|
||||
return role
|
||||
raise AssertionError( "Private role not found for user '%s'" % user.email )
|
||||
|
||||
def get_user( email ):
|
||||
return sa_session.query( model.User ) \
|
||||
.filter( model.User.table.c.email==email ) \
|
||||
|
||||
@@ -149,4 +149,20 @@ class InstallTestRepository( TwillTestCase ):
|
||||
strings_displayed.append( 'has been deactivated' )
|
||||
else:
|
||||
strings_displayed.append( 'has been uninstalled' )
|
||||
self.check_for_strings( strings_displayed, strings_not_displayed=[] )
|
||||
self.check_for_strings( strings_displayed, strings_not_displayed=[] )
|
||||
# Get all tool dependencies that are in an error state and uninstall them explicitly, so that the next installation attempt
|
||||
# may succeed.
|
||||
error_state = model.ToolDependency.installation_status.ERROR
|
||||
tool_dependencies = test_db_util.get_tool_dependencies_for_installed_repository( installed_repository.id, status=error_state )
|
||||
if len( tool_dependencies ) > 0:
|
||||
encoded_tool_dependency_ids = [ self.security.encode_id( tool_dependency.id ) for tool_dependency in tool_dependencies ]
|
||||
self.uninstall_tool_dependencies( self.security.encode_id( installed_repository.id ), encoded_tool_dependency_ids )
|
||||
|
||||
def uninstall_tool_dependencies( self, encoded_repository_id, encoded_tool_dependency_ids ):
|
||||
tool_dependency_ids = ','.join( encoded_tool_dependency_ids )
|
||||
url = '/admin_toolshed/uninstall_tool_dependencies?repository_id=%s&inst_td_ids=%s&operation=uninstall' % \
|
||||
( encoded_repository_id, tool_dependency_ids )
|
||||
self.visit_url( url )
|
||||
tc.fv( 'uninstall_tool_dependencies', 'tool_dependency_ids', tool_dependency_ids )
|
||||
tc.submit( 'uninstall_tool_dependencies_button' )
|
||||
|
||||
Reference in New Issue
Block a user