mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-21 13:50:20 +08:00
Merge pull request #2269 from davebx/refactor_suc
Move specific methods from shed_util_common.py to specific_util.py
This commit is contained in:
@@ -55,6 +55,7 @@ from galaxy.web.form_builder import SelectField
|
||||
from galaxy.util.dictifiable import Dictifiable
|
||||
from galaxy.work.context import WorkRequestContext
|
||||
from tool_shed.util import common_util
|
||||
import tool_shed.util.repository_util as repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
|
||||
from .loader import template_macro_params, raw_tool_xml_tree, imported_macro_paths
|
||||
@@ -164,7 +165,7 @@ class ToolBox( BaseGalaxyToolBox ):
|
||||
# Abstract toolbox doesn't have a dependency on the the database, so
|
||||
# override _get_tool_shed_repository here to provide this information.
|
||||
|
||||
return suc.get_installed_repository(
|
||||
return repository_util.get_installed_repository(
|
||||
self.app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
@@ -323,11 +324,11 @@ class Tool( object, Dictifiable ):
|
||||
def tool_shed_repository( self ):
|
||||
# If this tool is included in an installed tool shed repository, return it.
|
||||
if self.tool_shed:
|
||||
return suc.get_installed_repository( self.app,
|
||||
tool_shed=self.tool_shed,
|
||||
name=self.repository_name,
|
||||
owner=self.repository_owner,
|
||||
installed_changeset_revision=self.installed_changeset_revision )
|
||||
return repository_util.get_installed_repository( self.app,
|
||||
tool_shed=self.tool_shed,
|
||||
name=self.repository_name,
|
||||
owner=self.repository_owner,
|
||||
installed_changeset_revision=self.installed_changeset_revision )
|
||||
return None
|
||||
|
||||
@property
|
||||
|
||||
@@ -8,7 +8,7 @@ from galaxy.util.odict import odict
|
||||
from galaxy.util.template import fill_template
|
||||
from galaxy.tools.data import TabularToolDataTable
|
||||
from tool_shed.util import common_util
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
from tool_shed.util import repository_util
|
||||
import galaxy.queue_worker
|
||||
|
||||
# set up logger
|
||||
@@ -150,11 +150,11 @@ class DataManager( object ):
|
||||
owner=repository_owner,
|
||||
installed_changeset_revision=installed_changeset_revision )
|
||||
tool_shed_repository = \
|
||||
suc.get_installed_repository( self.data_managers.app,
|
||||
tool_shed=tool_shed,
|
||||
name=repository_name,
|
||||
owner=repository_owner,
|
||||
installed_changeset_revision=installed_changeset_revision )
|
||||
repository_util.get_installed_repository( self.data_managers.app,
|
||||
tool_shed=tool_shed,
|
||||
name=repository_name,
|
||||
owner=repository_owner,
|
||||
installed_changeset_revision=installed_changeset_revision )
|
||||
if tool_shed_repository is None:
|
||||
log.warning( 'Could not determine tool shed repository from database. This should only ever happen when running tests.' )
|
||||
# we'll set tool_path manually here from shed_conf_file
|
||||
|
||||
@@ -10,7 +10,7 @@ import galaxy.queue_worker
|
||||
from galaxy import util, web
|
||||
from galaxy.util import inflector
|
||||
from galaxy.web.form_builder import CheckboxField
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util.web_util import escape
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -35,7 +35,7 @@ class Admin( object ):
|
||||
status = kwd.get( 'status', 'done' )
|
||||
if trans.webapp.name == 'galaxy':
|
||||
is_repo_installed = trans.install_model.context.query( trans.install_model.ToolShedRepository ).first() is not None
|
||||
installing_repository_ids = suc.get_ids_of_tool_shed_repositories_being_installed( trans.app, as_string=True )
|
||||
installing_repository_ids = repository_util.get_ids_of_tool_shed_repositories_being_installed( trans.app, as_string=True )
|
||||
return trans.fill_template( '/webapps/galaxy/admin/index.mako',
|
||||
is_repo_installed=is_repo_installed,
|
||||
installing_repository_ids=installing_repository_ids,
|
||||
@@ -53,7 +53,7 @@ class Admin( object ):
|
||||
status = kwd.get( 'status', 'done' )
|
||||
if trans.webapp.name == 'galaxy':
|
||||
is_repo_installed = trans.install_model.context.query( trans.install_model.ToolShedRepository ).first() is not None
|
||||
installing_repository_ids = suc.get_ids_of_tool_shed_repositories_being_installed( trans.app, as_string=True )
|
||||
installing_repository_ids = repository_util.get_ids_of_tool_shed_repositories_being_installed( trans.app, as_string=True )
|
||||
return trans.fill_template( '/webapps/galaxy/admin/center.mako',
|
||||
is_repo_installed=is_repo_installed,
|
||||
installing_repository_ids=installing_repository_ids,
|
||||
|
||||
@@ -75,7 +75,7 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
# Since exported workflows are dictionaries with very few attributes that differentiate them from each
|
||||
# other, we'll build the list based on the following dictionary of those few attributes.
|
||||
exported_workflows = []
|
||||
repository = suc.get_tool_shed_repository_by_id( self.app, id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( self.app, id )
|
||||
metadata = repository.metadata
|
||||
if metadata:
|
||||
exported_workflow_tups = metadata.get( 'workflows', [] )
|
||||
@@ -172,7 +172,7 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
index = payload.get( 'index', None )
|
||||
if index is None:
|
||||
raise HTTPBadRequest( detail="Missing required parameter 'index'." )
|
||||
repository = suc.get_tool_shed_repository_by_id( self.app, tool_shed_repository_id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( self.app, tool_shed_repository_id )
|
||||
exported_workflows = json.loads( self.exported_workflows( trans, tool_shed_repository_id ) )
|
||||
# Since we don't have an in-memory object with an id, we'll identify the exported workflow via its location (i.e., index) in the list.
|
||||
exported_workflow = exported_workflows[ int( index ) ]
|
||||
@@ -199,7 +199,7 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
tool_shed_repository_id = kwd.get( 'id', '' )
|
||||
if not tool_shed_repository_id:
|
||||
raise HTTPBadRequest( detail="Missing required parameter 'id'." )
|
||||
repository = suc.get_tool_shed_repository_by_id( self.app, tool_shed_repository_id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( self.app, tool_shed_repository_id )
|
||||
exported_workflows = json.loads( self.exported_workflows( trans, tool_shed_repository_id ) )
|
||||
imported_workflow_dicts = []
|
||||
for exported_workflow_dict in exported_workflows:
|
||||
@@ -434,11 +434,11 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
# Get the information about the repository to be installed from the payload.
|
||||
tool_shed_url, name, owner, changeset_revision = self.__parse_repository_from_payload( payload, include_changeset=True )
|
||||
tool_shed_repositories = []
|
||||
tool_shed_repository = suc.get_installed_repository( self.app,
|
||||
tool_shed=tool_shed_url,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
tool_shed_repository = repository_util.get_installed_repository( self.app,
|
||||
tool_shed=tool_shed_url,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
rrm = RepairRepositoryManager( self.app )
|
||||
repair_dict = rrm.get_repair_dict( tool_shed_repository )
|
||||
ordered_tsr_ids = repair_dict.get( 'ordered_tsr_ids', [] )
|
||||
@@ -535,7 +535,7 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
:param id: the encoded id of the ToolShedRepository object
|
||||
"""
|
||||
# Example URL: http://localhost:8763/api/tool_shed_repositories/df7a1f0c02a5b08e
|
||||
tool_shed_repository = suc.get_tool_shed_repository_by_id( self.app, id )
|
||||
tool_shed_repository = repository_util.get_tool_shed_repository_by_id( self.app, id )
|
||||
if tool_shed_repository is None:
|
||||
log.debug( "Unable to locate tool_shed_repository record for id %s." % ( str( id ) ) )
|
||||
return {}
|
||||
@@ -555,7 +555,7 @@ class ToolShedRepositoriesController( BaseAPIController ):
|
||||
|
||||
:param id: the repository's encoded id
|
||||
"""
|
||||
tool_shed_repository = suc.get_tool_shed_repository_by_id( self.app, id )
|
||||
tool_shed_repository = repository_util.get_tool_shed_repository_by_id( self.app, id )
|
||||
if tool_shed_repository is None:
|
||||
log.debug( "Unable to locate tool_shed_repository record for id %s." % ( str( id ) ) )
|
||||
return {}
|
||||
|
||||
@@ -394,11 +394,11 @@ class AdminToolshed( AdminGalaxy ):
|
||||
repository_id = kwd.get( 'repository_id', None )
|
||||
relative_path_to_image_file = kwd.get( 'image_file', None )
|
||||
if repository_id and relative_path_to_image_file:
|
||||
repository = suc.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
if repository:
|
||||
repo_files_dir = repository.repo_files_directory( trans.app )
|
||||
# The following line sometimes returns None. TODO: Figure out why.
|
||||
path_to_file = suc.get_absolute_path_to_file_in_repository( repo_files_dir, relative_path_to_image_file )
|
||||
path_to_file = repository_util.get_absolute_path_to_file_in_repository( repo_files_dir, relative_path_to_image_file )
|
||||
if path_to_file and os.path.exists( path_to_file ):
|
||||
file_name = os.path.basename( relative_path_to_image_file )
|
||||
try:
|
||||
@@ -500,7 +500,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
status = kwd.get( 'status', 'done' )
|
||||
if workflow_name:
|
||||
workflow_name = encoding_util.tool_shed_decode( workflow_name )
|
||||
repository = suc.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
if repository:
|
||||
workflow, status, message = workflow_util.import_workflow( trans, repository, workflow_name )
|
||||
if workflow:
|
||||
@@ -593,7 +593,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
tmp_clone_url = util.build_url( tool_shed_url, pathspec=[ 'repos', owner, name ] )
|
||||
tmp_repo_info_tuple = ( None, tmp_clone_url, latest_downloadable_revision, None, owner, None, None )
|
||||
installed_repository, installed_changeset_revision = \
|
||||
suc.repository_was_previously_installed( trans.app, tool_shed_url, name, tmp_repo_info_tuple, from_tip=False )
|
||||
repository_util.repository_was_previously_installed( trans.app, tool_shed_url, name, tmp_repo_info_tuple, from_tip=False )
|
||||
if installed_repository:
|
||||
current_changeset_revision = str( installed_repository.changeset_revision )
|
||||
message = 'Revision <b>%s</b> of repository <b>%s</b> owned by <b>%s</b> has already been installed.' % \
|
||||
@@ -829,7 +829,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
# The user must be on the manage_repository_tool_dependencies page and clicked the button to either install or uninstall a
|
||||
# tool dependency, but they didn't check any of the available tool dependencies on which to perform the action.
|
||||
repository_id = kwd.get( 'repository_id', None )
|
||||
tool_shed_repository = suc.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
tool_shed_repository = repository_util.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
if 'operation' in kwd:
|
||||
operation = kwd[ 'operation' ].lower()
|
||||
if not tool_dependency_ids:
|
||||
@@ -911,7 +911,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
else:
|
||||
# The user must be on the manage_repository_tool_dependencies page and clicked the button to either install or uninstall a
|
||||
# tool dependency, but they didn't check any of the available tool dependencies on which to perform the action.
|
||||
tool_shed_repository = suc.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
tool_shed_repository = repository_util.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
self.tool_dependency_grid.title = "Tool shed repository '%s' tool dependencies" % escape( tool_shed_repository.name )
|
||||
if 'operation' in kwd:
|
||||
operation = kwd[ 'operation' ].lower()
|
||||
@@ -963,7 +963,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
def monitor_repository_installation( self, trans, **kwd ):
|
||||
tsridslist = common_util.get_tool_shed_repository_ids( **kwd )
|
||||
if not tsridslist:
|
||||
tsridslist = suc.get_ids_of_tool_shed_repositories_being_installed( trans.app, as_string=False )
|
||||
tsridslist = repository_util.get_ids_of_tool_shed_repositories_being_installed( trans.app, as_string=False )
|
||||
kwd[ 'tool_shed_repository_ids' ] = tsridslist
|
||||
return self.repository_installation_grid( trans, **kwd )
|
||||
|
||||
@@ -1029,7 +1029,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
# but the received repository id is from the Galaxy side (the caller is this controller's
|
||||
# update_to_changeset_revision() method. We need to get the id of the same repository from the
|
||||
# Tool Shed side.
|
||||
repository = suc.get_tool_shed_repository_by_id( trans.app, updating_repository_id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( trans.app, updating_repository_id )
|
||||
# For backward compatibility to the 12/20/12 Galaxy release.
|
||||
try:
|
||||
params = dict( name=str( repository.name ), owner=str( repository.owner ) )
|
||||
@@ -1074,7 +1074,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
if ( ( not includes_tools_for_display_in_tool_panel and kwd.get( 'select_shed_tool_panel_config_button', False ) ) or
|
||||
( includes_tools_for_display_in_tool_panel and kwd.get( 'select_tool_panel_section_button', False ) ) ):
|
||||
if updating:
|
||||
repository = suc.get_tool_shed_repository_by_id( trans.app, updating_repository_id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( trans.app, updating_repository_id )
|
||||
decoded_updated_metadata = encoding_util.tool_shed_decode( encoded_updated_metadata )
|
||||
# Now that the user has decided whether they will handle dependencies, we can update
|
||||
# the repository to the latest revision.
|
||||
@@ -1379,17 +1379,17 @@ class AdminToolshed( AdminGalaxy ):
|
||||
suc.clean_dependency_relationships(trans, new_meta, tool_shed_repository, tool_shed_url)
|
||||
# The repository's status must be updated from 'Uninstalled' to 'New' when initiating reinstall
|
||||
# so the repository_installation_updater will function.
|
||||
tool_shed_repository = suc.create_or_update_tool_shed_repository( trans.app,
|
||||
tool_shed_repository.name,
|
||||
tool_shed_repository.description,
|
||||
tool_shed_repository.installed_changeset_revision,
|
||||
tool_shed_repository.ctx_rev,
|
||||
repository_clone_url,
|
||||
metadata,
|
||||
trans.install_model.ToolShedRepository.installation_status.NEW,
|
||||
tool_shed_repository.changeset_revision,
|
||||
tool_shed_repository.owner,
|
||||
tool_shed_repository.dist_to_shed )
|
||||
tool_shed_repository = repository_util.create_or_update_tool_shed_repository( trans.app,
|
||||
tool_shed_repository.name,
|
||||
tool_shed_repository.description,
|
||||
tool_shed_repository.installed_changeset_revision,
|
||||
tool_shed_repository.ctx_rev,
|
||||
repository_clone_url,
|
||||
metadata,
|
||||
trans.install_model.ToolShedRepository.installation_status.NEW,
|
||||
tool_shed_repository.changeset_revision,
|
||||
tool_shed_repository.owner,
|
||||
tool_shed_repository.dist_to_shed )
|
||||
ctx_rev = suc.get_ctx_rev( trans.app,
|
||||
tool_shed_url,
|
||||
tool_shed_repository.name,
|
||||
@@ -1775,13 +1775,13 @@ class AdminToolshed( AdminGalaxy ):
|
||||
"""An error occurred while cloning the repository, so reset everything necessary to enable another attempt."""
|
||||
repository = repository_util.get_installed_tool_shed_repository( trans.app, kwd[ 'id' ] )
|
||||
if kwd.get( 'reset_repository', False ):
|
||||
suc.set_repository_attributes( trans.app,
|
||||
repository,
|
||||
status=trans.install_model.ToolShedRepository.installation_status.NEW,
|
||||
error_message=None,
|
||||
deleted=False,
|
||||
uninstalled=False,
|
||||
remove_from_disk=True )
|
||||
repository_util.set_repository_attributes( trans.app,
|
||||
repository,
|
||||
status=trans.install_model.ToolShedRepository.installation_status.NEW,
|
||||
error_message=None,
|
||||
deleted=False,
|
||||
uninstalled=False,
|
||||
remove_from_disk=True )
|
||||
new_kwd = {}
|
||||
new_kwd[ 'message' ] = "You can now attempt to install the repository named <b>%s</b> again." % escape( str( repository.name ) )
|
||||
new_kwd[ 'status' ] = "done"
|
||||
@@ -1910,11 +1910,11 @@ class AdminToolshed( AdminGalaxy ):
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
latest_changeset_revision = kwd.get( 'latest_changeset_revision', None )
|
||||
latest_ctx_rev = kwd.get( 'latest_ctx_rev', None )
|
||||
repository = suc.get_installed_repository( trans.app,
|
||||
tool_shed=tool_shed_url,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
repository = repository_util.get_installed_repository( trans.app,
|
||||
tool_shed=tool_shed_url,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
original_metadata_dict = repository.metadata
|
||||
original_repository_dependencies_dict = original_metadata_dict.get( 'repository_dependencies', {} )
|
||||
original_repository_dependencies = original_repository_dependencies_dict.get( 'repository_dependencies', [] )
|
||||
@@ -2001,11 +2001,11 @@ class AdminToolshed( AdminGalaxy ):
|
||||
# we set from_tip to True to make sure we get the entire set of changeset revisions
|
||||
# from the Tool Shed.
|
||||
new_repository_db_record, installed_changeset_revision = \
|
||||
suc.repository_was_previously_installed( trans.app,
|
||||
tool_shed_url,
|
||||
new_name,
|
||||
repo_info_tuple,
|
||||
from_tip=True )
|
||||
repository_util.repository_was_previously_installed( trans.app,
|
||||
tool_shed_url,
|
||||
new_name,
|
||||
repo_info_tuple,
|
||||
from_tip=True )
|
||||
if new_repository_db_record:
|
||||
if new_repository_db_record.status in [ trans.install_model.ToolShedRepository.installation_status.ERROR,
|
||||
trans.install_model.ToolShedRepository.installation_status.NEW,
|
||||
@@ -2120,7 +2120,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
status = kwd.get( 'status', 'done' )
|
||||
if workflow_name:
|
||||
workflow_name = encoding_util.tool_shed_decode( workflow_name )
|
||||
repository = suc.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
changeset_revision = repository.changeset_revision
|
||||
metadata = repository.metadata
|
||||
return trans.fill_template( "/admin/tool_shed_repository/view_workflow.mako",
|
||||
|
||||
@@ -7,6 +7,7 @@ from galaxy.web import require_admin as require_admin
|
||||
from galaxy.web import _future_expose_api as expose_api
|
||||
from galaxy.web import _future_expose_api_anonymous_and_sessionless as expose_api_anonymous_and_sessionless
|
||||
from galaxy.web.base.controller import BaseAPIController
|
||||
from tool_shed.util import repository_util
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -81,7 +82,7 @@ class CategoriesController( BaseAPIController ):
|
||||
category_dict[ 'url' ] = web.url_for( controller='categories',
|
||||
action='show',
|
||||
id=trans.security.encode_id( category.id ) )
|
||||
repositories = suc.get_repositories_by_category( self.app, category.id )
|
||||
repositories = repository_util.get_repositories_by_category( self.app, category.id )
|
||||
category_dict[ 'repositories' ] = repositories
|
||||
return category_dict
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@ from tool_shed.util import hg_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_content_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import tool_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -73,7 +72,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
owner = payload.get( 'owner', '' )
|
||||
if not owner:
|
||||
raise HTTPBadRequest( detail="Missing required parameter 'owner'." )
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
if repository is None:
|
||||
error_message = 'Cannot locate repository with name %s and owner %s,' % ( str( name ), str( owner ) )
|
||||
log.debug( error_message )
|
||||
@@ -106,12 +105,12 @@ class RepositoriesController( BaseAPIController ):
|
||||
tsr_id = kwd.get( 'tsr_id', None )
|
||||
if None not in [ name, owner ]:
|
||||
# Get the repository information.
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
if repository is None:
|
||||
trans.response.status = 404
|
||||
return { 'status': 'error', 'message': 'No repository named %s found with owner %s' % ( name, owner ) }
|
||||
elif tsr_id is not None:
|
||||
repository = suc.get_repository_in_tool_shed( self.app, tsr_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, tsr_id )
|
||||
else:
|
||||
error_message = "Error in the Tool Shed repositories API in get_ordered_installable_revisions: "
|
||||
error_message += "invalid parameters received."
|
||||
@@ -190,7 +189,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
# http://<xyz>/api/repositories/get_repository_revision_install_info?name=<n>&owner=<o>&changeset_revision=<cr>
|
||||
if name and owner and changeset_revision:
|
||||
# Get the repository information.
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
if repository is None:
|
||||
log.debug( 'Cannot locate repository %s owned by %s' % ( str( name ), str( owner ) ) )
|
||||
return {}, {}, {}
|
||||
@@ -201,17 +200,17 @@ class RepositoriesController( BaseAPIController ):
|
||||
action='show',
|
||||
id=encoded_repository_id )
|
||||
# Get the repository_metadata information.
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
changeset_revision )
|
||||
if repository_metadata is None:
|
||||
# The changeset_revision column in the repository_metadata table has been updated with a new
|
||||
# value value, so find the changeset_revision to which we need to update.
|
||||
repo = hg_util.get_repo_for_repository( self.app, repository=repository, repo_path=None, create=False )
|
||||
new_changeset_revision = suc.get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
new_changeset_revision )
|
||||
new_changeset_revision = metadata_util.get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
new_changeset_revision )
|
||||
changeset_revision = new_changeset_revision
|
||||
if repository_metadata is not None:
|
||||
encoded_repository_metadata_id = trans.security.encode_id( repository_metadata.id )
|
||||
@@ -257,7 +256,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
# Example URL: http://localhost:9009/api/repositories/get_installable_revisions?tsr_id=9d37e53072ff9fa4
|
||||
tsr_id = kwd.get( 'tsr_id', None )
|
||||
if tsr_id is not None:
|
||||
repository = suc.get_repository_in_tool_shed( self.app, tsr_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, tsr_id )
|
||||
else:
|
||||
error_message = "Error in the Tool Shed repositories API in get_ordered_installable_revisions: "
|
||||
error_message += "missing or invalid parameter received."
|
||||
@@ -494,7 +493,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
owner = payload.get( 'owner', '' )
|
||||
if not owner:
|
||||
raise HTTPBadRequest( detail="Missing required parameter 'owner'." )
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
if repository is None:
|
||||
error_message = 'Cannot locate repository with name %s and owner %s,' % ( str( name ), str( owner ) )
|
||||
log.debug( error_message )
|
||||
@@ -679,7 +678,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
|
||||
repository_id = payload.get( 'repository_id', None )
|
||||
if repository_id is not None:
|
||||
repository = suc.get_repository_in_tool_shed( self.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, repository_id )
|
||||
start_time = strftime( "%Y-%m-%d %H:%M:%S" )
|
||||
log.debug( "%s...resetting metadata on repository %s" % ( start_time, str( repository.name ) ) )
|
||||
results = handle_repository( trans, start_time, repository )
|
||||
@@ -708,7 +707,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
except Exception:
|
||||
raise MalformedId( 'The given id is invalid.' )
|
||||
|
||||
repository = suc.get_repository_in_tool_shed( self.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, id )
|
||||
if repository is None:
|
||||
raise ObjectNotFound( 'Unable to locate repository for the given id.' )
|
||||
repository_dict = repository.to_dict( view='element',
|
||||
@@ -720,9 +719,9 @@ class RepositoriesController( BaseAPIController ):
|
||||
|
||||
@expose_api_anonymous_and_sessionless
|
||||
def show_tools( self, trans, id, changeset, **kwd ):
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
id,
|
||||
changeset )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
id,
|
||||
changeset )
|
||||
if repository_metadata is not None:
|
||||
encoded_repository_metadata_id = trans.security.encode_id( repository_metadata.id )
|
||||
repository_metadata_dict = repository_metadata.to_dict( view='collection',
|
||||
@@ -770,9 +769,9 @@ class RepositoriesController( BaseAPIController ):
|
||||
raise MalformedId( 'The given id is invalid.' )
|
||||
recursive = util.asbool( kwd.get( 'recursive', 'True' ) )
|
||||
all_metadata = {}
|
||||
repository = suc.get_repository_in_tool_shed( self.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, id )
|
||||
for changeset, changehash in repository.installable_revisions( self.app ):
|
||||
metadata = suc.get_current_repository_metadata_for_changeset_revision( self.app, repository, changehash )
|
||||
metadata = metadata_util.get_current_repository_metadata_for_changeset_revision( self.app, repository, changehash )
|
||||
if metadata is None:
|
||||
continue
|
||||
metadata_dict = metadata.to_dict( value_mapper={ 'id': self.app.security.encode_id, 'repository_id': self.app.security.encode_id } )
|
||||
@@ -931,7 +930,7 @@ class RepositoriesController( BaseAPIController ):
|
||||
rdah = attribute_handlers.RepositoryDependencyAttributeHandler( self.app, unpopulate=False )
|
||||
tdah = attribute_handlers.ToolDependencyAttributeHandler( self.app, unpopulate=False )
|
||||
|
||||
repository = suc.get_repository_in_tool_shed( self.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, id )
|
||||
|
||||
if not ( trans.user_is_admin() or
|
||||
self.app.security_agent.user_can_administer_repository( trans.user, repository ) or
|
||||
|
||||
@@ -2,13 +2,13 @@ import logging
|
||||
|
||||
from sqlalchemy import and_
|
||||
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
from galaxy import util
|
||||
from galaxy import web
|
||||
from galaxy.web.base.controller import BaseAPIController, HTTPBadRequest
|
||||
from tool_shed.capsule import capsule_manager
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -47,7 +47,7 @@ class RepositoryRevisionsController( BaseAPIController ):
|
||||
# We'll currently support only gzip-compressed tar archives.
|
||||
export_repository_dependencies = util.asbool( export_repository_dependencies )
|
||||
# Get the repository information.
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
if repository is None:
|
||||
error_message = 'Cannot locate repository with name %s and owner %s,' % ( str( name ), str( owner ) )
|
||||
log.debug( error_message )
|
||||
@@ -131,13 +131,13 @@ class RepositoryRevisionsController( BaseAPIController ):
|
||||
rd_tups = metadata[ 'repository_dependencies' ][ 'repository_dependencies' ]
|
||||
for rd_tup in rd_tups:
|
||||
tool_shed, name, owner, changeset_revision = rd_tup[ 0:4 ]
|
||||
repository_dependency = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository_dependency = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
if repository_dependency is None:
|
||||
log.dbug( 'Cannot locate repository dependency %s owned by %s.' % ( name, owner ) )
|
||||
continue
|
||||
repository_dependency_id = trans.security.encode_id( repository_dependency.id )
|
||||
repository_dependency_repository_metadata = \
|
||||
suc.get_repository_metadata_by_changeset_revision( trans.app, repository_dependency_id, changeset_revision )
|
||||
metadata_util.get_repository_metadata_by_changeset_revision( trans.app, repository_dependency_id, changeset_revision )
|
||||
if repository_dependency_repository_metadata is None:
|
||||
# The changeset_revision column in the repository_metadata table has been updated with a new
|
||||
# value value, so find the changeset_revision to which we need to update.
|
||||
@@ -145,14 +145,14 @@ class RepositoryRevisionsController( BaseAPIController ):
|
||||
repository=repository_dependency,
|
||||
repo_path=None,
|
||||
create=False )
|
||||
new_changeset_revision = suc.get_next_downloadable_changeset_revision( repository_dependency,
|
||||
repo,
|
||||
changeset_revision )
|
||||
new_changeset_revision = metadata_util.get_next_downloadable_changeset_revision( repository_dependency,
|
||||
repo,
|
||||
changeset_revision )
|
||||
if new_changeset_revision != changeset_revision:
|
||||
repository_dependency_repository_metadata = \
|
||||
suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
repository_dependency_id,
|
||||
new_changeset_revision )
|
||||
metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
repository_dependency_id,
|
||||
new_changeset_revision )
|
||||
changeset_revision = new_changeset_revision
|
||||
else:
|
||||
decoded_repository_dependency_id = trans.security.decode_id( repository_dependency_id )
|
||||
|
||||
@@ -56,7 +56,7 @@ class AdminController( BaseUIController, Admin ):
|
||||
# The received id is the repository id, so we need to get the id of the user
|
||||
# that uploaded the repository.
|
||||
repository_id = kwd.get( 'id', None )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
kwd[ 'f-email' ] = repository.user.email
|
||||
elif operation == "repositories_by_category":
|
||||
# Eliminate the current filters if any exist.
|
||||
@@ -88,7 +88,7 @@ class AdminController( BaseUIController, Admin ):
|
||||
changeset_revision_str = 'changeset_revision_'
|
||||
if k.startswith( changeset_revision_str ):
|
||||
repository_id = trans.security.encode_id( int( k.lstrip( changeset_revision_str ) ) )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
if repository.tip( trans.app ) != v:
|
||||
return trans.response.send_redirect( web.url_for( controller='repository',
|
||||
action='browse_repositories',
|
||||
@@ -164,7 +164,7 @@ class AdminController( BaseUIController, Admin ):
|
||||
count = 0
|
||||
deleted_repositories = ""
|
||||
for repository_id in ids:
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
if repository:
|
||||
if not repository.deleted:
|
||||
# Mark all installable repository_metadata records as not installable.
|
||||
@@ -376,7 +376,7 @@ class AdminController( BaseUIController, Admin ):
|
||||
count = 0
|
||||
undeleted_repositories = ""
|
||||
for repository_id in ids:
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
if repository:
|
||||
if repository.deleted:
|
||||
# Inspect all repository_metadata records to determine those that are installable, and mark
|
||||
|
||||
@@ -3,7 +3,7 @@ from galaxy import web
|
||||
from galaxy.web.base.controller import BaseUIController
|
||||
|
||||
from tool_shed.util.common_util import generate_clone_url_for_repository_in_tool_shed
|
||||
from tool_shed.util.shed_util_common import get_repository_by_name_and_owner
|
||||
from tool_shed.util.repository_util import get_repository_by_name_and_owner
|
||||
from tool_shed.util.hg_util import update_repository
|
||||
from tool_shed.metadata import repository_metadata_manager
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
# We'll try to get the desired encoded repository id to pass on.
|
||||
try:
|
||||
repository_name = kwd[ 'id' ]
|
||||
repository = suc.get_repository_by_name( trans.app, repository_name )
|
||||
repository = repository_util.get_repository_by_name( trans.app, repository_name )
|
||||
kwd[ 'id' ] = trans.security.encode_id( repository.id )
|
||||
except:
|
||||
pass
|
||||
@@ -280,7 +280,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
# The received id is the repository id, so we need to get the id of the user that owns the repository.
|
||||
repository_id = kwd.get( 'id', None )
|
||||
if repository_id:
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
user_id = trans.security.encode_id( repository.user.id )
|
||||
kwd[ 'user_id' ] = user_id
|
||||
else:
|
||||
@@ -348,7 +348,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
# The received id is the repository id, so we need to get the id of the user that owns the repository.
|
||||
repository_id = kwd.get( 'id', None )
|
||||
if repository_id:
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
user_id = trans.security.encode_id( repository.user.id )
|
||||
user = suc.get_user( trans.app, user_id )
|
||||
self.repositories_by_user_grid.title = "Repositories owned by %s" % user.username
|
||||
@@ -413,7 +413,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
commit_message = escape( kwd.get( 'commit_message', 'Deleted selected files' ) )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
# Update repository files for browsing.
|
||||
hg_util.update_repository( repo )
|
||||
@@ -505,7 +505,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
# We'll try to get the desired encoded repository id to pass on.
|
||||
try:
|
||||
name = kwd[ 'id' ]
|
||||
repository = suc.get_repository_by_name( trans.app, name )
|
||||
repository = repository_util.get_repository_by_name( trans.app, name )
|
||||
kwd[ 'id' ] = trans.security.encode_id( repository.id )
|
||||
except:
|
||||
pass
|
||||
@@ -543,7 +543,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
if 'operation' in kwd:
|
||||
operation = kwd[ 'operation' ].lower()
|
||||
if operation == "preview_tools_in_changeset":
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository_metadata = metadata_util.get_latest_repository_metadata( trans.app, repository.id, downloadable=True )
|
||||
latest_installable_changeset_revision = repository_metadata.changeset_revision
|
||||
return trans.response.send_redirect( web.url_for( controller='repository',
|
||||
@@ -586,7 +586,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
# Default to the current changeset revision.
|
||||
update_to_ctx = hg_util.get_changectx_for_changeset( repo, changeset_revision )
|
||||
@@ -612,9 +612,9 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
return no_update
|
||||
# Return the same value for changeset_revision and latest_changeset_revision.
|
||||
else:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
# If changeset_revision is in the repository_metadata table for this repository, there are no
|
||||
# additional updates.
|
||||
@@ -635,9 +635,9 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
latest_changeset_revision = changeset_hash
|
||||
break
|
||||
else:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_hash )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_hash )
|
||||
if repository_metadata:
|
||||
# We found a RepositoryMetadata record.
|
||||
update_to_ctx = hg_util.get_changectx_for_changeset( repo, changeset_hash )
|
||||
@@ -662,7 +662,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def contact_owner( self, trans, id, **kwd ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
metadata = metadata_util.get_repository_metadata_by_repository_id_changeset_revision( trans.app,
|
||||
id,
|
||||
repository.tip( trans.app ),
|
||||
@@ -688,7 +688,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
if operation == "include in docker image":
|
||||
repository_tups = []
|
||||
for repository_id in repository_ids:
|
||||
repository = suc.get_repository_by_id( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_by_id( trans.app, repository_id )
|
||||
repository_tups.append( ( str( repository.name ),
|
||||
str( repository.user.username ),
|
||||
str( repository.type ) ) )
|
||||
@@ -709,7 +709,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
tool_shed_url = tool_shed_url = web.url_for( '/', qualified=True )
|
||||
repository_string = ''
|
||||
for repository_id in repository_ids:
|
||||
repository = suc.get_repository_by_id( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_by_id( trans.app, repository_id )
|
||||
template = basic_util.SELECTED_REPOSITORIES_TEMPLATE
|
||||
repository_template = \
|
||||
string.Template( template ).safe_substitute( tool_shed_url=tool_shed_url,
|
||||
@@ -801,7 +801,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository_id = kwd.get( 'id', None )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
mark_deprecated = util.string_as_bool( kwd.get( 'mark_deprecated', False ) )
|
||||
repository.deprecated = mark_deprecated
|
||||
trans.sa_session.add( repository )
|
||||
@@ -835,10 +835,10 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
repository_id = kwd.get( 'repository_id', None )
|
||||
relative_path_to_image_file = kwd.get( 'image_file', None )
|
||||
if repository_id and relative_path_to_image_file:
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
if repository:
|
||||
repo_files_dir = repository.repo_path( trans.app )
|
||||
path_to_file = suc.get_absolute_path_to_file_in_repository( repo_files_dir, relative_path_to_image_file )
|
||||
path_to_file = repository_util.get_absolute_path_to_file_in_repository( repo_files_dir, relative_path_to_image_file )
|
||||
if os.path.exists( path_to_file ):
|
||||
file_name = os.path.basename( relative_path_to_image_file )
|
||||
try:
|
||||
@@ -900,7 +900,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
"""Download an archive of the repository files compressed as zip, gz or bz2."""
|
||||
# FIXME: thgis will currently only download the repository tip, no matter which installable changeset_revision is being viewed.
|
||||
# This should be enhanced to use the export method below, which accounts for the currently viewed changeset_revision.
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
# Allow hgweb to handle the download. This requires the tool shed
|
||||
# server account's .hgrc file to include the following setting:
|
||||
# [web]
|
||||
@@ -919,7 +919,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
export_repository_dependencies = kwd.get( 'export_repository_dependencies', '' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
if kwd.get( 'export_repository_button', False ):
|
||||
# We'll currently support only gzip-compressed tar archives.
|
||||
export_repository_dependencies = CheckboxField.is_checked( export_repository_dependencies )
|
||||
@@ -945,7 +945,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
repositories_archive_path, file_name = os.path.split( repositories_archive.name )
|
||||
basic_util.remove_dir( repositories_archive_path )
|
||||
return opened_archive
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
metadata = repository_metadata.metadata
|
||||
toolshed_base_url = str( web.url_for( '/', qualified=True ) ).rstrip( '/' )
|
||||
# Initialize the repository dependency RelationBuilder.
|
||||
@@ -1007,7 +1007,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
# The received id is a RepositoryMetadata id, so we have to get the repository id.
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_id( trans.app, item_id )
|
||||
repository_id = trans.security.encode_id( repository_metadata.repository.id )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
kwd[ 'id' ] = repository_id
|
||||
kwd[ 'changeset_revision' ] = repository_metadata.changeset_revision
|
||||
if trans.webapp.name == 'tool_shed' and ( is_admin or repository.user == trans.user ):
|
||||
@@ -1098,7 +1098,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
# The received id is a RepositoryMetadata id, so we have to get the repository id.
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_id( trans.app, item_id )
|
||||
repository_id = trans.security.encode_id( repository_metadata.repository.id )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
kwd[ 'id' ] = repository_id
|
||||
kwd[ 'changeset_revision' ] = repository_metadata.changeset_revision
|
||||
if trans.webapp.name == 'tool_shed' and ( is_admin or repository.user == trans.user ):
|
||||
@@ -1205,7 +1205,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
repository_dependencies_dict = metadata.get( 'repository_dependencies', {} )
|
||||
repository_dependencies = repository_dependencies_dict.get( 'repository_dependencies', [] )
|
||||
has_repository_dependencies, has_repository_dependencies_only_if_compiling_contained_td = \
|
||||
suc.get_repository_dependency_types( repository_dependencies )
|
||||
repository_util.get_repository_dependency_types( repository_dependencies )
|
||||
has_galaxy_utilities_dict[ 'has_repository_dependencies' ] = has_repository_dependencies
|
||||
has_galaxy_utilities_dict[ 'has_repository_dependencies_only_if_compiling_contained_td' ] = \
|
||||
has_repository_dependencies_only_if_compiling_contained_td
|
||||
@@ -1215,8 +1215,8 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
has_galaxy_utilities_dict = has_galaxy_utilities( repository_metadata )
|
||||
@@ -1262,9 +1262,9 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
changeset_hash = str( repo.changectx( changeset ) )
|
||||
hg_util.get_changectx_for_changeset( repo, changeset_hash )
|
||||
if update_to_changeset_hash:
|
||||
update_to_repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_hash )
|
||||
update_to_repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_hash )
|
||||
if update_to_repository_metadata:
|
||||
has_galaxy_utilities_dict = has_galaxy_utilities( repository_metadata )
|
||||
includes_data_managers = has_galaxy_utilities_dict[ 'includes_data_managers' ]
|
||||
@@ -1305,7 +1305,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
repository_name = kwd[ 'name' ]
|
||||
repository_owner = kwd[ 'owner' ]
|
||||
changeset_revision = kwd[ 'changeset_revision' ]
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
ctx = hg_util.get_changectx_for_changeset( repo, changeset_revision )
|
||||
if ctx:
|
||||
@@ -1330,10 +1330,10 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
repository_name = kwd.get( 'name', None )
|
||||
repository_owner = kwd.get( 'owner', None )
|
||||
if repository_name is not None and repository_owner is not None:
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
if repository:
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
return suc.get_latest_downloadable_changeset_revision( trans.app, repository, repo )
|
||||
return metadata_util.get_latest_downloadable_changeset_revision( trans.app, repository, repo )
|
||||
return hg_util.INITIAL_CHANGELOG_HASH
|
||||
|
||||
@web.json
|
||||
@@ -1346,12 +1346,12 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
repository_owner = kwd.get( 'owner', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
if repository_name is not None and repository_owner is not None and changeset_revision is not None:
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
if repository:
|
||||
repository_metadata = \
|
||||
suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
metadata = repository_metadata.metadata
|
||||
if metadata:
|
||||
@@ -1370,7 +1370,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
# get_repository_dependencies( self, app, changeset, toolshed_url )
|
||||
dependencies = repository.get_repository_dependencies( trans.app, changeset_revision, web.url_for( '/', qualified=True ) )
|
||||
if dependencies:
|
||||
@@ -1382,7 +1382,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
"""Given a repository name and owner, return the encoded repository id."""
|
||||
repository_name = kwd[ 'name' ]
|
||||
repository_owner = kwd[ 'owner' ]
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
if repository:
|
||||
return trans.security.encode_id( repository.id )
|
||||
return ''
|
||||
@@ -1427,7 +1427,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
"""Given a repository name and owner, return the type."""
|
||||
repository_name = kwd[ 'name' ]
|
||||
repository_owner = kwd[ 'owner' ]
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
return str( repository.type )
|
||||
|
||||
@web.json
|
||||
@@ -1448,7 +1448,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
for required_repository_tup in decoded_required_repository_tups:
|
||||
tool_shed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \
|
||||
common_util.parse_repository_dependency_tuple( required_repository_tup )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
encoded_repository_ids.append( trans.security.encode_id( repository.id ) )
|
||||
changeset_revisions.append( changeset_revision )
|
||||
if encoded_repository_ids and changeset_revisions:
|
||||
@@ -1464,7 +1464,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
dependencies = repository.get_tool_dependencies( changeset_revision )
|
||||
if dependencies is not None:
|
||||
return encoding_util.tool_shed_encode( dependencies )
|
||||
@@ -1478,7 +1478,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
"""
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
# TODO: We're currently returning the tool_dependencies.xml file that is available on disk. We need
|
||||
# to enhance this process to retrieve older versions of the tool-dependencies.xml file from the repository
|
||||
# manafest.
|
||||
@@ -1501,12 +1501,12 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
"""
|
||||
repository_name = kwd[ 'name' ]
|
||||
repository_owner = kwd[ 'owner' ]
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, repository_name, repository_owner )
|
||||
encoded_id = trans.app.security.encode_id( repository.id )
|
||||
repository_tip = repository.tip( trans.app )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
encoded_id,
|
||||
repository_tip )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
encoded_id,
|
||||
repository_tip )
|
||||
return repository_metadata.metadata
|
||||
|
||||
@web.expose
|
||||
@@ -1518,14 +1518,14 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd[ 'name' ]
|
||||
owner = kwd[ 'owner' ]
|
||||
changeset_revision = kwd[ 'changeset_revision' ]
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
tool_version_dicts = []
|
||||
for changeset in repo.changelog:
|
||||
current_changeset_revision = str( repo.changectx( changeset ) )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
current_changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
current_changeset_revision )
|
||||
if repository_metadata and repository_metadata.tool_versions:
|
||||
tool_version_dicts.append( repository_metadata.tool_versions )
|
||||
if current_changeset_revision == changeset_revision:
|
||||
@@ -1540,18 +1540,18 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
Generate a dictionary that contains the information about a repository that is necessary for installing
|
||||
it into a local Galaxy instance.
|
||||
"""
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository_id = trans.security.encode_id( repository.id )
|
||||
repository_clone_url = common_util.generate_clone_url_for_repository_in_tool_shed( trans.user, repository )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
if not repository_metadata:
|
||||
# The received changeset_revision is no longer associated with metadata, so get the next changeset_revision in the repository
|
||||
# changelog that is associated with metadata.
|
||||
changeset_revision = suc.get_next_downloadable_changeset_revision( repository,
|
||||
repo,
|
||||
after_changeset_revision=changeset_revision )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
changeset_revision = metadata_util.get_next_downloadable_changeset_revision( repository,
|
||||
repo,
|
||||
after_changeset_revision=changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
ctx = hg_util.get_changectx_for_changeset( repo, changeset_revision )
|
||||
repo_info_dict = repository_util.create_repo_info_dict( app=trans.app,
|
||||
repository_clone_url=repository_clone_url,
|
||||
@@ -1592,13 +1592,13 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
includes_tool_dependencies = False
|
||||
for name, repo_info_tuple in repo_info_dict.items():
|
||||
if not has_repository_dependencies or not has_repository_dependencies_only_if_compiling_contained_td or not includes_tool_dependencies:
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
description, reposectory_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies = \
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
for rd_key, rd_tups in repository_dependencies.items():
|
||||
if rd_key in [ 'root_key', 'description' ]:
|
||||
continue
|
||||
curr_has_repository_dependencies, curr_has_repository_dependencies_only_if_compiling_contained_td = \
|
||||
suc.get_repository_dependency_types( rd_tups )
|
||||
repository_util.get_repository_dependency_types( rd_tups )
|
||||
if curr_has_repository_dependencies and not has_repository_dependencies:
|
||||
has_repository_dependencies = True
|
||||
if curr_has_repository_dependencies_only_if_compiling_contained_td and not has_repository_dependencies_only_if_compiling_contained_td:
|
||||
@@ -1726,7 +1726,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
if not repository_ids:
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository_ids = trans.security.encode_id( repository.id )
|
||||
galaxy_url = common_util.handle_galaxy_url( trans, **kwd )
|
||||
if galaxy_url:
|
||||
@@ -1832,13 +1832,13 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def manage_repository( self, trans, id, **kwd ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
repository_type = kwd.get( 'repository_type', str( repository.type ) )
|
||||
repo_dir = repository.repo_path( trans.app )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=None, repo_path=repo_dir, create=False )
|
||||
repo_name = kwd.get( 'repo_name', repository.name )
|
||||
changeset_revision = kwd.get( 'changeset_revision', repository.tip( trans.app ) )
|
||||
repository.share_url = suc.generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=changeset_revision )
|
||||
repository.share_url = repository_util.generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=changeset_revision )
|
||||
repository.clone_url = common_util.generate_clone_url_for_repository_in_tool_shed( trans.user, repository )
|
||||
remote_repository_url = kwd.get( 'remote_repository_url', repository.remote_repository_url )
|
||||
homepage_url = kwd.get( 'homepage_url', repository.homepage_url )
|
||||
@@ -1939,7 +1939,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
is_malicious = False
|
||||
repository_dependencies = None
|
||||
if changeset_revision != hg_util.INITIAL_CHANGELOG_HASH:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, id, changeset_revision )
|
||||
if repository_metadata:
|
||||
revision_label = hg_util.get_revision_label( trans.app, repository, changeset_revision, include_date=False )
|
||||
metadata = repository_metadata.metadata
|
||||
@@ -1950,7 +1950,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
previous_changeset_revision = \
|
||||
metadata_util.get_previous_metadata_changeset_revision( repository, repo, changeset_revision, downloadable=False )
|
||||
if previous_changeset_revision != hg_util.INITIAL_CHANGELOG_HASH:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, id, previous_changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, id, previous_changeset_revision )
|
||||
if repository_metadata:
|
||||
revision_label = hg_util.get_revision_label( trans.app, repository, previous_changeset_revision, include_date=False )
|
||||
metadata = repository_metadata.metadata
|
||||
@@ -2037,11 +2037,11 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def manage_repository_admins( self, trans, id, **kwd ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
changeset_revision = kwd.get( 'changeset_revision', repository.tip( trans.app ) )
|
||||
metadata = None
|
||||
if changeset_revision != hg_util.INITIAL_CHANGELOG_HASH:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, id, changeset_revision )
|
||||
if repository_metadata:
|
||||
metadata = repository_metadata.metadata
|
||||
else:
|
||||
@@ -2054,9 +2054,9 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
changeset_revision,
|
||||
downloadable=False )
|
||||
if previous_changeset_revision != hg_util.INITIAL_CHANGELOG_HASH:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
id,
|
||||
previous_changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
id,
|
||||
previous_changeset_revision )
|
||||
if repository_metadata:
|
||||
metadata = repository_metadata.metadata
|
||||
role = repository.admin_role
|
||||
@@ -2123,10 +2123,10 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
# Get the next installable changeset_revision beyond the received changeset_revision.
|
||||
next_changeset_revision = suc.get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
next_changeset_revision = metadata_util.get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
if next_changeset_revision and next_changeset_revision != changeset_revision:
|
||||
return next_changeset_revision
|
||||
return ''
|
||||
@@ -2143,9 +2143,9 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def preview_tools_in_changeset( self, trans, repository_id, **kwd ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
changeset_revision = kwd.get( 'changeset_revision', repository.tip( trans.app ) )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
if repository_metadata:
|
||||
repository_metadata_id = trans.security.encode_id( repository_metadata.id ),
|
||||
metadata = repository_metadata.metadata
|
||||
@@ -2219,7 +2219,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
if name is not None and owner is not None:
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
from_tip = util.string_as_bool( from_tip )
|
||||
if from_tip:
|
||||
changeset_revision = repository.tip( trans.app )
|
||||
@@ -2255,7 +2255,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
action='browse_repositories',
|
||||
message='Select a repository to rate',
|
||||
status='error' ) )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
changeset_revision = repository.tip( trans.app )
|
||||
if repository.user == trans.user:
|
||||
return trans.response.send_redirect( web.url_for( controller='repository',
|
||||
@@ -2291,7 +2291,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def reset_all_metadata( self, trans, id, **kwd ):
|
||||
"""Reset all metadata on the complete changelog for a single repository in the tool shed."""
|
||||
# This method is called only from the ~/templates/webapps/tool_shed/repository/manage_repository.mako template.
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
rmm = repository_metadata_manager.RepositoryMetadataManager( app=trans.app,
|
||||
user=trans.user,
|
||||
repository=repository,
|
||||
@@ -2336,7 +2336,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
commit_message = escape( kwd.get( 'commit_message', 'Deleted selected files' ) )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
repo_dir = repository.repo_path( trans.app )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=None, repo_path=repo_dir, create=False )
|
||||
selected_files_to_delete = kwd.get( 'selected_files_to_delete', '' )
|
||||
@@ -2414,7 +2414,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
|
||||
@web.expose
|
||||
def send_to_owner( self, trans, id, message='' ):
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
if not message:
|
||||
message = 'Enter a message'
|
||||
status = 'error'
|
||||
@@ -2464,7 +2464,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
total_alerts_removed = 0
|
||||
flush_needed = False
|
||||
for repository_id in repository_ids:
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
if repository.email_alerts:
|
||||
email_alerts = json.loads( repository.email_alerts )
|
||||
else:
|
||||
@@ -2496,7 +2496,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def set_malicious( self, trans, id, ctx_str, **kwd ):
|
||||
malicious = kwd.get( 'malicious', '' )
|
||||
if kwd.get( 'malicious_button', False ):
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, id, ctx_str )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, id, ctx_str )
|
||||
malicious_checked = CheckboxField.is_checked( malicious )
|
||||
repository_metadata.malicious = malicious_checked
|
||||
trans.sa_session.add( repository_metadata )
|
||||
@@ -2518,7 +2518,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def sharable_owner( self, trans, owner ):
|
||||
"""Support for sharable URL for each repository owner's tools, e.g. http://example.org/view/owner."""
|
||||
try:
|
||||
user = suc.get_user_by_username( trans, owner )
|
||||
user = common_util.get_user_by_username( trans, owner )
|
||||
except:
|
||||
user = None
|
||||
if user:
|
||||
@@ -2534,7 +2534,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def sharable_repository( self, trans, owner, name ):
|
||||
"""Support for sharable URL for a specified repository, e.g. http://example.org/view/owner/name."""
|
||||
try:
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
except:
|
||||
repository = None
|
||||
if repository:
|
||||
@@ -2545,7 +2545,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
else:
|
||||
# If the owner is valid, then show all of their repositories.
|
||||
try:
|
||||
user = suc.get_user_by_username( trans, owner )
|
||||
user = common_util.get_user_by_username( trans, owner )
|
||||
except:
|
||||
user = None
|
||||
if user:
|
||||
@@ -2564,7 +2564,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def sharable_repository_revision( self, trans, owner, name, changeset_revision ):
|
||||
"""Support for sharable URL for a specified repository revision, e.g. http://example.org/view/owner/name/changeset_revision."""
|
||||
try:
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
except:
|
||||
repository = None
|
||||
if repository:
|
||||
@@ -2575,7 +2575,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
if not repository_metadata:
|
||||
# Get updates to the received changeset_revision if any exist.
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
upper_bound_changeset_revision = suc.get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
upper_bound_changeset_revision = metadata_util.get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
if upper_bound_changeset_revision and upper_bound_changeset_revision != changeset_revision:
|
||||
changeset_revision = upper_bound_changeset_revision
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_repository_id_changeset_revision( trans.app,
|
||||
@@ -2610,11 +2610,11 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
name = kwd.get( 'name', None )
|
||||
owner = kwd.get( 'owner', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
if repository:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
tool_shed_status_dict = {}
|
||||
# Handle repository deprecation.
|
||||
@@ -2623,7 +2623,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
if changeset_revision == repository.tip( trans.app ):
|
||||
tool_shed_status_dict[ 'latest_installable_revision' ] = 'True'
|
||||
else:
|
||||
next_installable_revision = suc.get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
next_installable_revision = metadata_util.get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
if repository_metadata is None:
|
||||
if next_installable_revision and next_installable_revision != changeset_revision:
|
||||
tool_shed_status_dict[ 'latest_installable_revision' ] = 'True'
|
||||
@@ -2643,7 +2643,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
else:
|
||||
tool_shed_status_dict[ 'revision_update' ] = 'False'
|
||||
# Handle revision upgrades.
|
||||
metadata_revisions = [ revision[ 1 ] for revision in suc.get_metadata_revisions( repository, repo ) ]
|
||||
metadata_revisions = [ revision[ 1 ] for revision in metadata_util.get_metadata_revisions( repository, repo ) ]
|
||||
num_metadata_revisions = len( metadata_revisions )
|
||||
for index, metadata_revision in enumerate( metadata_revisions ):
|
||||
if index == num_metadata_revisions:
|
||||
@@ -2673,7 +2673,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
owner = kwd.get( 'owner', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
if name and owner and changeset_revision:
|
||||
return suc.get_updated_changeset_revisions( trans.app, name, owner, changeset_revision )
|
||||
return metadata_util.get_updated_changeset_revisions( trans.app, name, owner, changeset_revision )
|
||||
return ''
|
||||
|
||||
@web.expose
|
||||
@@ -2710,12 +2710,12 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def view_changelog( self, trans, id, **kwd ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
changesets = []
|
||||
for changeset in repo.changelog:
|
||||
ctx = repo.changectx( changeset )
|
||||
if suc.get_repository_metadata_by_changeset_revision( trans.app, id, str( ctx ) ):
|
||||
if metadata_util.get_repository_metadata_by_changeset_revision( trans.app, id, str( ctx ) ):
|
||||
has_metadata = True
|
||||
else:
|
||||
has_metadata = False
|
||||
@@ -2745,7 +2745,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def view_changeset( self, trans, id, ctx_str, **kwd ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
ctx = hg_util.get_changectx_for_changeset( repo, ctx_str )
|
||||
if ctx is None:
|
||||
@@ -2818,7 +2818,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def view_or_manage_repository( self, trans, **kwd ):
|
||||
repository_id = kwd.get( 'id', None )
|
||||
if repository_id:
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
user = trans.user
|
||||
if repository:
|
||||
if user is not None and ( trans.user_is_admin() or
|
||||
@@ -2837,11 +2837,11 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
def view_repository( self, trans, id, **kwd ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, id )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
avg_rating, num_ratings = self.get_ave_item_rating_data( trans.sa_session, repository, webapp_model=trans.model )
|
||||
changeset_revision = kwd.get( 'changeset_revision', repository.tip( trans.app ) )
|
||||
repository.share_url = suc.generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=changeset_revision )
|
||||
repository.share_url = repository_util.generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=changeset_revision )
|
||||
repository.clone_url = common_util.generate_clone_url_for_repository_in_tool_shed( trans.user, repository )
|
||||
display_reviews = kwd.get( 'display_reviews', False )
|
||||
alerts = kwd.get( 'alerts', '' )
|
||||
@@ -2875,7 +2875,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
add_id_to_name=False,
|
||||
downloadable=False )
|
||||
revision_label = hg_util.get_revision_label( trans.app, repository, changeset_revision, include_date=False )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, id, changeset_revision )
|
||||
if repository_metadata:
|
||||
metadata = repository_metadata.metadata
|
||||
# Get a dictionary of all repositories upon which the contents of the current repository_metadata record depend.
|
||||
@@ -2928,7 +2928,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
render_repository_actions_for = kwd.get( 'render_repository_actions_for', 'tool_shed' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repo_files_dir = repository.repo_path( trans.app )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=None, repo_path=repo_files_dir, create=False )
|
||||
tool_metadata_dict = {}
|
||||
@@ -2937,7 +2937,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
guid = None
|
||||
original_tool_data_path = trans.app.config.tool_data_path
|
||||
revision_label = hg_util.get_revision_label( trans.app, repository, changeset_revision, include_date=False )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
if repository_metadata:
|
||||
repository_metadata_id = trans.security.encode_id( repository_metadata.id )
|
||||
metadata = repository_metadata.metadata
|
||||
@@ -3012,7 +3012,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
if workflow_name:
|
||||
workflow_name = encoding_util.tool_shed_decode( workflow_name )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_id( trans.app, repository_metadata_id )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, trans.security.encode_id( repository_metadata.repository_id ) )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, trans.security.encode_id( repository_metadata.repository_id ) )
|
||||
changeset_revision = repository_metadata.changeset_revision
|
||||
metadata = repository_metadata.metadata
|
||||
return trans.fill_template( "/webapps/tool_shed/repository/view_workflow.mako",
|
||||
|
||||
@@ -12,6 +12,8 @@ from galaxy.web.form_builder import CheckboxField
|
||||
from galaxy.webapps.tool_shed.util import ratings_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import review_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util.container_util import STRSEP
|
||||
from tool_shed.util.web_util import escape
|
||||
@@ -139,7 +141,7 @@ class RepositoryReviewController( BaseUIController, ratings_util.ItemRatings ):
|
||||
if repository_id:
|
||||
if changeset_revision:
|
||||
# Make sure there is not already a review of the revision by the user.
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
if review_util.get_review_by_repository_id_changeset_revision_user_id( app=trans.app,
|
||||
repository_id=repository_id,
|
||||
changeset_revision=changeset_revision,
|
||||
@@ -156,7 +158,7 @@ class RepositoryReviewController( BaseUIController, ratings_util.ItemRatings ):
|
||||
**kwd ) )
|
||||
# A review can be initially performed only on an installable revision of a repository, so make sure we have metadata associated
|
||||
# with the received changeset_revision.
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
if repository_metadata:
|
||||
metadata = repository_metadata.metadata
|
||||
if metadata:
|
||||
@@ -489,7 +491,7 @@ class RepositoryReviewController( BaseUIController, ratings_util.ItemRatings ):
|
||||
changeset_revision )
|
||||
# Determine if the current user can add a review to this revision.
|
||||
can_add_review = trans.user not in [ repository_review.user for repository_review in repository_reviews ]
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, repository_id, changeset_revision )
|
||||
if repository_metadata:
|
||||
repository_metadata_reviews = util.listify( repository_metadata.reviews )
|
||||
else:
|
||||
@@ -520,7 +522,7 @@ class RepositoryReviewController( BaseUIController, ratings_util.ItemRatings ):
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository_id = kwd.get( 'id', None )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
installable = changeset_revision in [ metadata_revision.changeset_revision for metadata_revision in repository.metadata_revisions ]
|
||||
rev, changeset_revision_label = hg_util.get_rev_label_from_changeset_revision( repo, changeset_revision )
|
||||
@@ -582,7 +584,7 @@ class RepositoryReviewController( BaseUIController, ratings_util.ItemRatings ):
|
||||
# The value of the received id is the encoded repository id.
|
||||
message = escape( kwd.get( 'message', '' ) )
|
||||
status = kwd.get( 'status', 'done' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, kwd[ 'id' ] )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, kwd[ 'id' ] )
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
previous_reviews_dict = review_util.get_previous_repository_reviews( trans.app,
|
||||
@@ -600,7 +602,7 @@ class RepositoryReviewController( BaseUIController, ratings_util.ItemRatings ):
|
||||
@web.expose
|
||||
@web.require_login( "view or manage repository" )
|
||||
def view_or_manage_repository( self, trans, **kwd ):
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, kwd[ 'id' ] )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, kwd[ 'id' ] )
|
||||
if trans.user_is_admin() or repository.user == trans.user:
|
||||
return trans.response.send_redirect( web.url_for( controller='repository',
|
||||
action='manage_repository',
|
||||
|
||||
@@ -20,6 +20,7 @@ from tool_shed.tools import data_table_manager
|
||||
from tool_shed.util import basic_util
|
||||
from tool_shed.util import commit_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import repository_content_util
|
||||
from tool_shed.util import xml_util
|
||||
@@ -38,7 +39,7 @@ class UploadController( BaseUIController ):
|
||||
status = kwd.get( 'status', 'done' )
|
||||
commit_message = escape( kwd.get( 'commit_message', 'Uploaded' ) )
|
||||
repository_id = kwd.get( 'repository_id', '' )
|
||||
repository = suc.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( trans.app, repository_id )
|
||||
repo_dir = repository.repo_path( trans.app )
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=None, repo_path=repo_dir, create=False )
|
||||
uncompress_file = util.string_as_bool( kwd.get( 'uncompress_file', 'true' ) )
|
||||
|
||||
@@ -10,7 +10,7 @@ from galaxy.util.hash_util import new_secure_hash
|
||||
from galaxy.util.dictifiable import Dictifiable
|
||||
import tool_shed.repository_types.util as rt_util
|
||||
from tool_shed.dependencies.repository import relation_builder
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import metadata_util
|
||||
|
||||
from mercurial import hg
|
||||
from mercurial import ui
|
||||
@@ -230,9 +230,9 @@ class Repository( object, Dictifiable ):
|
||||
# have repository dependencies. However, if a readme file is uploaded, or some other change
|
||||
# is made that does not create a new downloadable changeset revision but updates the existing
|
||||
# one, we still want to be able to get repository dependencies.
|
||||
repository_metadata = suc.get_current_repository_metadata_for_changeset_revision( app,
|
||||
self,
|
||||
changeset )
|
||||
repository_metadata = metadata_util.get_current_repository_metadata_for_changeset_revision( app,
|
||||
self,
|
||||
changeset )
|
||||
if repository_metadata:
|
||||
metadata = repository_metadata.metadata
|
||||
if metadata:
|
||||
@@ -252,9 +252,9 @@ class Repository( object, Dictifiable ):
|
||||
return []
|
||||
|
||||
def installable_revisions( self, app, sort_revisions=True ):
|
||||
return suc.get_metadata_revisions( self,
|
||||
hg.repository( ui.ui(), self.repo_path( app ) ),
|
||||
sort_revisions=sort_revisions )
|
||||
return metadata_util.get_metadata_revisions( self,
|
||||
hg.repository( ui.ui(), self.repo_path( app ) ),
|
||||
sort_revisions=sort_revisions )
|
||||
|
||||
def is_new( self, app ):
|
||||
repo = hg.repository( ui.ui(), self.repo_path( app ) )
|
||||
|
||||
@@ -27,6 +27,7 @@ from tool_shed.util import commit_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import encoding_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import xml_util
|
||||
@@ -68,9 +69,9 @@ class ExportRepositoryManager( object ):
|
||||
ordered_changeset_revisions = []
|
||||
if self.repository:
|
||||
repository_metadata = \
|
||||
suc.get_current_repository_metadata_for_changeset_revision( self.app,
|
||||
self.repository,
|
||||
self.changeset_revision )
|
||||
metadata_util.get_current_repository_metadata_for_changeset_revision( self.app,
|
||||
self.repository,
|
||||
self.changeset_revision )
|
||||
if repository_metadata:
|
||||
ordered_repository_ids = [ self.repository_id ]
|
||||
ordered_repositories = [ self.repository ]
|
||||
@@ -214,11 +215,11 @@ class ExportRepositoryManager( object ):
|
||||
# There should only be one entry in the received repo_info_dict.
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, \
|
||||
repository_owner, repository_dependencies, tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tup )
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, repository_name, repository_owner )
|
||||
repository_metadata = suc.get_current_repository_metadata_for_changeset_revision( self.app,
|
||||
repository,
|
||||
changeset_revision )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tup )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app, repository_name, repository_owner )
|
||||
repository_metadata = metadata_util.get_current_repository_metadata_for_changeset_revision( self.app,
|
||||
repository,
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
return repository, repository_metadata.changeset_revision
|
||||
return None, None
|
||||
@@ -242,10 +243,10 @@ class ExportRepositoryManager( object ):
|
||||
associated with self.repository_id.
|
||||
"""
|
||||
rdim = RepositoryDependencyInstallManager( self.app )
|
||||
repository = suc.get_repository_in_tool_shed( self.app, self.repository_id )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
self.repository_id,
|
||||
self.changeset_revision )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, self.repository_id )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
self.repository_id,
|
||||
self.changeset_revision )
|
||||
# Get a dictionary of all repositories upon which the contents of the current
|
||||
# repository_metadata record depend.
|
||||
toolshed_base_url = str( web.url_for( '/', qualified=True ) ).rstrip( '/' )
|
||||
@@ -305,8 +306,8 @@ class ExportRepositoryManager( object ):
|
||||
description, repository_clone_url, changeset_revision, \
|
||||
ctx_rev, repository_owner, repository_dependencies, \
|
||||
tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tup )
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, repository_name, repository_owner )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tup )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app, repository_name, repository_owner )
|
||||
repository_ids.append( self.app.security.encode_id( repository.id ) )
|
||||
return repository_ids
|
||||
|
||||
@@ -328,9 +329,9 @@ class ExportRepositoryManager( object ):
|
||||
# Create a dictionary whose keys are the received repository_ids and whose values are a list of
|
||||
# repository_ids, each of which is contained in the received list of repository_ids and whose associated
|
||||
# repository must be imported prior to the repository associated with the repository_id key.
|
||||
prior_import_required_dict = suc.get_prior_import_or_install_required_dict( self.app,
|
||||
repository_ids,
|
||||
repo_info_dicts )
|
||||
prior_import_required_dict = repository_util.get_prior_import_or_install_required_dict( self.app,
|
||||
repository_ids,
|
||||
repo_info_dicts )
|
||||
processed_repository_ids = []
|
||||
# Process the list of repository dependencies defined for the primary exported repository.
|
||||
while len( processed_repository_ids ) != len( prior_import_required_dict.keys() ):
|
||||
@@ -403,13 +404,13 @@ class ImportRepositoryManager( object ):
|
||||
ok, name_owner, message = import_results_tup
|
||||
name, owner = name_owner
|
||||
if not ok:
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
if repository is not None:
|
||||
# Do not allow the repository to be automatically installed if population resulted in errors.
|
||||
tip_changeset_revision = repository.tip( self.app )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
self.app.security.encode_id( repository.id ),
|
||||
tip_changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
self.app.security.encode_id( repository.id ),
|
||||
tip_changeset_revision )
|
||||
if repository_metadata:
|
||||
if repository_metadata.downloadable:
|
||||
repository_metadata.downloadable = False
|
||||
@@ -451,7 +452,7 @@ class ImportRepositoryManager( object ):
|
||||
long_description = repository_archive_dict.get( 'long_description', '' )
|
||||
# The owner entry in the repository_archive_dict is the public username of the user associated with
|
||||
# the exported repository archive.
|
||||
user = suc.get_user_by_username( self.app, username )
|
||||
user = common_util.get_user_by_username( self.app, username )
|
||||
if user is None:
|
||||
ok = False
|
||||
results_message += 'Import failed: repository owner <b>%s</b> does not have an account in this Tool Shed.' % \
|
||||
@@ -595,15 +596,15 @@ class ImportRepositoryManager( object ):
|
||||
if defined_repository_metadata is None:
|
||||
# The defined changeset_revision is not associated with a repository_metadata
|
||||
# record, so updates must be necessary.
|
||||
defined_repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
defined_repository = repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
defined_repo = hg_util.get_repo_for_repository( self.app,
|
||||
repository=defined_repository,
|
||||
repo_path=None,
|
||||
create=False )
|
||||
updated_changeset_revision = \
|
||||
suc.get_next_downloadable_changeset_revision( defined_repository,
|
||||
defined_repo,
|
||||
changeset_revision )
|
||||
metadata_util.get_next_downloadable_changeset_revision( defined_repository,
|
||||
defined_repo,
|
||||
changeset_revision )
|
||||
if updated_changeset_revision == rm_changeset_revision and updated_changeset_revision != changeset_revision:
|
||||
dependent_downloadable_revisions.append( downloadable_revision )
|
||||
return dependent_downloadable_revisions
|
||||
@@ -691,9 +692,9 @@ class ImportRepositoryManager( object ):
|
||||
"""
|
||||
repository_status_info_dicts = []
|
||||
for repository_info_dict in repository_info_dicts:
|
||||
repository = suc.get_repository_by_name_and_owner( self.app,
|
||||
repository_info_dict[ 'name' ],
|
||||
repository_info_dict[ 'owner' ] )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app,
|
||||
repository_info_dict[ 'name' ],
|
||||
repository_info_dict[ 'owner' ] )
|
||||
if repository:
|
||||
if repository.deleted:
|
||||
repository_info_dict[ 'status' ] = 'Exists, deleted'
|
||||
|
||||
@@ -9,7 +9,8 @@ from tool_shed.dependencies.tool import tag_attribute_handler
|
||||
from tool_shed.repository_types.util import REPOSITORY_DEPENDENCY_DEFINITION_FILENAME
|
||||
from tool_shed.repository_types.util import TOOL_DEPENDENCY_DEFINITION_FILENAME
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import xml_util
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -106,14 +107,14 @@ class RepositoryDependencyAttributeHandler( object ):
|
||||
# Populate the changeset_revision attribute with the latest installable metadata revision for
|
||||
# the defined repository. We use the latest installable revision instead of the latest metadata
|
||||
# revision to ensure that the contents of the revision are valid.
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
repository = repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
if repository:
|
||||
repo = hg_util.get_repo_for_repository( self.app,
|
||||
repository=repository,
|
||||
repo_path=None,
|
||||
create=False )
|
||||
lastest_installable_changeset_revision = \
|
||||
suc.get_latest_downloadable_changeset_revision( self.app, repository, repo )
|
||||
metadata_util.get_latest_downloadable_changeset_revision( self.app, repository, repo )
|
||||
if lastest_installable_changeset_revision != hg_util.INITIAL_CHANGELOG_HASH:
|
||||
elem.attrib[ 'changeset_revision' ] = lastest_installable_changeset_revision
|
||||
altered = True
|
||||
|
||||
@@ -2,6 +2,7 @@ import logging
|
||||
|
||||
from galaxy.util import asbool, listify
|
||||
|
||||
import tool_shed.util.repository_util
|
||||
from tool_shed.util import common_util, container_util, hg_util, metadata_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
|
||||
@@ -80,10 +81,10 @@ class RelationBuilder( object ):
|
||||
current_changeset_revision = str( self.repository_metadata.changeset_revision )
|
||||
# Get the changeset revision to which the current value of required_repository_changeset_revision
|
||||
# should be updated if it's not current.
|
||||
text = suc.get_updated_changeset_revisions( self.app,
|
||||
name=str( self.repository.name ),
|
||||
owner=str( self.repository.user.username ),
|
||||
changeset_revision=current_changeset_revision )
|
||||
text = metadata_util.get_updated_changeset_revisions( self.app,
|
||||
name=str( self.repository.name ),
|
||||
owner=str( self.repository.user.username ),
|
||||
changeset_revision=current_changeset_revision )
|
||||
if text:
|
||||
valid_changeset_revisions = listify( text )
|
||||
if current_changeset_revision not in valid_changeset_revisions:
|
||||
@@ -181,7 +182,7 @@ class RelationBuilder( object ):
|
||||
rd_only_if_compiling_contained_td = \
|
||||
common_util.parse_repository_dependency_tuple( repository_dependency )
|
||||
if suc.tool_shed_is_this_tool_shed( rd_toolshed ):
|
||||
repository = suc.get_repository_by_name_and_owner( self.app, rd_name, rd_owner )
|
||||
repository = tool_shed.util.repository_util.get_repository_by_name_and_owner( self.app, rd_name, rd_owner )
|
||||
if repository:
|
||||
repository_id = self.app.security.encode_id( repository.id )
|
||||
repository_metadata = \
|
||||
@@ -196,7 +197,7 @@ class RelationBuilder( object ):
|
||||
else:
|
||||
# The repository changeset_revision is no longer installable, so see if there's been an update.
|
||||
repo = hg_util.get_repo_for_repository( self.app, repository=repository, repo_path=None, create=False )
|
||||
changeset_revision = suc.get_next_downloadable_changeset_revision( repository, repo, rd_changeset_revision )
|
||||
changeset_revision = metadata_util.get_next_downloadable_changeset_revision( repository, repo, rd_changeset_revision )
|
||||
if changeset_revision != rd_changeset_revision:
|
||||
repository_metadata = \
|
||||
metadata_util.get_repository_metadata_by_repository_id_changeset_revision( self.app,
|
||||
@@ -215,7 +216,7 @@ class RelationBuilder( object ):
|
||||
updated_key_rd_dicts.append( new_key_rd_dict )
|
||||
else:
|
||||
repository_components_tuple = container_util.get_components_from_key( key )
|
||||
components_list = suc.extract_components_from_tuple( repository_components_tuple )
|
||||
components_list = tool_shed.util.repository_util.extract_components_from_tuple( repository_components_tuple )
|
||||
toolshed, repository_name, repository_owner, repository_changeset_revision = components_list[ 0:4 ]
|
||||
# For backward compatibility to the 12/20/12 Galaxy release.
|
||||
if len( components_list ) in (4, 5):
|
||||
@@ -226,7 +227,7 @@ class RelationBuilder( object ):
|
||||
log.debug( message )
|
||||
else:
|
||||
repository_components_tuple = container_util.get_components_from_key( key )
|
||||
components_list = suc.extract_components_from_tuple( repository_components_tuple )
|
||||
components_list = tool_shed.util.repository_util.extract_components_from_tuple( repository_components_tuple )
|
||||
toolshed, repository_name, repository_owner, repository_changeset_revision = components_list[ 0:4 ]
|
||||
message = "The revision %s defined for repository %s owned by %s is invalid, so repository " % \
|
||||
( str( rd_changeset_revision ), str( rd_name ), str( rd_owner ) )
|
||||
@@ -260,7 +261,7 @@ class RelationBuilder( object ):
|
||||
toolshed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \
|
||||
common_util.parse_repository_dependency_tuple( repository_dependency )
|
||||
if suc.tool_shed_is_this_tool_shed( toolshed ):
|
||||
required_repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
required_repository = tool_shed.util.repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
self.repository = required_repository
|
||||
repository_id = self.app.security.encode_id( required_repository.id )
|
||||
required_repository_metadata = \
|
||||
|
||||
@@ -5,8 +5,11 @@ import threading
|
||||
|
||||
from galaxy import util
|
||||
from tool_shed.galaxy_install.utility_containers import GalaxyUtilityContainerManager
|
||||
from tool_shed.util import common_util, container_util, readme_util
|
||||
from tool_shed.util import shed_util_common as suc, tool_dependency_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import container_util
|
||||
from tool_shed.util import readme_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import tool_dependency_util
|
||||
from tool_shed.utility_containers import utility_container_manager
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -286,7 +289,7 @@ class DependencyDisplayer( object ):
|
||||
folder_id += 1
|
||||
repository_components_tuple = \
|
||||
container_util.get_components_from_key( old_container_repository_dependencies_folder.key )
|
||||
components_list = suc.extract_components_from_tuple( repository_components_tuple )
|
||||
components_list = repository_util.extract_components_from_tuple( repository_components_tuple )
|
||||
name = components_list[ 1 ]
|
||||
# Generate the label by retrieving the repository name.
|
||||
old_container_repository_dependencies_folder.label = str( name )
|
||||
@@ -553,17 +556,17 @@ class DependencyDisplayer( object ):
|
||||
description, repository_clone_url, changeset_revision, \
|
||||
ctx_rev, repository_owner, repository_dependencies, \
|
||||
tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
if tool_dependencies:
|
||||
# Add the install_dir attribute to the tool_dependencies.
|
||||
tool_dependencies = self.add_installation_directories_to_tool_dependencies( tool_dependencies )
|
||||
# The required_repository may have been installed with a different changeset revision.
|
||||
required_repository, installed_changeset_revision = \
|
||||
suc.repository_was_previously_installed( self.app,
|
||||
tool_shed_url,
|
||||
name,
|
||||
repo_info_tuple,
|
||||
from_tip=False )
|
||||
repository_util.repository_was_previously_installed( self.app,
|
||||
tool_shed_url,
|
||||
name,
|
||||
repo_info_tuple,
|
||||
from_tip=False )
|
||||
if required_repository:
|
||||
required_repository_installed_tool_dependencies, required_repository_missing_tool_dependencies = \
|
||||
self.get_installed_and_missing_tool_dependencies_for_installed_repository( required_repository,
|
||||
|
||||
@@ -2,12 +2,12 @@ import logging
|
||||
|
||||
from sqlalchemy import false, or_
|
||||
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
from galaxy import util
|
||||
from galaxy.model import tool_shed_install
|
||||
from galaxy.web import url_for
|
||||
from galaxy.web.framework.helpers import iff, grids
|
||||
from tool_shed.util import tool_dependency_util
|
||||
from tool_shed.util import repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -104,7 +104,7 @@ class InstalledRepositoryGrid( grids.Grid ):
|
||||
class StatusColumn( grids.TextColumn ):
|
||||
|
||||
def get_value( self, trans, grid, tool_shed_repository ):
|
||||
return suc.get_tool_shed_repository_status_label( trans.app, tool_shed_repository )
|
||||
return repository_util.get_tool_shed_repository_status_label( trans.app, tool_shed_repository )
|
||||
|
||||
class ToolShedColumn( grids.TextColumn ):
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ from six import string_types
|
||||
from sqlalchemy import or_
|
||||
|
||||
from galaxy import exceptions, util
|
||||
from tool_shed.util import basic_util, common_util, encoding_util, hg_util
|
||||
from tool_shed.util import basic_util, common_util, encoding_util, hg_util, repository_util
|
||||
from tool_shed.util import shed_util_common as suc, tool_dependency_util
|
||||
from tool_shed.util import tool_util, xml_util
|
||||
|
||||
@@ -517,7 +517,7 @@ class InstallRepositoryManager( object ):
|
||||
irmm_metadata_dict = irmm.get_metadata_dict()
|
||||
tool_shed_repository.metadata = irmm_metadata_dict
|
||||
# Update the tool_shed_repository.tool_shed_status column in the database.
|
||||
tool_shed_status_dict = suc.get_tool_shed_status_for_installed_repository( self.app, tool_shed_repository )
|
||||
tool_shed_status_dict = repository_util.get_tool_shed_status_for_installed_repository( self.app, tool_shed_repository )
|
||||
if tool_shed_status_dict:
|
||||
tool_shed_repository.tool_shed_status = tool_shed_status_dict
|
||||
self.install_model.context.add( tool_shed_repository )
|
||||
@@ -864,8 +864,8 @@ class InstallRepositoryManager( object ):
|
||||
self.install_model.ToolShedRepository.installation_status.CLONING )
|
||||
repo_info_tuple = repo_info_dict[ tool_shed_repository.name ]
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies = repo_info_tuple
|
||||
relative_clone_dir = suc.generate_tool_shed_repository_install_dir( repository_clone_url,
|
||||
tool_shed_repository.installed_changeset_revision )
|
||||
relative_clone_dir = repository_util.generate_tool_shed_repository_install_dir( repository_clone_url,
|
||||
tool_shed_repository.installed_changeset_revision )
|
||||
relative_install_dir = os.path.join( relative_clone_dir, tool_shed_repository.name )
|
||||
install_dir = os.path.join( tool_path, relative_install_dir )
|
||||
cloned_ok, error_message = hg_util.clone_repository( repository_clone_url, os.path.abspath( install_dir ), ctx_rev )
|
||||
@@ -927,13 +927,13 @@ class InstallRepositoryManager( object ):
|
||||
self.app.installed_repository_manager.handle_repository_install( tool_shed_repository )
|
||||
else:
|
||||
# An error occurred while cloning the repository, so reset everything necessary to enable another attempt.
|
||||
suc.set_repository_attributes( self.app,
|
||||
tool_shed_repository,
|
||||
status=self.install_model.ToolShedRepository.installation_status.ERROR,
|
||||
error_message=error_message,
|
||||
deleted=False,
|
||||
uninstalled=False,
|
||||
remove_from_disk=True )
|
||||
repository_util.set_repository_attributes( self.app,
|
||||
tool_shed_repository,
|
||||
status=self.install_model.ToolShedRepository.installation_status.ERROR,
|
||||
error_message=error_message,
|
||||
deleted=False,
|
||||
uninstalled=False,
|
||||
remove_from_disk=True )
|
||||
|
||||
def order_components_for_installation( self, tsr_ids, repo_info_dicts, tool_panel_section_keys ):
|
||||
"""
|
||||
@@ -952,9 +952,9 @@ class InstallRepositoryManager( object ):
|
||||
# Create a dictionary whose keys are the received tsr_ids and whose values are a list of
|
||||
# tsr_ids, each of which is contained in the received list of tsr_ids and whose associated
|
||||
# repository must be installed prior to the repository associated with the tsr_id key.
|
||||
prior_install_required_dict = suc.get_prior_import_or_install_required_dict( self.app,
|
||||
tsr_ids,
|
||||
repo_info_dicts )
|
||||
prior_install_required_dict = repository_util.get_prior_import_or_install_required_dict( self.app,
|
||||
tsr_ids,
|
||||
repo_info_dicts )
|
||||
processed_tsr_ids = []
|
||||
while len( processed_tsr_ids ) != len( prior_install_required_dict.keys() ):
|
||||
tsr_id = suc.get_next_prior_import_or_install_required_dict_entry( prior_install_required_dict,
|
||||
|
||||
@@ -10,6 +10,7 @@ from sqlalchemy import and_, false, true
|
||||
from galaxy import util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import container_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import tool_dependency_util
|
||||
from tool_shed.util import xml_util
|
||||
@@ -244,7 +245,7 @@ class InstalledRepositoryManager( object ):
|
||||
name = repo_info_dict.keys()[ 0 ]
|
||||
repo_info_tuple = repo_info_dict[ name ]
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
if tool_dependencies:
|
||||
if not includes_tool_dependencies:
|
||||
includes_tool_dependencies = True
|
||||
@@ -256,11 +257,11 @@ class InstalledRepositoryManager( object ):
|
||||
if repository_dependencies:
|
||||
# We have a repository with one or more defined repository dependencies.
|
||||
if not repository:
|
||||
repository = suc.get_repository_for_dependency_relationship( self.app,
|
||||
tool_shed_url,
|
||||
name,
|
||||
repository_owner,
|
||||
changeset_revision )
|
||||
repository = repository_util.get_repository_for_dependency_relationship( self.app,
|
||||
tool_shed_url,
|
||||
name,
|
||||
repository_owner,
|
||||
changeset_revision )
|
||||
if not updating and repository and repository.metadata:
|
||||
installed_rd, missing_rd = self.get_installed_and_missing_repository_dependencies( repository )
|
||||
else:
|
||||
@@ -282,7 +283,7 @@ class InstalledRepositoryManager( object ):
|
||||
for name, repo_info_tuple in rid.items():
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, \
|
||||
repository_owner, rid_repository_dependencies, rid_tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
if rid_tool_dependencies:
|
||||
for td_key, td_dict in rid_tool_dependencies.items():
|
||||
if td_key not in required_tool_dependencies:
|
||||
@@ -403,7 +404,7 @@ class InstalledRepositoryManager( object ):
|
||||
missing_rd_tups = []
|
||||
installed_rd_tups = []
|
||||
( description, repository_clone_url, changeset_revision, ctx_rev,
|
||||
repository_owner, repository_dependencies, tool_dependencies ) = suc.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
repository_owner, repository_dependencies, tool_dependencies ) = repository_util.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
if repository_dependencies:
|
||||
description = repository_dependencies[ 'description' ]
|
||||
root_key = repository_dependencies[ 'root_key' ]
|
||||
@@ -422,11 +423,11 @@ class InstalledRepositoryManager( object ):
|
||||
# repository_dependencies, installed_td )
|
||||
tmp_clone_url = common_util.generate_clone_url_from_repo_info_tup( self.app, rd_tup )
|
||||
tmp_repo_info_tuple = ( None, tmp_clone_url, changeset_revision, None, owner, None, None )
|
||||
repository, installed_changeset_revision = suc.repository_was_previously_installed( self.app,
|
||||
tool_shed,
|
||||
name,
|
||||
tmp_repo_info_tuple,
|
||||
from_tip=False )
|
||||
repository, installed_changeset_revision = repository_util.repository_was_previously_installed( self.app,
|
||||
tool_shed,
|
||||
name,
|
||||
tmp_repo_info_tuple,
|
||||
from_tip=False )
|
||||
if repository:
|
||||
new_rd_tup = [ tool_shed,
|
||||
name,
|
||||
|
||||
@@ -10,7 +10,6 @@ from tool_shed.galaxy_install.tools import tool_panel_manager
|
||||
from tool_shed.metadata import metadata_generator
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import tool_util
|
||||
from tool_shed.util import xml_util
|
||||
|
||||
@@ -162,7 +161,7 @@ class InstalledRepositoryMetadataManager( metadata_generator.MetadataGenerator )
|
||||
owner = self.repository.owner
|
||||
if not owner:
|
||||
cleaned_repository_clone_url = common_util.remove_protocol_and_user_from_clone_url( clone_url )
|
||||
owner = suc.get_repository_owner( cleaned_repository_clone_url )
|
||||
owner = repository_util.get_repository_owner( cleaned_repository_clone_url )
|
||||
guid_to_tool_elem_dict = {}
|
||||
for tool_config_filename, guid, tool in repository_tools_tups:
|
||||
guid_to_tool_elem_dict[ guid ] = self.tpm.generate_tool_elem( tool_shed,
|
||||
|
||||
@@ -30,22 +30,22 @@ class RepairRepositoryManager():
|
||||
# rd_key is something like: 'http://localhost:9009__ESEP__package_rdkit_2012_12__ESEP__test__ESEP__d635ffb9c665__ESEP__True'
|
||||
# rd_val is something like: [['http://localhost:9009', 'package_numpy_1_7', 'test', 'cddd64ecd985', 'True']]
|
||||
repository_components_tuple = container_util.get_components_from_key( rd_key )
|
||||
components_list = suc.extract_components_from_tuple( repository_components_tuple )
|
||||
components_list = repository_util.extract_components_from_tuple( repository_components_tuple )
|
||||
tool_shed, name, owner, changeset_revision = components_list[ 0:4 ]
|
||||
installed_repository = suc.get_installed_repository( self.app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
installed_repository = repository_util.get_installed_repository( self.app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
if ( installed_repository ) and ( installed_repository not in installed_repositories ):
|
||||
installed_repositories.append( installed_repository )
|
||||
for rd_val in rd_vals:
|
||||
tool_shed, name, owner, changeset_revision = rd_val[ 0:4 ]
|
||||
installed_repository = suc.get_installed_repository( self.app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
installed_repository = repository_util.get_installed_repository( self.app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
if ( installed_repository ) and ( installed_repository not in installed_repositories ):
|
||||
installed_repositories.append( installed_repository )
|
||||
return installed_repositories
|
||||
@@ -180,13 +180,13 @@ class RepairRepositoryManager():
|
||||
else:
|
||||
# The tools will be loaded outside of any sections in the tool panel.
|
||||
tool_panel_section_key = None
|
||||
suc.set_repository_attributes( self.app,
|
||||
repository,
|
||||
status=self.app.install_model.ToolShedRepository.installation_status.NEW,
|
||||
error_message=None,
|
||||
deleted=False,
|
||||
uninstalled=False,
|
||||
remove_from_disk=True )
|
||||
repository_util.set_repository_attributes( self.app,
|
||||
repository,
|
||||
status=self.app.install_model.ToolShedRepository.installation_status.NEW,
|
||||
error_message=None,
|
||||
deleted=False,
|
||||
uninstalled=False,
|
||||
remove_from_disk=True )
|
||||
irm = install_manager.InstallRepositoryManager( self.app, tpm )
|
||||
irm.install_tool_shed_repository( repository,
|
||||
repo_info_dict,
|
||||
|
||||
+32
-31
@@ -15,6 +15,7 @@ from tool_shed.galaxy_install.tools import tool_panel_manager
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import container_util
|
||||
from tool_shed.util import encoding_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -44,14 +45,14 @@ class RepositoryDependencyInstallManager( object ):
|
||||
repository_owner, \
|
||||
repository_dependencies, \
|
||||
tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
if repository_dependencies:
|
||||
for key, val in repository_dependencies.items():
|
||||
if key in [ 'root_key', 'description' ]:
|
||||
continue
|
||||
d_repository = None
|
||||
repository_components_tuple = container_util.get_components_from_key( key )
|
||||
components_list = suc.extract_components_from_tuple( repository_components_tuple )
|
||||
components_list = repository_util.extract_components_from_tuple( repository_components_tuple )
|
||||
d_toolshed, d_name, d_owner, d_changeset_revision = components_list[ 0:4 ]
|
||||
for tsr in tool_shed_repositories:
|
||||
# Get the the tool_shed_repository defined by name, owner and changeset_revision. This is
|
||||
@@ -165,10 +166,10 @@ class RepositoryDependencyInstallManager( object ):
|
||||
repository_owner, \
|
||||
repository_dependencies, \
|
||||
tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
# See if the repository has an existing record in the database.
|
||||
repository_db_record, installed_changeset_revision = \
|
||||
suc.repository_was_previously_installed( self.app, tool_shed_url, name, repo_info_tuple, from_tip=False )
|
||||
repository_util.repository_was_previously_installed( self.app, tool_shed_url, name, repo_info_tuple, from_tip=False )
|
||||
if repository_db_record:
|
||||
if repository_db_record.status in [ install_model.ToolShedRepository.installation_status.INSTALLED,
|
||||
install_model.ToolShedRepository.installation_status.CLONING,
|
||||
@@ -199,7 +200,7 @@ class RepositoryDependencyInstallManager( object ):
|
||||
# No additional updates to the database record are necessary.
|
||||
can_update_db_record = False
|
||||
elif repository_db_record.status not in [ install_model.ToolShedRepository.installation_status.NEW ]:
|
||||
# Set changeset_revision here so suc.create_or_update_tool_shed_repository will find
|
||||
# Set changeset_revision here so repository_util.create_or_update_tool_shed_repository will find
|
||||
# the previously installed and uninstalled repository instead of creating a new record.
|
||||
changeset_revision = repository_db_record.installed_changeset_revision
|
||||
self.reset_previously_installed_repository( repository_db_record )
|
||||
@@ -226,17 +227,17 @@ class RepositoryDependencyInstallManager( object ):
|
||||
tool_panel_section_id=tool_panel_section_id,
|
||||
new_tool_panel_section_label=new_tool_panel_section_label )
|
||||
tool_shed_repository = \
|
||||
suc.create_or_update_tool_shed_repository( app=self.app,
|
||||
name=name,
|
||||
description=description,
|
||||
installed_changeset_revision=installed_changeset_revision,
|
||||
ctx_rev=ctx_rev,
|
||||
repository_clone_url=repository_clone_url,
|
||||
metadata_dict={},
|
||||
status=install_model.ToolShedRepository.installation_status.NEW,
|
||||
current_changeset_revision=changeset_revision,
|
||||
owner=repository_owner,
|
||||
dist_to_shed=False )
|
||||
repository_util.create_or_update_tool_shed_repository( app=self.app,
|
||||
name=name,
|
||||
description=description,
|
||||
installed_changeset_revision=installed_changeset_revision,
|
||||
ctx_rev=ctx_rev,
|
||||
repository_clone_url=repository_clone_url,
|
||||
metadata_dict={},
|
||||
status=install_model.ToolShedRepository.installation_status.NEW,
|
||||
current_changeset_revision=changeset_revision,
|
||||
owner=repository_owner,
|
||||
dist_to_shed=False )
|
||||
if tool_shed_repository not in all_created_or_updated_tool_shed_repositories:
|
||||
all_created_or_updated_tool_shed_repositories.append( tool_shed_repository )
|
||||
# Only append the tool shed repository to the list of created_or_updated_tool_shed_repositories if
|
||||
@@ -262,22 +263,22 @@ class RepositoryDependencyInstallManager( object ):
|
||||
# We store the port in the database.
|
||||
tool_shed = common_util.remove_protocol_from_tool_shed_url( tool_shed )
|
||||
# This method is used only in Galaxy, not the tool shed.
|
||||
repository = suc.get_repository_for_dependency_relationship( self.app, tool_shed, name, owner, changeset_revision )
|
||||
repository = repository_util.get_repository_for_dependency_relationship( self.app, tool_shed, name, owner, changeset_revision )
|
||||
if not repository:
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( self.app, tool_shed )
|
||||
repository_clone_url = os.path.join( tool_shed_url, 'repos', owner, name )
|
||||
ctx_rev = suc.get_ctx_rev( self.app, tool_shed_url, name, owner, changeset_revision )
|
||||
repository = suc.create_or_update_tool_shed_repository( app=self.app,
|
||||
name=name,
|
||||
description=None,
|
||||
installed_changeset_revision=changeset_revision,
|
||||
ctx_rev=ctx_rev,
|
||||
repository_clone_url=repository_clone_url,
|
||||
metadata_dict={},
|
||||
status=install_model.ToolShedRepository.installation_status.NEW,
|
||||
current_changeset_revision=None,
|
||||
owner=owner,
|
||||
dist_to_shed=False )
|
||||
repository = repository_util.create_or_update_tool_shed_repository( app=self.app,
|
||||
name=name,
|
||||
description=None,
|
||||
installed_changeset_revision=changeset_revision,
|
||||
ctx_rev=ctx_rev,
|
||||
repository_clone_url=repository_clone_url,
|
||||
metadata_dict={},
|
||||
status=install_model.ToolShedRepository.installation_status.NEW,
|
||||
current_changeset_revision=None,
|
||||
owner=owner,
|
||||
dist_to_shed=False )
|
||||
return repository
|
||||
|
||||
def get_repository_dependencies_for_installed_tool_shed_repository( self, app, repository ):
|
||||
@@ -331,13 +332,13 @@ class RepositoryDependencyInstallManager( object ):
|
||||
repository_owner, \
|
||||
repository_dependencies, \
|
||||
tool_dependencies = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tup )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tup )
|
||||
if repository_dependencies:
|
||||
for key, val in repository_dependencies.items():
|
||||
if key in [ 'root_key', 'description' ]:
|
||||
continue
|
||||
repository_components_tuple = container_util.get_components_from_key( key )
|
||||
components_list = suc.extract_components_from_tuple( repository_components_tuple )
|
||||
components_list = repository_util.extract_components_from_tuple( repository_components_tuple )
|
||||
# Skip listing a repository dependency if it is required only to compile a tool dependency
|
||||
# defined for the dependent repository since in this case, the repository dependency is really
|
||||
# a dependency of the dependent repository's contained tool dependency, and only if that
|
||||
@@ -374,7 +375,7 @@ class RepositoryDependencyInstallManager( object ):
|
||||
encoded_required_repository_tups.append( encoding_util.encoding_sep.join( required_repository_tup ) )
|
||||
encoded_required_repository_str = encoding_util.encoding_sep2.join( encoded_required_repository_tups )
|
||||
encoded_required_repository_str = encoding_util.tool_shed_encode( encoded_required_repository_str )
|
||||
if suc.is_tool_shed_client( self.app ):
|
||||
if repository_util.is_tool_shed_client( self.app ):
|
||||
# Handle secure / insecure Tool Shed URL protocol changes and port changes.
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( self.app, tool_shed_url )
|
||||
pathspec = [ 'repository', 'get_required_repo_info_dict' ]
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import logging
|
||||
import os
|
||||
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -67,11 +67,11 @@ class EnvManager( object ):
|
||||
if toolshed and repository_name and repository_owner and changeset_revision:
|
||||
# The protocol is not stored, but the port is if it exists.
|
||||
toolshed = common_util.remove_protocol_from_tool_shed_url( toolshed )
|
||||
repository = suc.get_repository_for_dependency_relationship( self.app,
|
||||
toolshed,
|
||||
repository_name,
|
||||
repository_owner,
|
||||
changeset_revision )
|
||||
repository = repository_util.get_repository_for_dependency_relationship( self.app,
|
||||
toolshed,
|
||||
repository_name,
|
||||
repository_owner,
|
||||
changeset_revision )
|
||||
if repository:
|
||||
for sub_elem in elem:
|
||||
tool_dependency_type = sub_elem.tag
|
||||
|
||||
@@ -6,7 +6,8 @@ from galaxy.tools.deps.resolvers import INDETERMINATE_DEPENDENCY
|
||||
from galaxy.util import listify, url_get
|
||||
from tool_shed.util import basic_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import tool_dependency_util
|
||||
from tool_shed.util import xml_util
|
||||
|
||||
@@ -372,10 +373,10 @@ class Repository( RecipeTag, SyncDatabase ):
|
||||
required_repository_name = elem.attrib[ 'name' ]
|
||||
required_repository_owner = elem.attrib[ 'owner' ]
|
||||
default_required_repository_changeset_revision = elem.attrib[ 'changeset_revision' ]
|
||||
required_repository = suc.get_repository_for_dependency_relationship( self.app, tool_shed_url,
|
||||
required_repository_name,
|
||||
required_repository_owner,
|
||||
default_required_repository_changeset_revision )
|
||||
required_repository = repository_util.get_repository_for_dependency_relationship( self.app, tool_shed_url,
|
||||
required_repository_name,
|
||||
required_repository_owner,
|
||||
default_required_repository_changeset_revision )
|
||||
tool_shed = common_util.remove_protocol_from_tool_shed_url( tool_shed_url )
|
||||
tmp_filename = None
|
||||
if required_repository:
|
||||
@@ -436,7 +437,7 @@ class Repository( RecipeTag, SyncDatabase ):
|
||||
message = "Unable to locate the repository directory for revision %s of installed repository %s owned by %s." % \
|
||||
( str( required_repository.changeset_revision ), str( required_repository.name ), str( required_repository.owner ) )
|
||||
raise Exception( message )
|
||||
tool_dependencies_config = suc.get_absolute_path_to_file_in_repository( repo_files_dir, 'tool_dependencies.xml' )
|
||||
tool_dependencies_config = repository_util.get_absolute_path_to_file_in_repository( repo_files_dir, 'tool_dependencies.xml' )
|
||||
if tool_dependencies_config:
|
||||
config_to_use = tool_dependencies_config
|
||||
else:
|
||||
@@ -446,11 +447,11 @@ class Repository( RecipeTag, SyncDatabase ):
|
||||
else:
|
||||
# Make a call to the tool shed to get the changeset revision to which the current value of required_repository_changeset_revision
|
||||
# should be updated if it's not current.
|
||||
text = suc.get_updated_changeset_revisions_from_tool_shed( app=self.app,
|
||||
tool_shed_url=tool_shed,
|
||||
name=required_repository_name,
|
||||
owner=required_repository_owner,
|
||||
changeset_revision=required_repository_changeset_revision )
|
||||
text = metadata_util.get_updated_changeset_revisions_from_tool_shed( app=self.app,
|
||||
tool_shed_url=tool_shed,
|
||||
name=required_repository_name,
|
||||
owner=required_repository_owner,
|
||||
changeset_revision=required_repository_changeset_revision )
|
||||
if text:
|
||||
updated_changeset_revisions = listify( text )
|
||||
# The list of changeset revisions is in reverse order, so the newest will be first.
|
||||
|
||||
@@ -25,6 +25,7 @@ from tool_shed.tools import tool_version_manager
|
||||
from tool_shed.util import basic_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import tool_dependency_util
|
||||
from tool_shed.util import tool_util
|
||||
@@ -173,17 +174,17 @@ class ToolMigrationManager( object ):
|
||||
if not self.__iscloned( clone_dir ):
|
||||
repository_clone_url = os.path.join( self.tool_shed_url, 'repos', owner, name )
|
||||
ctx_rev = suc.get_ctx_rev( self.app, self.tool_shed_url, name, owner, changeset_revision )
|
||||
tool_shed_repository = suc.create_or_update_tool_shed_repository( app=self.app,
|
||||
name=name,
|
||||
description=description,
|
||||
installed_changeset_revision=changeset_revision,
|
||||
ctx_rev=ctx_rev,
|
||||
repository_clone_url=repository_clone_url,
|
||||
metadata_dict={},
|
||||
status=self.app.install_model.ToolShedRepository.installation_status.NEW,
|
||||
current_changeset_revision=None,
|
||||
owner=self.repository_owner,
|
||||
dist_to_shed=True )
|
||||
tool_shed_repository = repository_util.create_or_update_tool_shed_repository( app=self.app,
|
||||
name=name,
|
||||
description=description,
|
||||
installed_changeset_revision=changeset_revision,
|
||||
ctx_rev=ctx_rev,
|
||||
repository_clone_url=repository_clone_url,
|
||||
metadata_dict={},
|
||||
status=self.app.install_model.ToolShedRepository.installation_status.NEW,
|
||||
current_changeset_revision=None,
|
||||
owner=self.repository_owner,
|
||||
dist_to_shed=True )
|
||||
return tool_shed_repository
|
||||
return None
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ from xml.etree import ElementTree as XmlET
|
||||
|
||||
from tool_shed.util import basic_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import xml_util
|
||||
|
||||
@@ -220,7 +221,7 @@ class ToolPanelManager( object ):
|
||||
tool_elem = None
|
||||
cleaned_repository_clone_url = common_util.remove_protocol_and_user_from_clone_url( repository_clone_url )
|
||||
if not owner:
|
||||
owner = suc.get_repository_owner( cleaned_repository_clone_url )
|
||||
owner = repository_util.get_repository_owner( cleaned_repository_clone_url )
|
||||
tool_shed = cleaned_repository_clone_url.split( '/repos/' )[ 0 ].rstrip( '/' )
|
||||
for guid, tool_section_dicts in tool_panel_dict.items():
|
||||
for tool_section_dict in tool_section_dicts:
|
||||
|
||||
@@ -9,6 +9,7 @@ from sqlalchemy import false
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import encoding_util
|
||||
from tool_shed.util import repository_util
|
||||
from galaxy import util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -84,7 +85,7 @@ class UpdateRepositoryManager( object ):
|
||||
# has been deprecated in the Tool Shed.
|
||||
for repository in self.context.query( self.app.install_model.ToolShedRepository ) \
|
||||
.filter( self.app.install_model.ToolShedRepository.table.c.deleted == false() ):
|
||||
tool_shed_status_dict = suc.get_tool_shed_status_for_installed_repository( self.app, repository )
|
||||
tool_shed_status_dict = repository_util.get_tool_shed_status_for_installed_repository( self.app, repository )
|
||||
if tool_shed_status_dict:
|
||||
if tool_shed_status_dict != repository.tool_shed_status:
|
||||
repository.tool_shed_status = tool_shed_status_dict
|
||||
@@ -115,7 +116,7 @@ class UpdateRepositoryManager( object ):
|
||||
repository.changeset_revision = updated_changeset_revision
|
||||
repository.ctx_rev = updated_ctx_rev
|
||||
# Update the repository.tool_shed_status column in the database.
|
||||
tool_shed_status_dict = suc.get_tool_shed_status_for_installed_repository( self.app, repository )
|
||||
tool_shed_status_dict = repository_util.get_tool_shed_status_for_installed_repository( self.app, repository )
|
||||
if tool_shed_status_dict:
|
||||
repository.tool_shed_status = tool_shed_status_dict
|
||||
else:
|
||||
|
||||
@@ -9,7 +9,7 @@ import tool_shed.repository_types.util as rt_util
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
from galaxy.web.framework.helpers import grids
|
||||
from galaxy.webapps.tool_shed import model
|
||||
from tool_shed.util import hg_util, metadata_util
|
||||
from tool_shed.util import hg_util, metadata_util, repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -1007,7 +1007,7 @@ class RepositoryDependenciesGrid( RepositoryMetadataGrid ):
|
||||
for rd_tup in sorted_rd_tups:
|
||||
name, owner, changeset_revision = rd_tup[1:4]
|
||||
rd_line = ''
|
||||
required_repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
required_repository = repository_util.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
if required_repository and not required_repository.deleted:
|
||||
required_repository_id = trans.security.encode_id( required_repository.id )
|
||||
required_repository_metadata = \
|
||||
@@ -1020,9 +1020,9 @@ class RepositoryDependenciesGrid( RepositoryMetadataGrid ):
|
||||
repo_path=None,
|
||||
create=False )
|
||||
updated_changeset_revision = \
|
||||
suc.get_next_downloadable_changeset_revision( required_repository,
|
||||
repo,
|
||||
changeset_revision )
|
||||
metadata_util.get_next_downloadable_changeset_revision( required_repository,
|
||||
repo,
|
||||
changeset_revision )
|
||||
required_repository_metadata = \
|
||||
metadata_util.get_repository_metadata_by_repository_id_changeset_revision( trans.app,
|
||||
required_repository_id,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import logging
|
||||
|
||||
from galaxy.web.form_builder import SelectField
|
||||
from tool_shed.util import hg_util, metadata_util, shed_util_common as suc
|
||||
from tool_shed.util import hg_util, metadata_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -118,7 +118,7 @@ def get_latest_downloadable_repository_metadata( trans, repository ):
|
||||
tip_ctx = str( repo.changectx( repo.changelog.tip() ) )
|
||||
repository_metadata = None
|
||||
try:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, encoded_repository_id, tip_ctx )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, encoded_repository_id, tip_ctx )
|
||||
if repository_metadata is not None and repository_metadata.downloadable:
|
||||
return repository_metadata
|
||||
return None
|
||||
@@ -129,9 +129,9 @@ def get_latest_downloadable_repository_metadata( trans, repository ):
|
||||
downloadable=True )
|
||||
if latest_downloadable_revision == hg_util.INITIAL_CHANGELOG_HASH:
|
||||
return None
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
encoded_repository_id,
|
||||
latest_downloadable_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
encoded_repository_id,
|
||||
latest_downloadable_revision )
|
||||
if repository_metadata is not None and repository_metadata.downloadable:
|
||||
return repository_metadata
|
||||
return None
|
||||
@@ -159,7 +159,7 @@ def get_latest_repository_metadata( trans, repository ):
|
||||
repo = hg_util.get_repo_for_repository( trans.app, repository=repository, repo_path=None, create=False )
|
||||
tip_ctx = str( repo.changectx( repo.changelog.tip() ) )
|
||||
try:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, encoded_repository_id, tip_ctx )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app, encoded_repository_id, tip_ctx )
|
||||
return repository_metadata
|
||||
except:
|
||||
latest_downloadable_revision = metadata_util.get_previous_metadata_changeset_revision( repository,
|
||||
@@ -168,9 +168,9 @@ def get_latest_repository_metadata( trans, repository ):
|
||||
downloadable=False )
|
||||
if latest_downloadable_revision == hg_util.INITIAL_CHANGELOG_HASH:
|
||||
return None
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
encoded_repository_id,
|
||||
latest_downloadable_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
encoded_repository_id,
|
||||
latest_downloadable_revision )
|
||||
return repository_metadata
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ from tool_shed.util import basic_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import readme_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import tool_dependency_util
|
||||
from tool_shed.util import tool_util
|
||||
@@ -903,30 +905,30 @@ class MetadataGenerator( object ):
|
||||
# the changeset_revision defined in the repository_elem (it may be outdated). If
|
||||
# we're successful in locating an installed repository with the attributes defined
|
||||
# in the repository_elem, we know it is valid.
|
||||
repository = suc.get_repository_for_dependency_relationship( self.app,
|
||||
toolshed,
|
||||
name,
|
||||
owner,
|
||||
changeset_revision )
|
||||
repository = repository_util.get_repository_for_dependency_relationship( self.app,
|
||||
toolshed,
|
||||
name,
|
||||
owner,
|
||||
changeset_revision )
|
||||
if repository:
|
||||
return repository_dependency_tup, is_valid, error_message
|
||||
else:
|
||||
# Send a request to the tool shed to retrieve appropriate additional changeset
|
||||
# revisions with which the repository
|
||||
# may have been installed.
|
||||
text = suc.get_updated_changeset_revisions_from_tool_shed( self.app,
|
||||
toolshed,
|
||||
name,
|
||||
owner,
|
||||
changeset_revision )
|
||||
if text:
|
||||
updated_changeset_revisions = util.listify( text )
|
||||
for updated_changeset_revision in updated_changeset_revisions:
|
||||
repository = suc.get_repository_for_dependency_relationship( self.app,
|
||||
text = metadata_util.get_updated_changeset_revisions_from_tool_shed( self.app,
|
||||
toolshed,
|
||||
name,
|
||||
owner,
|
||||
updated_changeset_revision )
|
||||
changeset_revision )
|
||||
if text:
|
||||
updated_changeset_revisions = util.listify( text )
|
||||
for updated_changeset_revision in updated_changeset_revisions:
|
||||
repository = repository_util.get_repository_for_dependency_relationship( self.app,
|
||||
toolshed,
|
||||
name,
|
||||
owner,
|
||||
updated_changeset_revision )
|
||||
if repository:
|
||||
return repository_dependency_tup, is_valid, error_message
|
||||
if self.updating_installed_repository:
|
||||
|
||||
@@ -14,6 +14,7 @@ from tool_shed.util import basic_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import tool_util
|
||||
|
||||
@@ -340,7 +341,7 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
repository_dependencies_dict = metadata_dict.get( 'repository_dependencies', {} )
|
||||
repository_dependencies = repository_dependencies_dict.get( 'repository_dependencies', [] )
|
||||
has_repository_dependencies, has_repository_dependencies_only_if_compiling_contained_td = \
|
||||
suc.get_repository_dependency_types( repository_dependencies )
|
||||
repository_util.get_repository_dependency_types( repository_dependencies )
|
||||
if 'datatypes' in metadata_dict:
|
||||
includes_datatypes = True
|
||||
if 'tools' in metadata_dict:
|
||||
@@ -356,9 +357,9 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
downloadable = True
|
||||
else:
|
||||
downloadable = False
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
self.app.security.encode_id( self.repository.id ),
|
||||
changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
self.app.security.encode_id( self.repository.id ),
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
repository_metadata.metadata = metadata_dict
|
||||
repository_metadata.downloadable = downloadable
|
||||
@@ -400,7 +401,7 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
cleaned_tool_shed = common_util.remove_protocol_from_tool_shed_url( tool_shed )
|
||||
if cleaned_rd_tool_shed == cleaned_tool_shed and rd_name == name and rd_owner == owner:
|
||||
# Determine if the repository represented by the dependency tuple is an instance of the repository type TipOnly.
|
||||
required_repository = suc.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
required_repository = repository_util.get_repository_by_name_and_owner( self.app, name, owner )
|
||||
repository_type_class = self.app.repository_types_registry.get_class_by_label( required_repository.type )
|
||||
return isinstance( repository_type_class, TipOnly )
|
||||
return False
|
||||
@@ -410,7 +411,7 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
# Compare from most recent to oldest.
|
||||
changeset_revisions.reverse()
|
||||
for changeset_revision in changeset_revisions:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app, id, changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app, id, changeset_revision )
|
||||
metadata = repository_metadata.metadata
|
||||
tools_dicts = metadata.get( 'tools', [] )
|
||||
for tool_dict in tools_dicts:
|
||||
@@ -823,9 +824,9 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
changeset_revisions_that_contain_tools = []
|
||||
for changeset in repo.changelog:
|
||||
changeset_revision = str( repo.changectx( changeset ) )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
metadata = repository_metadata.metadata
|
||||
if metadata:
|
||||
@@ -836,9 +837,9 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
# { 'tool id' : 'parent tool id' } pairs for each tool in each changeset revision.
|
||||
for index, changeset_revision in enumerate( changeset_revisions_that_contain_tools ):
|
||||
tool_versions_dict = {}
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
changeset_revision )
|
||||
metadata = repository_metadata.metadata
|
||||
tool_dicts = metadata[ 'tools' ]
|
||||
if index == 0:
|
||||
@@ -873,7 +874,7 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
unsuccessful_count = 0
|
||||
for repository_id in repository_ids:
|
||||
try:
|
||||
repository = suc.get_repository_in_tool_shed( self.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, repository_id )
|
||||
self.set_repository( repository )
|
||||
self.resetting_all_metadata_on_repository = True
|
||||
self.reset_all_metadata_on_repository_in_tool_shed()
|
||||
@@ -953,7 +954,7 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
repository_dependencies_dict = self.metadata_dict.get( 'repository_dependencies', {} )
|
||||
repository_dependencies = repository_dependencies_dict.get( 'repository_dependencies', [] )
|
||||
has_repository_dependencies, has_repository_dependencies_only_if_compiling_contained_td = \
|
||||
suc.get_repository_dependency_types( repository_dependencies )
|
||||
repository_util.get_repository_dependency_types( repository_dependencies )
|
||||
repository_metadata.has_repository_dependencies = has_repository_dependencies
|
||||
if 'tool_dependencies' in self.metadata_dict:
|
||||
repository_metadata.includes_tool_dependencies = True
|
||||
@@ -980,7 +981,7 @@ class RepositoryMetadataManager( metadata_generator.MetadataGenerator ):
|
||||
changeset_revisions = []
|
||||
for changeset in repo.changelog:
|
||||
changeset_revision = str( repo.changectx( changeset ) )
|
||||
if suc.get_repository_metadata_by_changeset_revision( self.app, encoded_id, changeset_revision ):
|
||||
if metadata_util.get_repository_metadata_by_changeset_revision( self.app, encoded_id, changeset_revision ):
|
||||
changeset_revisions.append( changeset_revision )
|
||||
self.add_tool_versions( encoded_id, repository_metadata, changeset_revisions )
|
||||
elif len( repo ) == 1 and not self.invalid_file_tups:
|
||||
|
||||
@@ -5,7 +5,7 @@ from sqlalchemy import and_, false, or_
|
||||
import tool_shed.repository_types.util as rt_util
|
||||
from galaxy.webapps.tool_shed import model
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import metadata_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -163,12 +163,12 @@ class Registry( object ):
|
||||
return ( None, False )
|
||||
repo = hg_util.get_repo_for_repository( self.app, repository=repository, repo_path=None, create=False )
|
||||
# Get the latest installable changeset revision since that is all that is currently configured for testing.
|
||||
latest_installable_changeset_revision = suc.get_latest_downloadable_changeset_revision( self.app, repository, repo )
|
||||
latest_installable_changeset_revision = metadata_util.get_latest_downloadable_changeset_revision( self.app, repository, repo )
|
||||
if latest_installable_changeset_revision not in [ None, hg_util.INITIAL_CHANGELOG_HASH ]:
|
||||
encoded_repository_id = self.app.security.encode_id( repository.id )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
latest_installable_changeset_revision )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
latest_installable_changeset_revision )
|
||||
if repository_metadata:
|
||||
# No repository_metadata.
|
||||
return ( latest_installable_changeset_revision, True )
|
||||
@@ -264,9 +264,9 @@ class Registry( object ):
|
||||
is_valid = self.is_valid( repository )
|
||||
encoded_repository_id = self.app.security.encode_id( repository.id )
|
||||
tip_changeset_hash = repository.tip( self.app )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
tip_changeset_hash )
|
||||
repository_metadata = metadata_util.get_repository_metadata_by_changeset_revision( self.app,
|
||||
encoded_repository_id,
|
||||
tip_changeset_hash )
|
||||
self.viewable_repositories_and_suites_by_category[ category_name ] += 1
|
||||
if is_valid:
|
||||
self.viewable_valid_repositories_and_suites_by_category[ category_name ] += 1
|
||||
|
||||
@@ -11,7 +11,7 @@ from tool_shed.tools import data_table_manager
|
||||
|
||||
from tool_shed.util import basic_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import repository_util
|
||||
from tool_shed.util import tool_util
|
||||
from tool_shed.util import xml_util
|
||||
|
||||
@@ -244,13 +244,13 @@ class ToolValidator( object ):
|
||||
searching backwards.
|
||||
"""
|
||||
original_tool_data_path = self.app.config.tool_data_path
|
||||
repository = suc.get_repository_in_tool_shed( self.app, repository_id )
|
||||
repository = repository_util.get_repository_in_tool_shed( self.app, repository_id )
|
||||
repo_files_dir = repository.repo_path( self.app )
|
||||
repo = hg_util.get_repo_for_repository( self.app, repository=None, repo_path=repo_files_dir, create=False )
|
||||
message = ''
|
||||
tool = None
|
||||
can_use_disk_file = False
|
||||
tool_config_filepath = suc.get_absolute_path_to_file_in_repository( repo_files_dir, tool_config_filename )
|
||||
tool_config_filepath = repository_util.get_absolute_path_to_file_in_repository( repo_files_dir, tool_config_filename )
|
||||
work_dir = tempfile.mkdtemp( prefix="tmp-toolshed-ltfcr" )
|
||||
can_use_disk_file = self.can_use_tool_config_disk_file( repository,
|
||||
repo,
|
||||
|
||||
@@ -3,7 +3,8 @@ import logging
|
||||
from sqlalchemy import and_, or_
|
||||
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -36,7 +37,7 @@ class ToolVersionManager( object ):
|
||||
guid contained in the received repsitory_metadata.tool_versions. This function
|
||||
is called only from the Tool Shed.
|
||||
"""
|
||||
repository = suc.get_repository_by_id( self.app, repository_id )
|
||||
repository = repository_util.get_repository_by_id( self.app, repository_id )
|
||||
repo = hg_util.get_repo_for_repository( self.app, repository=repository, repo_path=None, create=False )
|
||||
# Initialize the tool lineage
|
||||
version_lineage = [ guid ]
|
||||
@@ -44,7 +45,7 @@ class ToolVersionManager( object ):
|
||||
current_child_guid = guid
|
||||
for changeset in hg_util.reversed_upper_bounded_changelog( repo, repository_metadata.changeset_revision ):
|
||||
ctx = repo.changectx( changeset )
|
||||
rm = suc.get_repository_metadata_by_changeset_revision( self.app, repository_id, str( ctx ) )
|
||||
rm = metadata_util.get_repository_metadata_by_changeset_revision( self.app, repository_id, str( ctx ) )
|
||||
if rm:
|
||||
parent_guid = rm.tool_versions.get( current_child_guid, None )
|
||||
if parent_guid:
|
||||
@@ -56,7 +57,7 @@ class ToolVersionManager( object ):
|
||||
repository_metadata.changeset_revision,
|
||||
repository.tip( self.app ) ):
|
||||
ctx = repo.changectx( changeset )
|
||||
rm = suc.get_repository_metadata_by_changeset_revision( self.app, repository_id, str( ctx ) )
|
||||
rm = metadata_util.get_repository_metadata_by_changeset_revision( self.app, repository_id, str( ctx ) )
|
||||
if rm:
|
||||
tool_versions = rm.tool_versions
|
||||
for child_guid, parent_guid in tool_versions.items():
|
||||
|
||||
@@ -242,6 +242,18 @@ def get_tool_shed_url_from_tool_shed_registry( app, tool_shed ):
|
||||
return None
|
||||
|
||||
|
||||
def get_user_by_username( app, username ):
|
||||
"""Get a user from the database by username."""
|
||||
sa_session = app.model.context.current
|
||||
try:
|
||||
user = sa_session.query( app.model.User ) \
|
||||
.filter( app.model.User.table.c.username == username ) \
|
||||
.one()
|
||||
return user
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def handle_galaxy_url( trans, **kwd ):
|
||||
galaxy_url = kwd.get( 'galaxy_url', None )
|
||||
if galaxy_url:
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import logging
|
||||
|
||||
from tool_shed.util import common_util, hg_util, shed_util_common as suc
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import hg_util
|
||||
from sqlalchemy import and_
|
||||
from operator import itemgetter
|
||||
import tool_shed.util.repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -35,27 +39,62 @@ def get_all_dependencies( app, metadata_entry, processed_dependency_links=[] ):
|
||||
return returned_dependencies
|
||||
|
||||
|
||||
def get_current_repository_metadata_for_changeset_revision( app, repository, changeset_revision ):
|
||||
encoded_repository_id = app.security.encode_id( repository.id )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app,
|
||||
encoded_repository_id,
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
return repository_metadata
|
||||
# The installable changeset_revision may have been changed because it was "moved ahead"
|
||||
# in the repository changelog.
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
updated_changeset_revision = get_next_downloadable_changeset_revision( repository,
|
||||
repo,
|
||||
after_changeset_revision=changeset_revision )
|
||||
if updated_changeset_revision and updated_changeset_revision != changeset_revision:
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app,
|
||||
encoded_repository_id,
|
||||
updated_changeset_revision )
|
||||
if repository_metadata:
|
||||
return repository_metadata
|
||||
return None
|
||||
|
||||
|
||||
def get_dependencies_for_metadata_revision( app, metadata ):
|
||||
dependencies = []
|
||||
for shed, name, owner, changeset, prior, _ in metadata[ 'repository_dependencies' ]:
|
||||
required_repository = suc.get_repository_by_name_and_owner( app, name, owner )
|
||||
required_repository = tool_shed.util.repository_util.get_repository_by_name_and_owner( app, name, owner )
|
||||
repo = hg_util.get_repo_for_repository( app, repository=required_repository, repo_path=None, create=False )
|
||||
updated_changeset = suc.get_next_downloadable_changeset_revision( required_repository, repo, changeset )
|
||||
updated_changeset = get_next_downloadable_changeset_revision( required_repository, repo, changeset )
|
||||
if updated_changeset is None:
|
||||
continue
|
||||
metadata_entry = suc.get_repository_metadata_by_changeset_revision( app, app.security.encode_id( required_repository.id ), updated_changeset )
|
||||
metadata_entry = get_repository_metadata_by_changeset_revision( app, app.security.encode_id( required_repository.id ), updated_changeset )
|
||||
dependencies.append( metadata_entry )
|
||||
return dependencies
|
||||
|
||||
|
||||
def get_latest_changeset_revision( app, repository, repo ):
|
||||
repository_tip = repository.tip( app )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( app,
|
||||
app.security.encode_id( repository.id ),
|
||||
repository_tip )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app,
|
||||
app.security.encode_id( repository.id ),
|
||||
repository_tip )
|
||||
if repository_metadata and repository_metadata.downloadable:
|
||||
return repository_tip
|
||||
changeset_revisions = [ revision[ 1 ] for revision in suc.get_metadata_revisions( repository, repo ) ]
|
||||
changeset_revisions = [ revision[ 1 ] for revision in get_metadata_revisions( repository, repo ) ]
|
||||
if changeset_revisions:
|
||||
return changeset_revisions[ -1 ]
|
||||
return hg_util.INITIAL_CHANGELOG_HASH
|
||||
|
||||
|
||||
def get_latest_downloadable_changeset_revision( app, repository, repo=None ):
|
||||
if repo is None:
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
repository_tip = repository.tip( app )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app, app.security.encode_id( repository.id ), repository_tip )
|
||||
if repository_metadata and repository_metadata.downloadable:
|
||||
return repository_tip
|
||||
changeset_revisions = [ revision[ 1 ] for revision in get_metadata_revisions( repository, repo ) ]
|
||||
if changeset_revisions:
|
||||
return changeset_revisions[ -1 ]
|
||||
return hg_util.INITIAL_CHANGELOG_HASH
|
||||
@@ -67,12 +106,12 @@ def get_latest_repository_metadata( app, decoded_repository_id, downloadable=Fal
|
||||
repository = sa_session.query( app.model.Repository ).get( decoded_repository_id )
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
if downloadable:
|
||||
changeset_revision = suc.get_latest_downloadable_changeset_revision( app, repository, repo )
|
||||
changeset_revision = get_latest_downloadable_changeset_revision( app, repository, repo )
|
||||
else:
|
||||
changeset_revision = get_latest_changeset_revision( app, repository, repo )
|
||||
return suc.get_repository_metadata_by_changeset_revision( app,
|
||||
app.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
return get_repository_metadata_by_changeset_revision( app,
|
||||
app.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
|
||||
|
||||
def get_metadata_by_id( app, metadata_id ):
|
||||
@@ -80,13 +119,72 @@ def get_metadata_by_id( app, metadata_id ):
|
||||
return sa_session.query( app.model.RepositoryMetadata ).filter( app.model.RepositoryMetadata.table.c.id == metadata_id ).one()
|
||||
|
||||
|
||||
def get_metadata_changeset_revisions( repository, repo ):
|
||||
"""
|
||||
Return an unordered list of changeset_revisions and changeset numbers that are defined as installable.
|
||||
"""
|
||||
changeset_tups = []
|
||||
for repository_metadata in repository.downloadable_revisions:
|
||||
ctx = hg_util.get_changectx_for_changeset( repo, repository_metadata.changeset_revision )
|
||||
if ctx:
|
||||
rev = ctx.rev()
|
||||
else:
|
||||
rev = -1
|
||||
changeset_tups.append( ( rev, repository_metadata.changeset_revision ) )
|
||||
return sorted( changeset_tups )
|
||||
|
||||
|
||||
def get_metadata_revisions( repository, repo, sort_revisions=True, reverse=False, downloadable=True ):
|
||||
"""
|
||||
Return a list of changesets for the provided repository.
|
||||
"""
|
||||
if downloadable:
|
||||
metadata_revisions = repository.downloadable_revisions
|
||||
else:
|
||||
metadata_revisions = repository.metadata_revisions
|
||||
changeset_tups = []
|
||||
for repository_metadata in metadata_revisions:
|
||||
ctx = hg_util.get_changectx_for_changeset( repo, repository_metadata.changeset_revision )
|
||||
if ctx:
|
||||
rev = '%04d' % ctx.rev()
|
||||
else:
|
||||
rev = -1
|
||||
changeset_tups.append( ( rev, repository_metadata.changeset_revision ) )
|
||||
if sort_revisions:
|
||||
changeset_tups.sort( key=itemgetter( 0 ), reverse=reverse )
|
||||
return changeset_tups
|
||||
|
||||
|
||||
def get_next_downloadable_changeset_revision( repository, repo, after_changeset_revision ):
|
||||
"""
|
||||
Return the installable changeset_revision in the repository changelog after the changeset to which
|
||||
after_changeset_revision refers. If there isn't one, return None. If there is only one installable
|
||||
changeset, and that matches the requested revision, return it.
|
||||
"""
|
||||
changeset_revisions = [ revision[ 1 ] for revision in get_metadata_revisions( repository, repo ) ]
|
||||
if len( changeset_revisions ) == 1:
|
||||
changeset_revision = changeset_revisions[ 0 ]
|
||||
if changeset_revision == after_changeset_revision:
|
||||
return after_changeset_revision
|
||||
found_after_changeset_revision = False
|
||||
for changeset in repo.changelog:
|
||||
changeset_revision = str( repo.changectx( changeset ) )
|
||||
if found_after_changeset_revision:
|
||||
if changeset_revision in changeset_revisions:
|
||||
return changeset_revision
|
||||
elif not found_after_changeset_revision and changeset_revision == after_changeset_revision:
|
||||
# We've found the changeset in the changelog for which we need to get the next downloadable changeset.
|
||||
found_after_changeset_revision = True
|
||||
return None
|
||||
|
||||
|
||||
def get_previous_metadata_changeset_revision( repository, repo, before_changeset_revision, downloadable=True ):
|
||||
"""
|
||||
Return the changeset_revision in the repository changelog that has associated metadata prior to
|
||||
the changeset to which before_changeset_revision refers. If there isn't one, return the hash value
|
||||
of an empty repository changelog, hg_util.INITIAL_CHANGELOG_HASH.
|
||||
"""
|
||||
changeset_revisions = [ revision[ 1 ] for revision in suc.get_metadata_revisions( repository, repo ) ]
|
||||
changeset_revisions = [ revision[ 1 ] for revision in get_metadata_revisions( repository, repo ) ]
|
||||
if len( changeset_revisions ) == 1:
|
||||
changeset_revision = changeset_revisions[ 0 ]
|
||||
if changeset_revision == before_changeset_revision:
|
||||
@@ -128,7 +226,7 @@ def get_repository_dependency_tups_from_repository_metadata( app, repository_met
|
||||
for repository_dependency_tup in repository_dependency_tups:
|
||||
toolshed, name, owner, changeset_revision, pir, oicct = \
|
||||
common_util.parse_repository_dependency_tuple( repository_dependency_tup )
|
||||
repository = suc.get_repository_by_name_and_owner( app, name, owner )
|
||||
repository = tool_shed.util.repository_util.get_repository_by_name_and_owner( app, name, owner )
|
||||
if repository:
|
||||
if deprecated_only:
|
||||
if repository.deprecated:
|
||||
@@ -141,6 +239,28 @@ def get_repository_dependency_tups_from_repository_metadata( app, repository_met
|
||||
return dependency_tups
|
||||
|
||||
|
||||
def get_repository_metadata_by_changeset_revision( app, id, changeset_revision ):
|
||||
"""Get metadata for a specified repository change set from the database."""
|
||||
# Make sure there are no duplicate records, and return the single unique record for the changeset_revision.
|
||||
# Duplicate records were somehow created in the past. The cause of this issue has been resolved, but we'll
|
||||
# leave this method as is for a while longer to ensure all duplicate records are removed.
|
||||
sa_session = app.model.context.current
|
||||
all_metadata_records = sa_session.query( app.model.RepositoryMetadata ) \
|
||||
.filter( and_( app.model.RepositoryMetadata.table.c.repository_id == app.security.decode_id( id ),
|
||||
app.model.RepositoryMetadata.table.c.changeset_revision == changeset_revision ) ) \
|
||||
.order_by( app.model.RepositoryMetadata.table.c.update_time.desc() ) \
|
||||
.all()
|
||||
if len( all_metadata_records ) > 1:
|
||||
# Delete all records older than the last one updated.
|
||||
for repository_metadata in all_metadata_records[ 1: ]:
|
||||
sa_session.delete( repository_metadata )
|
||||
sa_session.flush()
|
||||
return all_metadata_records[ 0 ]
|
||||
elif all_metadata_records:
|
||||
return all_metadata_records[ 0 ]
|
||||
return None
|
||||
|
||||
|
||||
def get_repository_metadata_by_id( app, id ):
|
||||
"""Get repository metadata from the database"""
|
||||
sa_session = app.model.context.current
|
||||
@@ -150,11 +270,11 @@ def get_repository_metadata_by_id( app, id ):
|
||||
def get_repository_metadata_by_repository_id_changeset_revision( app, id, changeset_revision, metadata_only=False ):
|
||||
"""Get a specified metadata record for a specified repository in the tool shed."""
|
||||
if metadata_only:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( app, id, changeset_revision )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app, id, changeset_revision )
|
||||
if repository_metadata and repository_metadata.metadata:
|
||||
return repository_metadata.metadata
|
||||
return None
|
||||
return suc.get_repository_metadata_by_changeset_revision( app, id, changeset_revision )
|
||||
return get_repository_metadata_by_changeset_revision( app, id, changeset_revision )
|
||||
|
||||
|
||||
def get_repository_metadata_revisions_for_review( repository, reviewed=True ):
|
||||
@@ -178,6 +298,28 @@ def get_repository_metadata_revisions_for_review( repository, reviewed=True ):
|
||||
return repository_metadata_revisions
|
||||
|
||||
|
||||
def get_updated_changeset_revisions( app, name, owner, changeset_revision ):
|
||||
"""
|
||||
Return a string of comma-separated changeset revision hashes for all available updates to the received changeset
|
||||
revision for the repository defined by the received name and owner.
|
||||
"""
|
||||
repository = tool_shed.util.repository_util.get_repository_by_name_and_owner( app, name, owner )
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
# Get the upper bound changeset revision.
|
||||
upper_bound_changeset_revision = get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
# Build the list of changeset revision hashes defining each available update up to, but excluding
|
||||
# upper_bound_changeset_revision.
|
||||
changeset_hashes = []
|
||||
for changeset in hg_util.reversed_lower_upper_bounded_changelog( repo, changeset_revision, upper_bound_changeset_revision ):
|
||||
# Make sure to exclude upper_bound_changeset_revision.
|
||||
if changeset != upper_bound_changeset_revision:
|
||||
changeset_hashes.append( str( repo.changectx( changeset ) ) )
|
||||
if changeset_hashes:
|
||||
changeset_hashes_str = ','.join( changeset_hashes )
|
||||
return changeset_hashes_str
|
||||
return ''
|
||||
|
||||
|
||||
def is_downloadable( metadata_dict ):
|
||||
# NOTE: although repository README files are considered Galaxy utilities, they have no
|
||||
# effect on determining if a revision is installable. See the comments in the
|
||||
@@ -202,7 +344,7 @@ def is_downloadable( metadata_dict ):
|
||||
|
||||
def is_malicious( app, id, changeset_revision, **kwd ):
|
||||
"""Check the malicious flag in repository metadata for a specified change set revision."""
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( app, id, changeset_revision )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app, id, changeset_revision )
|
||||
if repository_metadata:
|
||||
return repository_metadata.malicious
|
||||
return False
|
||||
|
||||
@@ -8,7 +8,11 @@ from mako.template import Template
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
from galaxy import web
|
||||
from galaxy.util import rst_to_html, unicodify, url_get
|
||||
from tool_shed.util import basic_util, common_util, hg_util
|
||||
from tool_shed.util import basic_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import hg_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -23,7 +27,7 @@ def build_readme_files_dict( app, repository, changeset_revision, metadata, tool
|
||||
can_use_disk_files = True
|
||||
else:
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
latest_downloadable_changeset_revision = suc.get_latest_downloadable_changeset_revision( app, repository, repo )
|
||||
latest_downloadable_changeset_revision = metadata_util.get_latest_downloadable_changeset_revision( app, repository, repo )
|
||||
can_use_disk_files = changeset_revision == latest_downloadable_changeset_revision
|
||||
readme_files_dict = {}
|
||||
if metadata:
|
||||
@@ -92,7 +96,7 @@ def get_readme_files_dict_for_display( app, tool_shed_url, repo_info_dict ):
|
||||
name = repo_info_dict.keys()[ 0 ]
|
||||
repo_info_tuple = repo_info_dict[ name ]
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, installed_td = \
|
||||
suc.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
repository_util.get_repo_info_tuple_contents( repo_info_tuple )
|
||||
# Handle changing HTTP protocols over time.
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( app, tool_shed_url )
|
||||
params = dict( name=name, owner=repository_owner, changeset_revision=changeset_revision )
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,21 +2,18 @@ import json
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import socket
|
||||
import string
|
||||
from urllib2 import HTTPError
|
||||
from operator import itemgetter
|
||||
|
||||
import sqlalchemy.orm.exc
|
||||
from sqlalchemy import and_, false, or_, true
|
||||
from sqlalchemy import and_, false, true
|
||||
|
||||
import tool_shed.util.repository_util
|
||||
from galaxy import util
|
||||
from galaxy.web import url_for
|
||||
from galaxy.util import checkers
|
||||
from tool_shed.util import basic_util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import encoding_util
|
||||
from tool_shed.util import hg_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -149,97 +146,6 @@ def clean_dependency_relationships(trans, metadata_dict, tool_shed_repository, t
|
||||
trans.install_model.context.flush()
|
||||
|
||||
|
||||
def create_or_update_tool_shed_repository( app, name, description, installed_changeset_revision, ctx_rev, repository_clone_url,
|
||||
metadata_dict, status, current_changeset_revision=None, owner='', dist_to_shed=False ):
|
||||
"""
|
||||
Update a tool shed repository record in the Galaxy database with the new information received.
|
||||
If a record defined by the received tool shed, repository name and owner does not exist, create
|
||||
a new record with the received information.
|
||||
"""
|
||||
# The received value for dist_to_shed will be True if the ToolMigrationManager is installing a repository
|
||||
# that contains tools or datatypes that used to be in the Galaxy distribution, but have been moved
|
||||
# to the main Galaxy tool shed.
|
||||
if current_changeset_revision is None:
|
||||
# The current_changeset_revision is not passed if a repository is being installed for the first
|
||||
# time. If a previously installed repository was later uninstalled, this value should be received
|
||||
# as the value of that change set to which the repository had been updated just prior to it being
|
||||
# uninstalled.
|
||||
current_changeset_revision = installed_changeset_revision
|
||||
context = app.install_model.context
|
||||
tool_shed = get_tool_shed_from_clone_url( repository_clone_url )
|
||||
if not owner:
|
||||
owner = get_repository_owner_from_clone_url( repository_clone_url )
|
||||
includes_datatypes = 'datatypes' in metadata_dict
|
||||
if status in [ app.install_model.ToolShedRepository.installation_status.DEACTIVATED ]:
|
||||
deleted = True
|
||||
uninstalled = False
|
||||
elif status in [ app.install_model.ToolShedRepository.installation_status.UNINSTALLED ]:
|
||||
deleted = True
|
||||
uninstalled = True
|
||||
else:
|
||||
deleted = False
|
||||
uninstalled = False
|
||||
tool_shed_repository = \
|
||||
get_installed_repository( app, tool_shed=tool_shed, name=name, owner=owner, installed_changeset_revision=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
|
||||
tool_shed_repository.changeset_revision = current_changeset_revision
|
||||
tool_shed_repository.ctx_rev = ctx_rev
|
||||
tool_shed_repository.metadata = metadata_dict
|
||||
tool_shed_repository.includes_datatypes = includes_datatypes
|
||||
tool_shed_repository.deleted = deleted
|
||||
tool_shed_repository.uninstalled = uninstalled
|
||||
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 )
|
||||
context.add( tool_shed_repository )
|
||||
context.flush()
|
||||
return tool_shed_repository
|
||||
|
||||
|
||||
def extract_components_from_tuple( repository_components_tuple ):
|
||||
'''Extract the repository components from the provided tuple in a backward-compatible manner.'''
|
||||
toolshed = repository_components_tuple[ 0 ]
|
||||
name = repository_components_tuple[ 1 ]
|
||||
owner = repository_components_tuple[ 2 ]
|
||||
changeset_revision = repository_components_tuple[ 3 ]
|
||||
components_list = [ toolshed, name, owner, changeset_revision ]
|
||||
if len( repository_components_tuple ) == 5:
|
||||
toolshed, name, owner, changeset_revision, prior_installation_required = repository_components_tuple
|
||||
components_list = [ toolshed, name, owner, changeset_revision, prior_installation_required ]
|
||||
elif len( repository_components_tuple ) == 6:
|
||||
toolshed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = repository_components_tuple
|
||||
components_list = [ toolshed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td ]
|
||||
return components_list
|
||||
|
||||
|
||||
def generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=None ):
|
||||
"""Generate the URL for sharing a repository that is in the tool shed."""
|
||||
base_url = url_for( '/', qualified=True ).rstrip( '/' )
|
||||
protocol, base = base_url.split( '://' )
|
||||
sharable_url = '%s://%s/view/%s/%s' % ( protocol, base, repository.user.username, repository.name )
|
||||
if changeset_revision:
|
||||
sharable_url += '/%s' % changeset_revision
|
||||
return sharable_url
|
||||
|
||||
|
||||
def generate_tool_guid( repository_clone_url, tool ):
|
||||
"""
|
||||
Generate a guid for the installed tool. It is critical that this guid matches the guid for
|
||||
@@ -250,33 +156,6 @@ def generate_tool_guid( repository_clone_url, tool ):
|
||||
return '%s/%s/%s' % ( tmp_url, tool.id, tool.version )
|
||||
|
||||
|
||||
def generate_tool_shed_repository_install_dir( repository_clone_url, changeset_revision ):
|
||||
"""
|
||||
Generate a repository installation directory that guarantees repositories with the same
|
||||
name will always be installed in different directories. The tool path will be of the form:
|
||||
<tool shed url>/repos/<repository owner>/<repository name>/<installed changeset revision>
|
||||
"""
|
||||
tmp_url = common_util.remove_protocol_and_user_from_clone_url( repository_clone_url )
|
||||
# Now tmp_url is something like: bx.psu.edu:9009/repos/some_username/column
|
||||
items = tmp_url.split( '/repos/' )
|
||||
tool_shed_url = items[ 0 ]
|
||||
repo_path = items[ 1 ]
|
||||
tool_shed_url = common_util.remove_port_from_tool_shed_url( tool_shed_url )
|
||||
return '/'.join( [ tool_shed_url, 'repos', repo_path, changeset_revision ] )
|
||||
|
||||
|
||||
def get_absolute_path_to_file_in_repository( repo_files_dir, file_name ):
|
||||
"""Return the absolute path to a specified disk file contained in a repository."""
|
||||
stripped_file_name = basic_util.strip_path( file_name )
|
||||
file_path = None
|
||||
for root, dirs, files in os.walk( repo_files_dir ):
|
||||
if root.find( '.hg' ) < 0:
|
||||
for name in files:
|
||||
if name == stripped_file_name:
|
||||
return os.path.abspath( os.path.join( root, name ) )
|
||||
return file_path
|
||||
|
||||
|
||||
def get_categories( app ):
|
||||
"""Get all categories from the database."""
|
||||
sa_session = app.model.context.current
|
||||
@@ -313,112 +192,6 @@ def get_ctx_rev( app, tool_shed_url, name, owner, changeset_revision ):
|
||||
return ctx_rev
|
||||
|
||||
|
||||
def get_current_repository_metadata_for_changeset_revision( app, repository, changeset_revision ):
|
||||
encoded_repository_id = app.security.encode_id( repository.id )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app,
|
||||
encoded_repository_id,
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
return repository_metadata
|
||||
# The installable changeset_revision may have been changed because it was "moved ahead"
|
||||
# in the repository changelog.
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
updated_changeset_revision = get_next_downloadable_changeset_revision( repository,
|
||||
repo,
|
||||
after_changeset_revision=changeset_revision )
|
||||
if updated_changeset_revision and updated_changeset_revision != changeset_revision:
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app,
|
||||
encoded_repository_id,
|
||||
updated_changeset_revision )
|
||||
if repository_metadata:
|
||||
return repository_metadata
|
||||
return None
|
||||
|
||||
|
||||
def get_ids_of_tool_shed_repositories_being_installed( app, as_string=False ):
|
||||
installing_repository_ids = []
|
||||
new_status = app.install_model.ToolShedRepository.installation_status.NEW
|
||||
cloning_status = app.install_model.ToolShedRepository.installation_status.CLONING
|
||||
setting_tool_versions_status = app.install_model.ToolShedRepository.installation_status.SETTING_TOOL_VERSIONS
|
||||
installing_dependencies_status = app.install_model.ToolShedRepository.installation_status.INSTALLING_TOOL_DEPENDENCIES
|
||||
loading_datatypes_status = app.install_model.ToolShedRepository.installation_status.LOADING_PROPRIETARY_DATATYPES
|
||||
for tool_shed_repository in \
|
||||
app.install_model.context.query( app.install_model.ToolShedRepository ) \
|
||||
.filter( or_( app.install_model.ToolShedRepository.status == new_status,
|
||||
app.install_model.ToolShedRepository.status == cloning_status,
|
||||
app.install_model.ToolShedRepository.status == setting_tool_versions_status,
|
||||
app.install_model.ToolShedRepository.status == installing_dependencies_status,
|
||||
app.install_model.ToolShedRepository.status == loading_datatypes_status ) ):
|
||||
installing_repository_ids.append( app.security.encode_id( tool_shed_repository.id ) )
|
||||
if as_string:
|
||||
return ','.join( installing_repository_ids )
|
||||
return installing_repository_ids
|
||||
|
||||
|
||||
def get_latest_downloadable_changeset_revision( app, repository, repo=None ):
|
||||
if repo is None:
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
repository_tip = repository.tip( app )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( app, app.security.encode_id( repository.id ), repository_tip )
|
||||
if repository_metadata and repository_metadata.downloadable:
|
||||
return repository_tip
|
||||
changeset_revisions = [ revision[ 1 ] for revision in get_metadata_revisions( repository, repo ) ]
|
||||
if changeset_revisions:
|
||||
return changeset_revisions[ -1 ]
|
||||
return hg_util.INITIAL_CHANGELOG_HASH
|
||||
|
||||
|
||||
def get_tool_dependency_definition_metadata_from_tool_shed( app, tool_shed_url, name, owner ):
|
||||
"""
|
||||
Send a request to the tool shed to retrieve the current metadata for a
|
||||
repository of type tool_dependency_definition defined by the combination
|
||||
of a name and owner.
|
||||
"""
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( app, tool_shed_url )
|
||||
params = dict( name=name, owner=owner )
|
||||
pathspec = [ 'repository', 'get_tool_dependency_definition_metadata' ]
|
||||
metadata = util.url_get( tool_shed_url, password_mgr=app.tool_shed_registry.url_auth( tool_shed_url ), pathspec=pathspec, params=params )
|
||||
return metadata
|
||||
|
||||
|
||||
def get_metadata_changeset_revisions( repository, repo ):
|
||||
"""
|
||||
Return an unordered list of changeset_revisions and changeset numbers that are defined as installable.
|
||||
"""
|
||||
changeset_tups = []
|
||||
for repository_metadata in repository.downloadable_revisions:
|
||||
ctx = hg_util.get_changectx_for_changeset( repo, repository_metadata.changeset_revision )
|
||||
if ctx:
|
||||
rev = ctx.rev()
|
||||
else:
|
||||
rev = -1
|
||||
changeset_tups.append( ( rev, repository_metadata.changeset_revision ) )
|
||||
return sorted( changeset_tups )
|
||||
|
||||
|
||||
def get_next_downloadable_changeset_revision( repository, repo, after_changeset_revision ):
|
||||
"""
|
||||
Return the installable changeset_revision in the repository changelog after the changeset to which
|
||||
after_changeset_revision refers. If there isn't one, return None. If there is only one installable
|
||||
changeset, and that matches the requested revision, return it.
|
||||
"""
|
||||
changeset_revisions = [ revision[ 1 ] for revision in get_metadata_revisions( repository, repo ) ]
|
||||
if len( changeset_revisions ) == 1:
|
||||
changeset_revision = changeset_revisions[ 0 ]
|
||||
if changeset_revision == after_changeset_revision:
|
||||
return after_changeset_revision
|
||||
found_after_changeset_revision = False
|
||||
for changeset in repo.changelog:
|
||||
changeset_revision = str( repo.changectx( changeset ) )
|
||||
if found_after_changeset_revision:
|
||||
if changeset_revision in changeset_revisions:
|
||||
return changeset_revision
|
||||
elif not found_after_changeset_revision and changeset_revision == after_changeset_revision:
|
||||
# We've found the changeset in the changelog for which we need to get the next downloadable changeset.
|
||||
found_after_changeset_revision = True
|
||||
return None
|
||||
|
||||
|
||||
def get_next_prior_import_or_install_required_dict_entry( prior_required_dict, processed_tsr_ids ):
|
||||
"""
|
||||
This method is used in the Tool Shed when exporting a repository and its dependencies, and in Galaxy
|
||||
@@ -453,196 +226,11 @@ def get_next_prior_import_or_install_required_dict_entry( prior_required_dict, p
|
||||
return key
|
||||
|
||||
|
||||
def get_metadata_revisions( repository, repo, sort_revisions=True, reverse=False, downloadable=True ):
|
||||
"""
|
||||
Return a list of changesets for the provided repository.
|
||||
"""
|
||||
if downloadable:
|
||||
metadata_revisions = repository.downloadable_revisions
|
||||
else:
|
||||
metadata_revisions = repository.metadata_revisions
|
||||
changeset_tups = []
|
||||
for repository_metadata in metadata_revisions:
|
||||
ctx = hg_util.get_changectx_for_changeset( repo, repository_metadata.changeset_revision )
|
||||
if ctx:
|
||||
rev = '%04d' % ctx.rev()
|
||||
else:
|
||||
rev = -1
|
||||
changeset_tups.append( ( rev, repository_metadata.changeset_revision ) )
|
||||
if sort_revisions:
|
||||
changeset_tups.sort( key=itemgetter( 0 ), reverse=reverse )
|
||||
return changeset_tups
|
||||
|
||||
|
||||
def get_prior_import_or_install_required_dict( app, tsr_ids, repo_info_dicts ):
|
||||
"""
|
||||
This method is used in the Tool Shed when exporting a repository and its dependencies,
|
||||
and in Galaxy when a repository and its dependencies are being installed. Return a
|
||||
dictionary whose keys are the received tsr_ids and whose values are a list of tsr_ids,
|
||||
each of which is contained in the received list of tsr_ids and whose associated repository
|
||||
must be imported or installed prior to the repository associated with the tsr_id key.
|
||||
"""
|
||||
# Initialize the dictionary.
|
||||
prior_import_or_install_required_dict = {}
|
||||
for tsr_id in tsr_ids:
|
||||
prior_import_or_install_required_dict[ tsr_id ] = []
|
||||
# Inspect the repository dependencies for each repository about to be installed and populate the dictionary.
|
||||
for repo_info_dict in repo_info_dicts:
|
||||
repository, repository_dependencies = get_repository_and_repository_dependencies_from_repo_info_dict( app, repo_info_dict )
|
||||
if repository:
|
||||
encoded_repository_id = app.security.encode_id( repository.id )
|
||||
if encoded_repository_id in tsr_ids:
|
||||
# We've located the database table record for one of the repositories we're about to install, so find out if it has any repository
|
||||
# dependencies that require prior installation.
|
||||
prior_import_or_install_ids = get_repository_ids_requiring_prior_import_or_install( app, tsr_ids, repository_dependencies )
|
||||
prior_import_or_install_required_dict[ encoded_repository_id ] = prior_import_or_install_ids
|
||||
return prior_import_or_install_required_dict
|
||||
|
||||
|
||||
def get_repo_info_tuple_contents( repo_info_tuple ):
|
||||
"""Take care in handling the repo_info_tuple as it evolves over time as new tool shed features are introduced."""
|
||||
if len( repo_info_tuple ) == 6:
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, tool_dependencies = repo_info_tuple
|
||||
repository_dependencies = None
|
||||
elif len( repo_info_tuple ) == 7:
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies = repo_info_tuple
|
||||
return description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies
|
||||
|
||||
|
||||
def get_repositories_by_category( app, category_id ):
|
||||
def get_repository_categories( app, id ):
|
||||
"""Get categories of a repository on the tool shed side from the database via id"""
|
||||
sa_session = app.model.context.current
|
||||
resultset = sa_session.query( app.model.Category ).get( category_id )
|
||||
repositories = []
|
||||
default_value_mapper = { 'id': app.security.encode_id, 'user_id': app.security.encode_id }
|
||||
for row in resultset.repositories:
|
||||
repository_dict = row.repository.to_dict( value_mapper=default_value_mapper )
|
||||
repository_dict[ 'metadata' ] = {}
|
||||
for changeset, changehash in row.repository.installable_revisions( app ):
|
||||
encoded_id = app.security.encode_id( row.repository.id )
|
||||
metadata = get_repository_metadata_by_changeset_revision( app, encoded_id, changehash )
|
||||
repository_dict[ 'metadata' ][ '%s:%s' % ( changeset, changehash ) ] = metadata.to_dict( value_mapper=default_value_mapper )
|
||||
repositories.append( repository_dict )
|
||||
return repositories
|
||||
|
||||
|
||||
def get_repository_and_repository_dependencies_from_repo_info_dict( app, repo_info_dict ):
|
||||
"""Return a tool_shed_repository or repository record defined by the information in the received repo_info_dict."""
|
||||
repository_name = repo_info_dict.keys()[ 0 ]
|
||||
repo_info_tuple = repo_info_dict[ repository_name ]
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies = \
|
||||
get_repo_info_tuple_contents( repo_info_tuple )
|
||||
if hasattr( app, "install_model" ):
|
||||
# In a tool shed client (Galaxy, or something install repositories like Galaxy)
|
||||
tool_shed = get_tool_shed_from_clone_url( repository_clone_url )
|
||||
repository = get_repository_for_dependency_relationship( app, tool_shed, repository_name, repository_owner, changeset_revision )
|
||||
else:
|
||||
# We're in the tool shed.
|
||||
repository = get_repository_by_name_and_owner( app, repository_name, repository_owner )
|
||||
return repository, repository_dependencies
|
||||
|
||||
|
||||
def get_repository_by_id( app, id ):
|
||||
"""Get a repository from the database via id."""
|
||||
if is_tool_shed_client( app ):
|
||||
return app.install_model.context.query( app.install_model.ToolShedRepository ).get( app.security.decode_id( id ) )
|
||||
else:
|
||||
sa_session = app.model.context.current
|
||||
return sa_session.query( app.model.Repository ).get( app.security.decode_id( id ) )
|
||||
|
||||
|
||||
def get_repository_by_name( app, name ):
|
||||
"""Get a repository from the database via name."""
|
||||
repository_query = get_repository_query( app )
|
||||
return repository_query.filter_by( name=name ).first()
|
||||
|
||||
|
||||
def get_repository_by_name_and_owner( app, name, owner ):
|
||||
"""Get a repository from the database via name and owner"""
|
||||
repository_query = get_repository_query( app )
|
||||
if is_tool_shed_client( app ):
|
||||
return repository_query \
|
||||
.filter( and_( app.install_model.ToolShedRepository.table.c.name == name,
|
||||
app.install_model.ToolShedRepository.table.c.owner == owner ) ) \
|
||||
.first()
|
||||
# We're in the tool shed.
|
||||
user = get_user_by_username( app, owner )
|
||||
if user:
|
||||
return repository_query \
|
||||
.filter( and_( app.model.Repository.table.c.name == name,
|
||||
app.model.Repository.table.c.user_id == user.id ) ) \
|
||||
.first()
|
||||
return None
|
||||
|
||||
|
||||
def get_repository_dependency_types( repository_dependencies ):
|
||||
"""
|
||||
Inspect the received list of repository_dependencies tuples and return boolean values
|
||||
for has_repository_dependencies and has_repository_dependencies_only_if_compiling_contained_td.
|
||||
"""
|
||||
# Set has_repository_dependencies, which will be True only if at least one repository_dependency
|
||||
# is defined with the value of
|
||||
# only_if_compiling_contained_td as False.
|
||||
has_repository_dependencies = False
|
||||
for rd_tup in repository_dependencies:
|
||||
tool_shed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \
|
||||
common_util.parse_repository_dependency_tuple( rd_tup )
|
||||
if not util.asbool( only_if_compiling_contained_td ):
|
||||
has_repository_dependencies = True
|
||||
break
|
||||
# Set has_repository_dependencies_only_if_compiling_contained_td, which will be True only if at
|
||||
# least one repository_dependency is defined with the value of only_if_compiling_contained_td as True.
|
||||
has_repository_dependencies_only_if_compiling_contained_td = False
|
||||
for rd_tup in repository_dependencies:
|
||||
tool_shed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td = \
|
||||
common_util.parse_repository_dependency_tuple( rd_tup )
|
||||
if util.asbool( only_if_compiling_contained_td ):
|
||||
has_repository_dependencies_only_if_compiling_contained_td = True
|
||||
break
|
||||
return has_repository_dependencies, has_repository_dependencies_only_if_compiling_contained_td
|
||||
|
||||
|
||||
def get_repository_for_dependency_relationship( app, tool_shed, name, owner, changeset_revision ):
|
||||
"""
|
||||
Return an installed tool_shed_repository database record that is defined by either the current changeset
|
||||
revision or the installed_changeset_revision.
|
||||
"""
|
||||
# This method is used only in Galaxy, not the Tool Shed. We store the port (if one exists) in the database.
|
||||
tool_shed = common_util.remove_protocol_from_tool_shed_url( tool_shed )
|
||||
if tool_shed is None or name is None or owner is None or changeset_revision is None:
|
||||
message = "Unable to retrieve the repository record from the database because one or more of the following "
|
||||
message += "required parameters is None: tool_shed: %s, name: %s, owner: %s, changeset_revision: %s " % \
|
||||
( str( tool_shed ), str( name ), str( owner ), str( changeset_revision ) )
|
||||
raise Exception( message )
|
||||
repository = get_installed_repository( app=app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
owner=owner,
|
||||
installed_changeset_revision=changeset_revision )
|
||||
if not repository:
|
||||
repository = get_installed_repository( app=app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=changeset_revision )
|
||||
if not repository:
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( app, tool_shed )
|
||||
repository_clone_url = os.path.join( tool_shed_url, 'repos', owner, name )
|
||||
repo_info_tuple = (None, repository_clone_url, changeset_revision, None, owner, None, None)
|
||||
repository, pcr = repository_was_previously_installed( app, tool_shed_url, name, repo_info_tuple )
|
||||
if not repository:
|
||||
# The received changeset_revision is no longer installable, so get the next changeset_revision
|
||||
# in the repository's changelog in the tool shed that is associated with repository_metadata.
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( app, tool_shed )
|
||||
params = dict( name=name, owner=owner, changeset_revision=changeset_revision )
|
||||
pathspec = [ 'repository', 'next_installable_changeset_revision' ]
|
||||
text = util.url_get( tool_shed_url, password_mgr=app.tool_shed_registry.url_auth( tool_shed_url ), pathspec=pathspec, params=params )
|
||||
if text:
|
||||
repository = get_installed_repository( app=app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
owner=owner,
|
||||
changeset_revision=text )
|
||||
return repository
|
||||
return sa_session.query( app.model.RepositoryCategoryAssociation ) \
|
||||
.filter(app.model.RepositoryCategoryAssociation.table.c.repository_id == app.security.decode_id( id ))
|
||||
|
||||
|
||||
def get_repository_file_contents( app, file_path, repository_id, is_admin=False ):
|
||||
@@ -712,123 +300,13 @@ def get_repository_from_refresh_on_change( app, **kwd ):
|
||||
changeset_revision_str = 'changeset_revision_'
|
||||
if k.startswith( changeset_revision_str ):
|
||||
repository_id = app.security.encode_id( int( k.lstrip( changeset_revision_str ) ) )
|
||||
repository = get_repository_in_tool_shed( app, repository_id )
|
||||
repository = tool_shed.util.repository_util.get_repository_in_tool_shed( app, repository_id )
|
||||
if repository.tip( app ) != v:
|
||||
return v, repository
|
||||
# This should never be reached - raise an exception?
|
||||
return v, None
|
||||
|
||||
|
||||
def get_repository_ids_requiring_prior_import_or_install( app, tsr_ids, repository_dependencies ):
|
||||
"""
|
||||
This method is used in the Tool Shed when exporting a repository and its dependencies,
|
||||
and in Galaxy when a repository and its dependencies are being installed. Inspect the
|
||||
received repository_dependencies and determine if the encoded id of each required
|
||||
repository is in the received tsr_ids. If so, then determine whether that required
|
||||
repository should be imported / installed prior to its dependent repository. Return a
|
||||
list of encoded repository ids, each of which is contained in the received list of tsr_ids,
|
||||
and whose associated repositories must be imported / installed prior to the dependent
|
||||
repository associated with the received repository_dependencies.
|
||||
"""
|
||||
prior_tsr_ids = []
|
||||
if repository_dependencies:
|
||||
for key, rd_tups in repository_dependencies.items():
|
||||
if key in [ 'description', 'root_key' ]:
|
||||
continue
|
||||
for rd_tup in rd_tups:
|
||||
tool_shed, \
|
||||
name, \
|
||||
owner, \
|
||||
changeset_revision, \
|
||||
prior_installation_required, \
|
||||
only_if_compiling_contained_td = \
|
||||
common_util.parse_repository_dependency_tuple( rd_tup )
|
||||
# If only_if_compiling_contained_td is False, then the repository dependency
|
||||
# is not required to be installed prior to the dependent repository even if
|
||||
# prior_installation_required is True. This is because the only meaningful
|
||||
# content of the repository dependency is its contained tool dependency, which
|
||||
# is required in order to compile the dependent repository's tool dependency.
|
||||
# In the scenario where the repository dependency is not installed prior to the
|
||||
# dependent repository's tool dependency compilation process, the tool dependency
|
||||
# compilation framework will install the repository dependency prior to compilation
|
||||
# of the dependent repository's tool dependency.
|
||||
if not util.asbool( only_if_compiling_contained_td ):
|
||||
if util.asbool( prior_installation_required ):
|
||||
if is_tool_shed_client( app ):
|
||||
# We store the port, if one exists, in the database.
|
||||
tool_shed = common_util.remove_protocol_from_tool_shed_url( tool_shed )
|
||||
repository = get_repository_for_dependency_relationship( app,
|
||||
tool_shed,
|
||||
name,
|
||||
owner,
|
||||
changeset_revision )
|
||||
else:
|
||||
repository = get_repository_by_name_and_owner( app, name, owner )
|
||||
if repository:
|
||||
encoded_repository_id = app.security.encode_id( repository.id )
|
||||
if encoded_repository_id in tsr_ids:
|
||||
prior_tsr_ids.append( encoded_repository_id )
|
||||
return prior_tsr_ids
|
||||
|
||||
|
||||
def get_repository_in_tool_shed( app, id ):
|
||||
"""Get a repository on the tool shed side from the database via id."""
|
||||
sa_session = app.model.context.current
|
||||
return sa_session.query( app.model.Repository ).get( app.security.decode_id( id ) )
|
||||
|
||||
|
||||
def get_repository_categories( app, id ):
|
||||
"""Get categories of a repository on the tool shed side from the database via id"""
|
||||
sa_session = app.model.context.current
|
||||
return sa_session.query( app.model.RepositoryCategoryAssociation ) \
|
||||
.filter(app.model.RepositoryCategoryAssociation.table.c.repository_id == app.security.decode_id( id ))
|
||||
|
||||
|
||||
def get_repository_metadata_by_changeset_revision( app, id, changeset_revision ):
|
||||
"""Get metadata for a specified repository change set from the database."""
|
||||
# Make sure there are no duplicate records, and return the single unique record for the changeset_revision.
|
||||
# Duplicate records were somehow created in the past. The cause of this issue has been resolved, but we'll
|
||||
# leave this method as is for a while longer to ensure all duplicate records are removed.
|
||||
sa_session = app.model.context.current
|
||||
all_metadata_records = sa_session.query( app.model.RepositoryMetadata ) \
|
||||
.filter( and_( app.model.RepositoryMetadata.table.c.repository_id == app.security.decode_id( id ),
|
||||
app.model.RepositoryMetadata.table.c.changeset_revision == changeset_revision ) ) \
|
||||
.order_by( app.model.RepositoryMetadata.table.c.update_time.desc() ) \
|
||||
.all()
|
||||
if len( all_metadata_records ) > 1:
|
||||
# Delete all records older than the last one updated.
|
||||
for repository_metadata in all_metadata_records[ 1: ]:
|
||||
sa_session.delete( repository_metadata )
|
||||
sa_session.flush()
|
||||
return all_metadata_records[ 0 ]
|
||||
elif all_metadata_records:
|
||||
return all_metadata_records[ 0 ]
|
||||
return None
|
||||
|
||||
|
||||
def get_repository_owner( cleaned_repository_url ):
|
||||
"""Gvien a "cleaned" repository clone URL, return the owner of the repository."""
|
||||
items = cleaned_repository_url.split( '/repos/' )
|
||||
repo_path = items[ 1 ]
|
||||
if repo_path.startswith( '/' ):
|
||||
repo_path = repo_path.replace( '/', '', 1 )
|
||||
return repo_path.lstrip( '/' ).split( '/' )[ 0 ]
|
||||
|
||||
|
||||
def get_repository_owner_from_clone_url( repository_clone_url ):
|
||||
"""Given a repository clone URL, return the owner of the repository."""
|
||||
tmp_url = common_util.remove_protocol_and_user_from_clone_url( repository_clone_url )
|
||||
return get_repository_owner( tmp_url )
|
||||
|
||||
|
||||
def get_repository_query( app ):
|
||||
if is_tool_shed_client( app ):
|
||||
query = app.install_model.context.query( app.install_model.ToolShedRepository )
|
||||
else:
|
||||
query = app.model.context.query( app.model.Repository )
|
||||
return query
|
||||
|
||||
|
||||
def get_repository_type_from_tool_shed( app, tool_shed_url, name, owner ):
|
||||
"""
|
||||
Send a request to the tool shed to retrieve the type for a repository defined by the
|
||||
@@ -841,6 +319,19 @@ def get_repository_type_from_tool_shed( app, tool_shed_url, name, owner ):
|
||||
return repository_type
|
||||
|
||||
|
||||
def get_tool_dependency_definition_metadata_from_tool_shed( app, tool_shed_url, name, owner ):
|
||||
"""
|
||||
Send a request to the tool shed to retrieve the current metadata for a
|
||||
repository of type tool_dependency_definition defined by the combination
|
||||
of a name and owner.
|
||||
"""
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( app, tool_shed_url )
|
||||
params = dict( name=name, owner=owner )
|
||||
pathspec = [ 'repository', 'get_tool_dependency_definition_metadata' ]
|
||||
metadata = util.url_get( tool_shed_url, password_mgr=app.tool_shed_registry.url_auth( tool_shed_url ), pathspec=pathspec, params=params )
|
||||
return metadata
|
||||
|
||||
|
||||
def get_tool_panel_config_tool_path_install_dir( app, repository ):
|
||||
"""
|
||||
Return shed-related tool panel config, the tool_path configured in it, and the relative path to
|
||||
@@ -881,177 +372,12 @@ def get_tool_path_by_shed_tool_conf_filename( app, shed_tool_conf ):
|
||||
return None
|
||||
|
||||
|
||||
def get_tool_shed_from_clone_url( repository_clone_url ):
|
||||
tmp_url = common_util.remove_protocol_and_user_from_clone_url( repository_clone_url )
|
||||
return tmp_url.split( '/repos/' )[ 0 ].rstrip( '/' )
|
||||
|
||||
|
||||
def get_installed_repository( app, tool_shed, name, owner, changeset_revision=None, installed_changeset_revision=None ):
|
||||
"""
|
||||
Return a tool shed repository database record defined by the combination of a toolshed, repository name,
|
||||
repository owner and either current or originally installed changeset_revision.
|
||||
"""
|
||||
query = app.install_model.context.query( app.install_model.ToolShedRepository )
|
||||
# We store the port, if one exists, in the database.
|
||||
tool_shed = common_util.remove_protocol_from_tool_shed_url( tool_shed )
|
||||
clause_list = [ app.install_model.ToolShedRepository.table.c.tool_shed == tool_shed,
|
||||
app.install_model.ToolShedRepository.table.c.name == name,
|
||||
app.install_model.ToolShedRepository.table.c.owner == owner ]
|
||||
if changeset_revision is not None:
|
||||
clause_list.append( app.install_model.ToolShedRepository.table.c.changeset_revision == changeset_revision )
|
||||
if installed_changeset_revision is not None:
|
||||
clause_list.append( app.install_model.ToolShedRepository.table.c.installed_changeset_revision == installed_changeset_revision )
|
||||
return query.filter( and_( *clause_list ) ).first()
|
||||
|
||||
|
||||
def get_tool_shed_repository_by_id( app, repository_id ):
|
||||
"""Return a tool shed repository database record defined by the id."""
|
||||
# This method is used only in Galaxy, not the tool shed.
|
||||
return app.install_model.context.query( app.install_model.ToolShedRepository ) \
|
||||
.filter( app.install_model.ToolShedRepository.table.c.id == app.security.decode_id( repository_id ) ) \
|
||||
.first()
|
||||
|
||||
|
||||
def get_tool_shed_status_for_installed_repository( app, repository ):
|
||||
"""
|
||||
Send a request to the tool shed to retrieve information about newer installable repository revisions,
|
||||
current revision updates, whether the repository revision is the latest downloadable revision, and
|
||||
whether the repository has been deprecated in the tool shed. The received repository is a ToolShedRepository
|
||||
object from Galaxy.
|
||||
"""
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( app, str( repository.tool_shed ) )
|
||||
params = dict( name=repository.name, owner=repository.owner, changeset_revision=repository.changeset_revision )
|
||||
pathspec = [ 'repository', 'status_for_installed_repository' ]
|
||||
try:
|
||||
encoded_tool_shed_status_dict = util.url_get( tool_shed_url, password_mgr=app.tool_shed_registry.url_auth( tool_shed_url ), pathspec=pathspec, params=params )
|
||||
tool_shed_status_dict = encoding_util.tool_shed_decode( encoded_tool_shed_status_dict )
|
||||
return tool_shed_status_dict
|
||||
except HTTPError as e:
|
||||
# This should handle backward compatility to the Galaxy 12/20/12 release. We used to only handle updates for an installed revision
|
||||
# using a boolean value.
|
||||
log.debug( "Error attempting to get tool shed status for installed repository %s: %s\nAttempting older 'check_for_updates' method.\n" %
|
||||
( str( repository.name ), str( e ) ) )
|
||||
pathspec = [ 'repository', 'check_for_updates' ]
|
||||
params[ 'from_update_manager' ] = True
|
||||
try:
|
||||
# The value of text will be 'true' or 'false', depending upon whether there is an update available for the installed revision.
|
||||
text = util.url_get( tool_shed_url, password_mgr=app.tool_shed_registry.url_auth( tool_shed_url ), pathspec=pathspec, params=params )
|
||||
return dict( revision_update=text )
|
||||
except Exception as e:
|
||||
# The required tool shed may be unavailable, so default the revision_update value to 'false'.
|
||||
return dict( revision_update='false' )
|
||||
except Exception as e:
|
||||
log.exception( "Error attempting to get tool shed status for installed repository %s: %s" % ( str( repository.name ), str( e ) ) )
|
||||
return {}
|
||||
|
||||
|
||||
def get_tool_shed_repository_status_label( app, tool_shed_repository=None, name=None, owner=None, changeset_revision=None, repository_clone_url=None ):
|
||||
"""Return a color-coded label for the status of the received tool-shed_repository installed into Galaxy."""
|
||||
if tool_shed_repository is None:
|
||||
if name is not None and owner is not None and repository_clone_url is not None:
|
||||
tool_shed = get_tool_shed_from_clone_url( repository_clone_url )
|
||||
tool_shed_repository = get_installed_repository( app,
|
||||
tool_shed=tool_shed,
|
||||
name=name,
|
||||
owner=owner,
|
||||
installed_changeset_revision=changeset_revision )
|
||||
if tool_shed_repository:
|
||||
status_label = tool_shed_repository.status
|
||||
if tool_shed_repository.status in [ app.install_model.ToolShedRepository.installation_status.CLONING,
|
||||
app.install_model.ToolShedRepository.installation_status.SETTING_TOOL_VERSIONS,
|
||||
app.install_model.ToolShedRepository.installation_status.INSTALLING_REPOSITORY_DEPENDENCIES,
|
||||
app.install_model.ToolShedRepository.installation_status.INSTALLING_TOOL_DEPENDENCIES,
|
||||
app.install_model.ToolShedRepository.installation_status.LOADING_PROPRIETARY_DATATYPES ]:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.INSTALLING
|
||||
elif tool_shed_repository.status in [ app.install_model.ToolShedRepository.installation_status.NEW,
|
||||
app.install_model.ToolShedRepository.installation_status.UNINSTALLED ]:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.UNINSTALLED
|
||||
elif tool_shed_repository.status in [ app.install_model.ToolShedRepository.installation_status.ERROR ]:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.ERROR
|
||||
elif tool_shed_repository.status in [ app.install_model.ToolShedRepository.installation_status.DEACTIVATED ]:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.WARNING
|
||||
elif tool_shed_repository.status in [ app.install_model.ToolShedRepository.installation_status.INSTALLED ]:
|
||||
if tool_shed_repository.repository_dependencies_being_installed:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.WARNING
|
||||
status_label = '%s, %s' % ( status_label,
|
||||
app.install_model.ToolShedRepository.installation_status.INSTALLING_REPOSITORY_DEPENDENCIES )
|
||||
elif tool_shed_repository.missing_repository_dependencies:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.WARNING
|
||||
status_label = '%s, missing repository dependencies' % status_label
|
||||
elif tool_shed_repository.tool_dependencies_being_installed:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.WARNING
|
||||
status_label = '%s, %s' % ( status_label,
|
||||
app.install_model.ToolShedRepository.installation_status.INSTALLING_TOOL_DEPENDENCIES )
|
||||
elif tool_shed_repository.missing_tool_dependencies:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.WARNING
|
||||
status_label = '%s, missing tool dependencies' % status_label
|
||||
else:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.OK
|
||||
else:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.ERROR
|
||||
else:
|
||||
bgcolor = app.install_model.ToolShedRepository.states.WARNING
|
||||
status_label = 'unknown status'
|
||||
return '<div class="count-box state-color-%s">%s</div>' % ( bgcolor, status_label )
|
||||
|
||||
|
||||
def get_updated_changeset_revisions( app, name, owner, changeset_revision ):
|
||||
"""
|
||||
Return a string of comma-separated changeset revision hashes for all available updates to the received changeset
|
||||
revision for the repository defined by the received name and owner.
|
||||
"""
|
||||
repository = get_repository_by_name_and_owner( app, name, owner )
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
# Get the upper bound changeset revision.
|
||||
upper_bound_changeset_revision = get_next_downloadable_changeset_revision( repository, repo, changeset_revision )
|
||||
# Build the list of changeset revision hashes defining each available update up to, but excluding
|
||||
# upper_bound_changeset_revision.
|
||||
changeset_hashes = []
|
||||
for changeset in hg_util.reversed_lower_upper_bounded_changelog( repo, changeset_revision, upper_bound_changeset_revision ):
|
||||
# Make sure to exclude upper_bound_changeset_revision.
|
||||
if changeset != upper_bound_changeset_revision:
|
||||
changeset_hashes.append( str( repo.changectx( changeset ) ) )
|
||||
if changeset_hashes:
|
||||
changeset_hashes_str = ','.join( changeset_hashes )
|
||||
return changeset_hashes_str
|
||||
return ''
|
||||
|
||||
|
||||
def get_updated_changeset_revisions_from_tool_shed( app, tool_shed_url, name, owner, changeset_revision ):
|
||||
"""
|
||||
Get all appropriate newer changeset revisions for the repository defined by
|
||||
the received tool_shed_url / name / owner combination.
|
||||
"""
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( app, tool_shed_url )
|
||||
if tool_shed_url is None or name is None or owner is None or changeset_revision is None:
|
||||
message = "Unable to get updated changeset revisions from the Tool Shed because one or more of the following "
|
||||
message += "required parameters is None: tool_shed_url: %s, name: %s, owner: %s, changeset_revision: %s " % \
|
||||
( str( tool_shed_url ), str( name ), str( owner ), str( changeset_revision ) )
|
||||
raise Exception( message )
|
||||
params = dict( name=name, owner=owner, changeset_revision=changeset_revision )
|
||||
pathspec = [ 'repository', 'updated_changeset_revisions' ]
|
||||
text = util.url_get( tool_shed_url, password_mgr=app.tool_shed_registry.url_auth( tool_shed_url ), pathspec=pathspec, params=params )
|
||||
return text
|
||||
|
||||
|
||||
def get_user( app, id ):
|
||||
"""Get a user from the database by id."""
|
||||
sa_session = app.model.context.current
|
||||
return sa_session.query( app.model.User ).get( app.security.decode_id( id ) )
|
||||
|
||||
|
||||
def get_user_by_username( app, username ):
|
||||
"""Get a user from the database by username."""
|
||||
sa_session = app.model.context.current
|
||||
try:
|
||||
user = sa_session.query( app.model.User ) \
|
||||
.filter( app.model.User.table.c.username == username ) \
|
||||
.one()
|
||||
return user
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def handle_email_alerts( app, host, repository, content_alert_str='', new_repo_alert=False, admin_only=False ):
|
||||
"""
|
||||
There are 2 complementary features that enable a tool shed user to receive email notification:
|
||||
@@ -1077,7 +403,7 @@ def handle_email_alerts( app, host, repository, content_alert_str='', new_repo_a
|
||||
"""
|
||||
sa_session = app.model.context.current
|
||||
repo = hg_util.get_repo_for_repository( app, repository=repository, repo_path=None, create=False )
|
||||
sharable_link = generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=None )
|
||||
sharable_link = tool_shed.util.repository_util.generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=None )
|
||||
smtp_server = app.config.smtp_server
|
||||
if smtp_server and ( new_repo_alert or repository.email_alerts ):
|
||||
# Send email alert to users that want them.
|
||||
@@ -1149,14 +475,39 @@ def have_shed_tool_conf_for_install( app ):
|
||||
return bool( app.toolbox.dynamic_confs( include_migrated_tool_conf=False ) )
|
||||
|
||||
|
||||
def is_tool_shed_client( app ):
|
||||
def is_path_browsable( app, path, repository_id, is_admin=False ):
|
||||
"""
|
||||
The tool shed and clients to the tool (i.e. Galaxy) require a lot
|
||||
of similar functionality in this file but with small differences. This
|
||||
method should determine if the app performing the action is the tool shed
|
||||
or a client of the tool shed.
|
||||
Detects whether the given path is browsable i.e. is within the
|
||||
allowed repository folders. Admins can additionaly browse folders
|
||||
with tool dependencies.
|
||||
"""
|
||||
return hasattr( app, "install_model" )
|
||||
if is_admin and is_path_within_dependency_dir( app, path ):
|
||||
return True
|
||||
return is_path_within_repo( app, path, repository_id)
|
||||
|
||||
|
||||
def is_path_within_dependency_dir( app, path ):
|
||||
"""
|
||||
Detect whether the given path is within the tool_dependency_dir folder on the disk.
|
||||
(Specified by the config option). Use to filter malicious symlinks targeting outside paths.
|
||||
"""
|
||||
allowed = False
|
||||
resolved_path = os.path.realpath( path )
|
||||
tool_dependency_dir = app.config.get( 'tool_dependency_dir', None )
|
||||
if tool_dependency_dir:
|
||||
dependency_path = os.path.abspath( tool_dependency_dir )
|
||||
allowed = os.path.commonprefix( [ dependency_path, resolved_path ] ) == dependency_path
|
||||
return allowed
|
||||
|
||||
|
||||
def is_path_within_repo( app, path, repository_id ):
|
||||
"""
|
||||
Detect whether the given path is within the repository folder on the disk.
|
||||
Use to filter malicious symlinks targeting outside paths.
|
||||
"""
|
||||
repo_path = os.path.abspath( tool_shed.util.repository_util.get_repository_by_id( app, repository_id ).repo_path( app ) )
|
||||
resolved_path = os.path.realpath( path )
|
||||
return os.path.commonprefix( [ repo_path, resolved_path ] ) == repo_path
|
||||
|
||||
|
||||
def open_repository_files_folder( app, folder_path, repository_id, is_admin=False ):
|
||||
@@ -1196,84 +547,6 @@ def open_repository_files_folder( app, folder_path, repository_id, is_admin=Fals
|
||||
return folder_contents
|
||||
|
||||
|
||||
def is_path_browsable( app, path, repository_id, is_admin=False ):
|
||||
"""
|
||||
Detects whether the given path is browsable i.e. is within the
|
||||
allowed repository folders. Admins can additionaly browse folders
|
||||
with tool dependencies.
|
||||
"""
|
||||
if is_admin and is_path_within_dependency_dir( app, path ):
|
||||
return True
|
||||
return is_path_within_repo( app, path, repository_id)
|
||||
|
||||
|
||||
def is_path_within_repo( app, path, repository_id ):
|
||||
"""
|
||||
Detect whether the given path is within the repository folder on the disk.
|
||||
Use to filter malicious symlinks targeting outside paths.
|
||||
"""
|
||||
repo_path = os.path.abspath( get_repository_by_id( app, repository_id ).repo_path( app ) )
|
||||
resolved_path = os.path.realpath( path )
|
||||
return os.path.commonprefix( [ repo_path, resolved_path ] ) == repo_path
|
||||
|
||||
|
||||
def is_path_within_dependency_dir( app, path ):
|
||||
"""
|
||||
Detect whether the given path is within the tool_dependency_dir folder on the disk.
|
||||
(Specified by the config option). Use to filter malicious symlinks targeting outside paths.
|
||||
"""
|
||||
allowed = False
|
||||
resolved_path = os.path.realpath( path )
|
||||
tool_dependency_dir = app.config.get( 'tool_dependency_dir', None )
|
||||
if tool_dependency_dir:
|
||||
dependency_path = os.path.abspath( tool_dependency_dir )
|
||||
allowed = os.path.commonprefix( [ dependency_path, resolved_path ] ) == dependency_path
|
||||
return allowed
|
||||
|
||||
|
||||
def repository_was_previously_installed( app, tool_shed_url, repository_name, repo_info_tuple, from_tip=False ):
|
||||
"""
|
||||
Find out if a repository is already installed into Galaxy - there are several scenarios where this
|
||||
is necessary. For example, this method will handle the case where the repository was previously
|
||||
installed using an older changeset_revsion, but later the repository was updated in the tool shed
|
||||
and now we're trying to install the latest changeset revision of the same repository instead of
|
||||
updating the one that was previously installed. We'll look in the database instead of on disk since
|
||||
the repository may be currently uninstalled.
|
||||
"""
|
||||
tool_shed_url = common_util.get_tool_shed_url_from_tool_shed_registry( app, tool_shed_url )
|
||||
description, repository_clone_url, changeset_revision, ctx_rev, repository_owner, repository_dependencies, tool_dependencies = \
|
||||
get_repo_info_tuple_contents( repo_info_tuple )
|
||||
tool_shed = get_tool_shed_from_clone_url( repository_clone_url )
|
||||
# See if we can locate the repository using the value of changeset_revision.
|
||||
tool_shed_repository = get_installed_repository( app,
|
||||
tool_shed=tool_shed,
|
||||
name=repository_name,
|
||||
owner=repository_owner,
|
||||
installed_changeset_revision=changeset_revision )
|
||||
if tool_shed_repository:
|
||||
return tool_shed_repository, changeset_revision
|
||||
# Get all previous changeset revisions from the tool shed for the repository back to, but excluding,
|
||||
# the previous valid changeset revision to see if it was previously installed using one of them.
|
||||
params = dict( galaxy_url=url_for( '/', qualified=True ),
|
||||
name=repository_name,
|
||||
owner=repository_owner,
|
||||
changeset_revision=changeset_revision,
|
||||
from_tip=str( from_tip ) )
|
||||
pathspec = [ 'repository', 'previous_changeset_revisions' ]
|
||||
text = util.url_get( tool_shed_url, password_mgr=app.tool_shed_registry.url_auth( tool_shed_url ), pathspec=pathspec, params=params )
|
||||
if text:
|
||||
changeset_revisions = util.listify( text )
|
||||
for previous_changeset_revision in changeset_revisions:
|
||||
tool_shed_repository = get_installed_repository( app,
|
||||
tool_shed=tool_shed,
|
||||
name=repository_name,
|
||||
owner=repository_owner,
|
||||
installed_changeset_revision=previous_changeset_revision )
|
||||
if tool_shed_repository:
|
||||
return tool_shed_repository, previous_changeset_revision
|
||||
return None, None
|
||||
|
||||
|
||||
def set_image_paths( app, encoded_repository_id, text ):
|
||||
"""
|
||||
Handle tool help image display for tools that are contained in repositories in
|
||||
@@ -1282,7 +555,7 @@ def set_image_paths( app, encoded_repository_id, text ):
|
||||
return the path to it that will enable the caller to open the file.
|
||||
"""
|
||||
if text:
|
||||
if is_tool_shed_client( app ):
|
||||
if tool_shed.util.repository_util.is_tool_shed_client( app ):
|
||||
route_to_images = 'admin_toolshed/static/images/%s' % encoded_repository_id
|
||||
else:
|
||||
# We're in the tool shed.
|
||||
@@ -1300,24 +573,6 @@ def set_image_paths( app, encoded_repository_id, text ):
|
||||
return text
|
||||
|
||||
|
||||
def set_repository_attributes( app, repository, status, error_message, deleted, uninstalled, remove_from_disk=False ):
|
||||
if remove_from_disk:
|
||||
relative_install_dir = repository.repo_path( app )
|
||||
if relative_install_dir:
|
||||
clone_dir = os.path.abspath( relative_install_dir )
|
||||
try:
|
||||
shutil.rmtree( clone_dir )
|
||||
log.debug( "Removed repository installation directory: %s" % str( clone_dir ) )
|
||||
except Exception as e:
|
||||
log.debug( "Error removing repository installation directory %s: %s" % ( str( clone_dir ), str( e ) ) )
|
||||
repository.error_message = error_message
|
||||
repository.status = status
|
||||
repository.deleted = deleted
|
||||
repository.uninstalled = uninstalled
|
||||
app.install_model.context.add( repository )
|
||||
app.install_model.context.flush()
|
||||
|
||||
|
||||
def tool_shed_is_this_tool_shed( toolshed_base_url ):
|
||||
"""Determine if a tool shed is the current tool shed."""
|
||||
cleaned_toolshed_base_url = common_util.remove_protocol_from_tool_shed_url( toolshed_base_url )
|
||||
|
||||
@@ -18,7 +18,7 @@ from tool_shed.tools import tool_validator
|
||||
|
||||
from tool_shed.util import encoding_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -164,7 +164,7 @@ def generate_workflow_image( trans, workflow_name, repository_metadata_id=None,
|
||||
metadata = repository_metadata.metadata
|
||||
else:
|
||||
# We're in Galaxy.
|
||||
repository = suc.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
repository = repository_util.get_tool_shed_repository_by_id( trans.app, repository_id )
|
||||
changeset_revision = repository.changeset_revision
|
||||
metadata = repository.metadata
|
||||
# metadata[ 'workflows' ] is a list of tuples where each contained tuple is
|
||||
|
||||
@@ -3,7 +3,7 @@ import logging
|
||||
from galaxy import util
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import container_util
|
||||
from tool_shed.util import shed_util_common as suc
|
||||
from tool_shed.util import repository_util
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -701,8 +701,8 @@ class UtilityContainerManager( object ):
|
||||
tool_shed_repository_id = None
|
||||
installation_status = 'unknown'
|
||||
if tool_shed_repository_id:
|
||||
tool_shed_repository = suc.get_tool_shed_repository_by_id( self.app,
|
||||
self.app.security.encode_id( tool_shed_repository_id ) )
|
||||
tool_shed_repository = repository_util.get_tool_shed_repository_by_id( self.app,
|
||||
self.app.security.encode_id( tool_shed_repository_id ) )
|
||||
if tool_shed_repository:
|
||||
if tool_shed_repository.missing_repository_dependencies:
|
||||
installation_status = '%s, missing repository dependencies' % installation_status
|
||||
@@ -720,7 +720,7 @@ class UtilityContainerManager( object ):
|
||||
def handle_repository_dependencies_container_entry( self, repository_dependencies_folder, rd_key, rd_value, folder_id,
|
||||
repository_dependency_id, folder_keys ):
|
||||
repository_components_tuple = container_util.get_components_from_key( rd_key )
|
||||
components_list = suc.extract_components_from_tuple( repository_components_tuple )
|
||||
components_list = repository_util.extract_components_from_tuple( repository_components_tuple )
|
||||
toolshed, repository_name, repository_owner, changeset_revision = components_list[ 0:4 ]
|
||||
# For backward compatibility to the 12/20/12 Galaxy release.
|
||||
if len( components_list ) == 4:
|
||||
@@ -802,7 +802,7 @@ class UtilityContainerManager( object ):
|
||||
def key_is_current_repositorys_key( self, repository_name, repository_owner, changeset_revision,
|
||||
prior_installation_required, only_if_compiling_contained_td, key ):
|
||||
repository_components_tuple = container_util.get_components_from_key( key )
|
||||
components_list = suc.extract_components_from_tuple( repository_components_tuple )
|
||||
components_list = repository_util.extract_components_from_tuple( repository_components_tuple )
|
||||
toolshed, key_name, key_owner, key_changeset_revision = components_list[ 0:4 ]
|
||||
# For backward compatibility to the 12/20/12 Galaxy release.
|
||||
if len( components_list ) == 4:
|
||||
|
||||
@@ -41,7 +41,7 @@ ${render_galaxy_repository_actions( repository )}
|
||||
<form name="repair_repository" id="repair_repository" action="${h.url_for( controller='admin_toolshed', action='repair_repository', id=trans.security.encode_id( repository.id ) )}" method="post" >
|
||||
<input type="hidden" name="repair_dict" value="${encoded_repair_dict|h}"/>
|
||||
<%
|
||||
from tool_shed.util.shed_util_common import get_tool_shed_repository_status_label
|
||||
from tool_shed.util.repository_util import get_tool_shed_repository_status_label
|
||||
ordered_repo_info_dicts = repair_dict.get( 'ordered_repo_info_dicts', [] )
|
||||
%>
|
||||
<table class="grid">
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
|
||||
<%def name="render_sharable_str( repository, changeset_revision=None )">
|
||||
<%
|
||||
from tool_shed.util.shed_util_common import generate_sharable_link_for_repository_in_tool_shed
|
||||
from tool_shed.util.repository_util import generate_sharable_link_for_repository_in_tool_shed
|
||||
sharable_link = generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=changeset_revision )
|
||||
%>
|
||||
<a href="${ sharable_link }" target="_blank">${ sharable_link }</a>
|
||||
@@ -575,7 +575,7 @@
|
||||
<%def name="render_repository_dependency( repository_dependency, pad, parent, row_counter, row_is_header=False, render_repository_actions_for='tool_shed' )">
|
||||
<%
|
||||
from galaxy.util import asbool
|
||||
from tool_shed.util.shed_util_common import get_repository_by_name_and_owner
|
||||
from tool_shed.util.repository_util import get_repository_by_name_and_owner
|
||||
encoded_id = trans.security.encode_id( repository_dependency.id )
|
||||
if trans.webapp.name == 'galaxy':
|
||||
if repository_dependency.tool_shed_repository_id:
|
||||
|
||||
@@ -700,6 +700,12 @@ class ShedTwillTestCase( TwillTestCase ):
|
||||
last_review = None
|
||||
return last_review
|
||||
|
||||
def get_repositories_category_api( self, categories, strings_displayed=None, strings_not_displayed=None ):
|
||||
for category in categories:
|
||||
url = '/api/categories/%s/repositories' % self.security.encode_id( category.id )
|
||||
self.visit_url( url )
|
||||
self.check_for_strings( strings_displayed, strings_not_displayed )
|
||||
|
||||
def get_tool_dependency_path( self, tool_dependency_name, tool_dependency_version, repository ):
|
||||
'''Return the absolute path for an installed tool dependency.'''
|
||||
return os.path.join( self.galaxy_tool_dependency_dir,
|
||||
|
||||
@@ -349,3 +349,10 @@ class TestBasicRepositoryFeatures( ShedTwillTestCase ):
|
||||
strings_displayed = [ '%d:%s' % ( revision_number, revision_hash ), 'filtering_0000', 'user1', 'repos', 'added:',
|
||||
'+These characters should not' ]
|
||||
self.load_changeset_in_tool_shed( repository_id, changeset_revision, strings_displayed=strings_displayed )
|
||||
|
||||
def test_0135_api_get_repositories_in_category( self ):
|
||||
'''Load the api endpoint for repositories in a category.'''
|
||||
categories = []
|
||||
categories.append( self.test_db_util.get_category_by_name( 'Test 0000 Basic Repository Features 1' ) )
|
||||
categories.append( self.test_db_util.get_category_by_name( 'Test 0000 Basic Repository Features 2' ) )
|
||||
self.get_repositories_category_api( categories )
|
||||
|
||||
@@ -21,8 +21,9 @@ class BasicToolShedFeatures( ShedTwillTestCase ):
|
||||
|
||||
def test_0005_ensure_repositories_and_categories_exist( self ):
|
||||
'''Create the 0000 category and upload the filtering repository to it, if necessary.'''
|
||||
category = self.create_category( name='Test 0000 Basic Repository Features 1', description='Test 0000 Basic Repository Features 1' )
|
||||
self.create_category( name='Test 0000 Basic Repository Features 2', description='Test 0000 Basic Repository Features 2' )
|
||||
self.login( email=common.admin_email, username=common.admin_username )
|
||||
category = self.create_category( name='Test 0000 Basic Repository Features 2', description='Test Description 0000 Basic Repository Features 2' )
|
||||
category = self.create_category( name='Test 0000 Basic Repository Features 1', description='Test Description 0000 Basic Repository Features 1' )
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
repository = self.get_or_create_repository( name='filtering_0000',
|
||||
description="Galaxy's filtering tool",
|
||||
|
||||
Reference in New Issue
Block a user