mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Change function signatures for several utility functions that used to require trans but now only need app.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
|
||||
from admin import AdminGalaxy
|
||||
from galaxy import eggs
|
||||
from galaxy import web
|
||||
@@ -10,7 +11,10 @@ from galaxy.web.framework.helpers import grids
|
||||
from galaxy.web.framework.helpers import iff
|
||||
from galaxy.util import json
|
||||
from galaxy.model.orm import or_
|
||||
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
import tool_shed.repository_types.util as rt_util
|
||||
|
||||
from tool_shed.util import common_util
|
||||
from tool_shed.util import common_install_util
|
||||
from tool_shed.util import data_manager_util
|
||||
@@ -26,6 +30,7 @@ from tool_shed.util import workflow_util
|
||||
from tool_shed.util import xml_util
|
||||
from tool_shed.galaxy_install import repository_util
|
||||
import tool_shed.galaxy_install.grids.admin_toolshed_grids as admin_toolshed_grids
|
||||
|
||||
import pkg_resources
|
||||
|
||||
eggs.require( 'mercurial' )
|
||||
@@ -458,7 +463,7 @@ class AdminToolshed( AdminGalaxy ):
|
||||
err_msg = ''
|
||||
tool_shed_repository = tool_dependencies[ 0 ].tool_shed_repository
|
||||
# Get the tool_dependencies.xml file from the repository.
|
||||
tool_dependencies_config = suc.get_config_from_disk( suc.TOOL_DEPENDENCY_DEFINITION_FILENAME,
|
||||
tool_dependencies_config = suc.get_config_from_disk( rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME,
|
||||
tool_shed_repository.repo_path( trans.app ) )
|
||||
installed_tool_dependencies = \
|
||||
common_install_util.install_specified_packages( app=trans.app,
|
||||
|
||||
@@ -1713,11 +1713,14 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
changeset_revision = kwd.get( 'changeset_revision', None )
|
||||
repository = suc.get_repository_by_name_and_owner( trans.app, name, owner )
|
||||
repository_id = trans.security.encode_id( repository.id )
|
||||
# We aren't concerned with repositories of type tool_dependency_definition here if a repository_metadata record is not returned
|
||||
# because repositories of this type will never 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( trans, repository, changeset_revision )
|
||||
# We aren't concerned with repositories of type tool_dependency_definition here if a
|
||||
# repository_metadata record is not returned because repositories of this type will never
|
||||
# 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( trans.app,
|
||||
repository,
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
metadata = repository_metadata.metadata
|
||||
if metadata:
|
||||
@@ -1838,7 +1841,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
#manafest.
|
||||
repo_dir = repository.repo_path( trans.app )
|
||||
# Get the tool_dependencies.xml file from disk.
|
||||
tool_dependencies_config = suc.get_config_from_disk( suc.TOOL_DEPENDENCY_DEFINITION_FILENAME, repo_dir )
|
||||
tool_dependencies_config = suc.get_config_from_disk( rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME, repo_dir )
|
||||
# Return the encoded contents of the tool_dependencies.xml file.
|
||||
if tool_dependencies_config:
|
||||
tool_dependencies_config_file = open( tool_dependencies_config, 'rb' )
|
||||
@@ -2362,13 +2365,15 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
handled_key_rd_dicts=None )
|
||||
if str( repository.type ) != rt_util.REPOSITORY_SUITE_DEFINITION:
|
||||
# Handle messaging for resetting repository type to the optimal value.
|
||||
change_repository_type_message = suc.generate_message_for_repository_type_change( trans, repository )
|
||||
change_repository_type_message = rt_util.generate_message_for_repository_type_change( trans.app,
|
||||
repository )
|
||||
if change_repository_type_message:
|
||||
message += change_repository_type_message
|
||||
status = 'warning'
|
||||
elif str( repository.type ) != rt_util.TOOL_DEPENDENCY_DEFINITION:
|
||||
# Handle messaging for resetting repository type to the optimal value.
|
||||
change_repository_type_message = suc.generate_message_for_repository_type_change( trans, repository )
|
||||
change_repository_type_message = rt_util.generate_message_for_repository_type_change( trans.app,
|
||||
repository )
|
||||
if change_repository_type_message:
|
||||
message += change_repository_type_message
|
||||
status = 'warning'
|
||||
@@ -3245,7 +3250,7 @@ class RepositoryController( BaseUIController, ratings_util.ItemRatings ):
|
||||
status = 'warning'
|
||||
else:
|
||||
metadata = None
|
||||
is_malicious = suc.changeset_is_malicious( trans, id, repository.tip( trans.app ) )
|
||||
is_malicious = suc.changeset_is_malicious( trans.app, id, repository.tip( trans.app ) )
|
||||
if is_malicious:
|
||||
if trans.app.security_agent.can_push( trans.app, trans.user, repository ):
|
||||
message += malicious_error_can_push
|
||||
|
||||
@@ -149,12 +149,12 @@ class UploadController( BaseUIController ):
|
||||
isgzip=isgzip,
|
||||
isbz2=isbz2 )
|
||||
if repository.type == rt_util.REPOSITORY_SUITE_DEFINITION and \
|
||||
uploaded_file_filename != suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
uploaded_file_filename != rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
ok = False
|
||||
message = 'Repositories of type <b>Repository suite definition</b> can only contain a single file named '
|
||||
message += '<b>repository_dependencies.xml</b>.'
|
||||
elif repository.type == rt_util.TOOL_DEPENDENCY_DEFINITION and \
|
||||
uploaded_file_filename != suc.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
uploaded_file_filename != rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
ok = False
|
||||
message = 'Repositories of type <b>Tool dependency definition</b> can only contain a single file named '
|
||||
message += '<b>tool_dependencies.xml</b>.'
|
||||
@@ -164,7 +164,7 @@ class UploadController( BaseUIController ):
|
||||
else:
|
||||
full_path = os.path.abspath( os.path.join( repo_dir, uploaded_file_filename ) )
|
||||
# Move some version of the uploaded file to the load_point within the repository hierarchy.
|
||||
if uploaded_file_filename in [ suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME ]:
|
||||
if uploaded_file_filename in [ rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME ]:
|
||||
# Inspect the contents of the file to see if changeset_revision values are missing and if so,
|
||||
# set them appropriately.
|
||||
altered, root_elem, error_message = \
|
||||
@@ -180,8 +180,8 @@ class UploadController( BaseUIController ):
|
||||
shutil.move( tmp_filename, full_path )
|
||||
else:
|
||||
shutil.move( uploaded_file_name, full_path )
|
||||
elif uploaded_file_filename in [ suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME,
|
||||
suc.TOOL_DEPENDENCY_DEFINITION_FILENAME ]:
|
||||
elif uploaded_file_filename in [ rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME,
|
||||
rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME ]:
|
||||
# Inspect the contents of the file to see if changeset_revision values are
|
||||
# missing and if so, set them appropriately.
|
||||
altered, root_elem, error_message = \
|
||||
@@ -264,7 +264,8 @@ class UploadController( BaseUIController ):
|
||||
metadata_dict = {}
|
||||
if str( repository.type ) not in [ rt_util.REPOSITORY_SUITE_DEFINITION,
|
||||
rt_util.TOOL_DEPENDENCY_DEFINITION ]:
|
||||
change_repository_type_message = suc.generate_message_for_repository_type_change( trans, repository )
|
||||
change_repository_type_message = rt_util.generate_message_for_repository_type_change( trans.app,
|
||||
repository )
|
||||
if change_repository_type_message:
|
||||
message += change_repository_type_message
|
||||
status = 'warning'
|
||||
@@ -336,9 +337,9 @@ class UploadController( BaseUIController ):
|
||||
for uploaded_file in files:
|
||||
relative_path = os.path.normpath( os.path.join( os.path.relpath( root, uploaded_directory ), uploaded_file ) )
|
||||
if repository.type == rt_util.REPOSITORY_SUITE_DEFINITION:
|
||||
ok = os.path.basename( uploaded_file ) == suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME
|
||||
ok = os.path.basename( uploaded_file ) == rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME
|
||||
elif repository.type == rt_util.TOOL_DEPENDENCY_DEFINITION:
|
||||
ok = os.path.basename( uploaded_file ) == suc.TOOL_DEPENDENCY_DEFINITION_FILENAME
|
||||
ok = os.path.basename( uploaded_file ) == rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME
|
||||
else:
|
||||
ok = os.path.basename( uploaded_file ) not in commit_util.UNDESIRABLE_FILES
|
||||
if ok:
|
||||
@@ -351,7 +352,7 @@ class UploadController( BaseUIController ):
|
||||
undesirable_files_removed += 1
|
||||
if ok:
|
||||
uploaded_file_name = os.path.abspath( os.path.join( root, uploaded_file ) )
|
||||
if os.path.split( uploaded_file_name )[ -1 ] == suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if os.path.split( uploaded_file_name )[ -1 ] == rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Inspect the contents of the file to see if changeset_revision values are missing and
|
||||
# if so, set them appropriately.
|
||||
altered, root_elem, error_message = \
|
||||
@@ -363,7 +364,7 @@ class UploadController( BaseUIController ):
|
||||
elif altered:
|
||||
tmp_filename = xml_util.create_and_write_tmp_file( root_elem )
|
||||
shutil.move( tmp_filename, uploaded_file_name )
|
||||
elif os.path.split( uploaded_file_name )[ -1 ] == suc.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
elif os.path.split( uploaded_file_name )[ -1 ] == rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Inspect the contents of the file to see if changeset_revision values are missing and if so, set them appropriately.
|
||||
altered, root_elem, error_message = commit_util.handle_tool_dependencies_definition( trans, uploaded_file_name )
|
||||
if error_message:
|
||||
@@ -420,7 +421,7 @@ class UploadController( BaseUIController ):
|
||||
uploaded_file.close()
|
||||
for filename in filenames_in_archive:
|
||||
uploaded_file_name = os.path.join( full_path, filename )
|
||||
if os.path.split( uploaded_file_name )[ -1 ] == suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if os.path.split( uploaded_file_name )[ -1 ] == rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Inspect the contents of the file to see if changeset_revision values are missing and if so, set them appropriately.
|
||||
altered, root_elem, error_message = commit_util.handle_repository_dependencies_definition( trans,
|
||||
uploaded_file_name,
|
||||
@@ -430,7 +431,7 @@ class UploadController( BaseUIController ):
|
||||
elif altered:
|
||||
tmp_filename = xml_util.create_and_write_tmp_file( root_elem )
|
||||
shutil.move( tmp_filename, uploaded_file_name )
|
||||
elif os.path.split( uploaded_file_name )[ -1 ] == suc.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
elif os.path.split( uploaded_file_name )[ -1 ] == rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Inspect the contents of the file to see if changeset_revision values are missing and if so, set them appropriately.
|
||||
altered, root_elem, error_message = commit_util.handle_tool_dependencies_definition( trans, uploaded_file_name )
|
||||
if error_message:
|
||||
|
||||
@@ -131,7 +131,7 @@ class Hg( object ):
|
||||
# We possibly found an altered file entry.
|
||||
filename, change_list = entry
|
||||
if filename and isinstance( filename, str ):
|
||||
if filename == suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if filename == rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Make sure the any complex repository dependency definitions contain valid <repository> tags.
|
||||
is_valid, error_msg = commit_util.repository_tags_are_valid( filename, change_list )
|
||||
if not is_valid:
|
||||
@@ -150,7 +150,7 @@ class Hg( object ):
|
||||
# We possibly found an altered file entry.
|
||||
filename, change_list = entry
|
||||
if filename and isinstance( filename, str ):
|
||||
if filename == suc.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if filename == rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Make sure the any complex repository dependency definitions contain valid <repository> tags.
|
||||
is_valid, error_msg = commit_util.repository_tags_are_valid( filename, change_list )
|
||||
if not is_valid:
|
||||
@@ -171,8 +171,8 @@ class Hg( object ):
|
||||
# We possibly found an altered file entry.
|
||||
filename, change_list = entry
|
||||
if filename and isinstance( filename, str ):
|
||||
if filename in [ suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME,
|
||||
suc.TOOL_DEPENDENCY_DEFINITION_FILENAME ]:
|
||||
if filename in [ rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME,
|
||||
rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME ]:
|
||||
# We check both files since tool dependency definitions files can contain complex
|
||||
# repository dependency definitions.
|
||||
is_valid, error_msg = commit_util.repository_tags_are_valid( filename, change_list )
|
||||
|
||||
@@ -3,9 +3,11 @@ from galaxy.web.form_builder import SelectField
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
UNRESTRICTED = 'unrestricted'
|
||||
REPOSITORY_DEPENDENCY_DEFINITION_FILENAME = 'repository_dependencies.xml'
|
||||
REPOSITORY_SUITE_DEFINITION = 'repository_suite_definition'
|
||||
TOOL_DEPENDENCY_DEFINITION = 'tool_dependency_definition'
|
||||
TOOL_DEPENDENCY_DEFINITION_FILENAME = 'tool_dependencies.xml'
|
||||
UNRESTRICTED = 'unrestricted'
|
||||
|
||||
types = [ UNRESTRICTED, TOOL_DEPENDENCY_DEFINITION, REPOSITORY_SUITE_DEFINITION ]
|
||||
|
||||
@@ -31,3 +33,22 @@ def build_repository_type_select_field( trans, repository=None, name='repository
|
||||
else:
|
||||
repository_type_select_field.add_option( option_label, option_value, selected=selected )
|
||||
return repository_type_select_field
|
||||
|
||||
def generate_message_for_repository_type_change( app, repository ):
|
||||
message = ''
|
||||
if repository.can_change_type_to( app, REPOSITORY_SUITE_DEFINITION ):
|
||||
repository_suite_definition_type_class = \
|
||||
app.repository_types_registry.get_class_by_label( REPOSITORY_SUITE_DEFINITION )
|
||||
message += "This repository currently contains a single file named <b>%s</b>. If the intent of this repository is " % \
|
||||
REPOSITORY_DEPENDENCY_DEFINITION_FILENAME
|
||||
message += "to define relationships to a collection of repositories that contain related Galaxy utilities with "
|
||||
message += "no plans to add additional files, consider setting its type to <b>%s</b>.<br/>" % \
|
||||
repository_suite_definition_type_class.label
|
||||
elif repository.can_change_type_to( app, TOOL_DEPENDENCY_DEFINITION ):
|
||||
tool_dependency_definition_type_class = \
|
||||
app.repository_types_registry.get_class_by_label( TOOL_DEPENDENCY_DEFINITION )
|
||||
message += "This repository currently contains a single file named <b>%s</b>. If additional files will " % \
|
||||
TOOL_DEPENDENCY_DEFINITION_FILENAME
|
||||
message += "not be added to this repository, consider setting its type to <b>%s</b>.<br/>" % \
|
||||
tool_dependency_definition_type_class.label
|
||||
return message
|
||||
|
||||
@@ -51,10 +51,10 @@ def check_archive( repository, archive ):
|
||||
if member.name in [ 'hgrc' ]:
|
||||
message = "Uploaded archives cannot contain hgrc files."
|
||||
return False, message
|
||||
if repository.type == rt_util.REPOSITORY_SUITE_DEFINITION and member.name != suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if repository.type == rt_util.REPOSITORY_SUITE_DEFINITION and member.name != rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
message = 'Repositories of type <b>Repsoitory suite definition</b> can contain only a single file named <b>repository_dependencies.xml</b>.'
|
||||
return False, message
|
||||
if repository.type == rt_util.TOOL_DEPENDENCY_DEFINITION and member.name != suc.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if repository.type == rt_util.TOOL_DEPENDENCY_DEFINITION and member.name != rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
message = 'Repositories of type <b>Tool dependency definition</b> can contain only a single file named <b>tool_dependencies.xml</b>.'
|
||||
return False, message
|
||||
return True, ''
|
||||
|
||||
@@ -7,6 +7,7 @@ import threading
|
||||
from time import gmtime
|
||||
from time import strftime
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
import tool_shed.repository_types.util as rt_util
|
||||
from galaxy import eggs
|
||||
from galaxy import web
|
||||
from galaxy.util.odict import odict
|
||||
@@ -71,7 +72,9 @@ def export_repository( trans, tool_shed_url, repository_id, repository_name, cha
|
||||
ordered_repositories = []
|
||||
ordered_changeset_revisions = []
|
||||
if repository:
|
||||
repository_metadata = suc.get_current_repository_metadata_for_changeset_revision( trans, repository, changeset_revision )
|
||||
repository_metadata = suc.get_current_repository_metadata_for_changeset_revision( trans.app,
|
||||
repository,
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
ordered_repository_ids = [ repository_id ]
|
||||
ordered_repositories = [ repository ]
|
||||
@@ -147,17 +150,19 @@ def generate_repository_archive( trans, work_dir, tool_shed_url, repository, cha
|
||||
full_path = os.path.join( root, name )
|
||||
relative_path = full_path.replace( work_dir, '' ).lstrip( '/' )
|
||||
# See if we have a repository dependencies defined.
|
||||
if name == suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if name == rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Eliminate the toolshed, and changeset_revision attributes from all <repository> tags.
|
||||
altered, root_elem, error_message = commit_util.handle_repository_dependencies_definition( trans, full_path, unpopulate=True )
|
||||
altered, root_elem, error_message = \
|
||||
commit_util.handle_repository_dependencies_definition( trans, full_path, unpopulate=True )
|
||||
if error_message:
|
||||
return None, error_message
|
||||
if altered:
|
||||
tmp_filename = xml_util.create_and_write_tmp_file( root_elem, use_indent=True )
|
||||
shutil.move( tmp_filename, full_path )
|
||||
elif name == suc.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
elif name == rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Eliminate the toolshed, and changeset_revision attributes from all <repository> tags.
|
||||
altered, root_elem, error_message = commit_util.handle_tool_dependencies_definition( trans, full_path, unpopulate=True )
|
||||
altered, root_elem, error_message = \
|
||||
commit_util.handle_tool_dependencies_definition( trans, full_path, unpopulate=True )
|
||||
if error_message:
|
||||
return None, error_message
|
||||
if altered:
|
||||
@@ -167,7 +172,8 @@ def generate_repository_archive( trans, work_dir, tool_shed_url, repository, cha
|
||||
repository_archive.close()
|
||||
return repository_archive, error_message
|
||||
|
||||
def generate_repository_archive_filename( tool_shed_url, name, owner, changeset_revision, file_type, export_repository_dependencies=False, use_tmp_archive_dir=False ):
|
||||
def generate_repository_archive_filename( tool_shed_url, name, owner, changeset_revision, file_type,
|
||||
export_repository_dependencies=False, use_tmp_archive_dir=False ):
|
||||
tool_shed = remove_protocol_from_tool_shed_url( tool_shed_url )
|
||||
file_type_str = suc.get_file_type_str( changeset_revision, file_type )
|
||||
if export_repository_dependencies:
|
||||
@@ -200,7 +206,9 @@ def get_components_from_repo_info_dict( trans, 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( trans.app, repository_name, repository_owner )
|
||||
repository_metadata = suc.get_current_repository_metadata_for_changeset_revision( trans, repository, changeset_revision )
|
||||
repository_metadata = suc.get_current_repository_metadata_for_changeset_revision( trans.app,
|
||||
repository,
|
||||
changeset_revision )
|
||||
if repository_metadata:
|
||||
return repository, repository_metadata.changeset_revision
|
||||
return None, None
|
||||
|
||||
@@ -12,6 +12,7 @@ from tool_shed.util import hg_util
|
||||
from tool_shed.util import metadata_util
|
||||
from tool_shed.util import xml_util
|
||||
import tool_shed.util.shed_util_common as suc
|
||||
import tool_shed.repository_types.util as rt_util
|
||||
|
||||
from galaxy import eggs
|
||||
eggs.require( 'mercurial' )
|
||||
@@ -240,7 +241,7 @@ def import_repository_archive( trans, repository, repository_archive_dict ):
|
||||
archive.close()
|
||||
for filename in filenames_in_archive:
|
||||
uploaded_file_name = os.path.join( full_path, filename )
|
||||
if os.path.split( uploaded_file_name )[ -1 ] == suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if os.path.split( uploaded_file_name )[ -1 ] == rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Inspect the contents of the file to see if changeset_revision values are missing and if so, set them appropriately.
|
||||
altered, root_elem, error_message = commit_util.handle_repository_dependencies_definition( trans,
|
||||
uploaded_file_name,
|
||||
@@ -251,7 +252,7 @@ def import_repository_archive( trans, repository, repository_archive_dict ):
|
||||
if altered:
|
||||
tmp_filename = xml_util.create_and_write_tmp_file( root_elem )
|
||||
shutil.move( tmp_filename, uploaded_file_name )
|
||||
elif os.path.split( uploaded_file_name )[ -1 ] == suc.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
elif os.path.split( uploaded_file_name )[ -1 ] == rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME:
|
||||
# Inspect the contents of the file to see if changeset_revision values are missing and if so, set them appropriately.
|
||||
altered, root_elem, error_message = commit_util.handle_tool_dependencies_definition( trans, uploaded_file_name )
|
||||
if error_message:
|
||||
|
||||
@@ -39,8 +39,8 @@ SUBSET = 'subset'
|
||||
SUBSET_VALUES = [ EQUAL, SUBSET ]
|
||||
|
||||
NOT_TOOL_CONFIGS = [ suc.DATATYPES_CONFIG_FILENAME,
|
||||
suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME,
|
||||
suc.TOOL_DEPENDENCY_DEFINITION_FILENAME,
|
||||
rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME,
|
||||
rt_util.TOOL_DEPENDENCY_DEFINITION_FILENAME,
|
||||
suc.REPOSITORY_DATA_MANAGER_CONFIG_FILENAME ]
|
||||
|
||||
def add_tool_versions( trans, id, repository_metadata, changeset_revisions ):
|
||||
@@ -49,7 +49,12 @@ def add_tool_versions( trans, id, repository_metadata, changeset_revisions ):
|
||||
tool_versions_dict = {}
|
||||
for tool_dict in metadata.get( 'tools', [] ):
|
||||
# We have at least 2 changeset revisions to compare tool guids and tool ids.
|
||||
parent_id = get_parent_id( trans, id, tool_dict[ 'id' ], tool_dict[ 'version' ], tool_dict[ 'guid' ], changeset_revisions )
|
||||
parent_id = get_parent_id( trans.app,
|
||||
id,
|
||||
tool_dict[ 'id' ],
|
||||
tool_dict[ 'version' ],
|
||||
tool_dict[ 'guid' ],
|
||||
changeset_revisions )
|
||||
tool_versions_dict[ tool_dict[ 'guid' ] ] = parent_id
|
||||
if tool_versions_dict:
|
||||
repository_metadata.tool_versions = tool_versions_dict
|
||||
@@ -662,7 +667,7 @@ def generate_metadata_for_changeset_revision( app, repository, changeset_revisio
|
||||
dirs.remove( '.hg' )
|
||||
for name in files:
|
||||
# See if we have a repository dependencies defined.
|
||||
if name == suc.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
if name == rt_util.REPOSITORY_DEPENDENCY_DEFINITION_FILENAME:
|
||||
path_to_repository_dependencies_config = os.path.join( root, name )
|
||||
metadata_dict, error_message = \
|
||||
generate_repository_dependency_metadata( app,
|
||||
@@ -1048,17 +1053,23 @@ def get_latest_repository_metadata( trans, decoded_repository_id, downloadable=F
|
||||
repository = trans.sa_session.query( trans.model.Repository ).get( decoded_repository_id )
|
||||
repo = hg.repository( hg_util.get_configured_ui(), repository.repo_path( trans.app ) )
|
||||
if downloadable:
|
||||
changeset_revision = suc.get_latest_downloadable_changeset_revision( trans.app, repository, repo )
|
||||
changeset_revision = suc.get_latest_downloadable_changeset_revision( trans.app,
|
||||
repository,
|
||||
repo )
|
||||
else:
|
||||
changeset_revision = suc.get_latest_changeset_revision( trans, repository, repo )
|
||||
return suc.get_repository_metadata_by_changeset_revision( trans.app, trans.security.encode_id( repository.id ), changeset_revision )
|
||||
changeset_revision = suc.get_latest_changeset_revision( trans.app,
|
||||
repository,
|
||||
repo )
|
||||
return suc.get_repository_metadata_by_changeset_revision( trans.app,
|
||||
trans.security.encode_id( repository.id ),
|
||||
changeset_revision )
|
||||
|
||||
def get_parent_id( trans, id, old_id, version, guid, changeset_revisions ):
|
||||
def get_parent_id( app, id, old_id, version, guid, changeset_revisions ):
|
||||
parent_id = None
|
||||
# Compare from most recent to oldest.
|
||||
changeset_revisions.reverse()
|
||||
for changeset_revision in changeset_revisions:
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( trans.app, id, changeset_revision )
|
||||
repository_metadata = suc.get_repository_metadata_by_changeset_revision( app, id, changeset_revision )
|
||||
metadata = repository_metadata.metadata
|
||||
tools_dicts = metadata.get( 'tools', [] )
|
||||
for tool_dict in tools_dicts:
|
||||
@@ -1709,7 +1720,7 @@ def reset_all_metadata_on_repository_in_tool_shed( trans, id ):
|
||||
tool_versions_dict[ tool_dict[ 'guid' ] ] = tool_dict[ 'id' ]
|
||||
else:
|
||||
for tool_dict in tool_dicts:
|
||||
parent_id = get_parent_id( trans,
|
||||
parent_id = get_parent_id( trans.app,
|
||||
id,
|
||||
tool_dict[ 'id' ],
|
||||
tool_dict[ 'version' ],
|
||||
|
||||
@@ -39,8 +39,6 @@ MAXDIFFSIZE = 8000
|
||||
MAX_DISPLAY_SIZE = 32768
|
||||
DATATYPES_CONFIG_FILENAME = 'datatypes_conf.xml'
|
||||
REPOSITORY_DATA_MANAGER_CONFIG_FILENAME = 'data_manager_conf.xml'
|
||||
REPOSITORY_DEPENDENCY_DEFINITION_FILENAME = 'repository_dependencies.xml'
|
||||
TOOL_DEPENDENCY_DEFINITION_FILENAME = 'tool_dependencies.xml'
|
||||
|
||||
new_repo_email_alert_template = """
|
||||
Sharable link: ${sharable_link}
|
||||
@@ -129,9 +127,9 @@ def build_tool_dependencies_select_field( trans, tool_shed_repository, name, mul
|
||||
tool_dependencies_select_field.add_option( option_label, option_value )
|
||||
return tool_dependencies_select_field
|
||||
|
||||
def changeset_is_malicious( trans, id, changeset_revision, **kwd ):
|
||||
def changeset_is_malicious( app, id, changeset_revision, **kwd ):
|
||||
"""Check the malicious flag in repository metadata for a specified change set"""
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( trans.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
|
||||
@@ -258,25 +256,6 @@ def extract_components_from_tuple( repository_components_tuple ):
|
||||
components_list = [ toolshed, name, owner, changeset_revision, prior_installation_required, only_if_compiling_contained_td ]
|
||||
return components_list
|
||||
|
||||
def generate_message_for_repository_type_change( trans, repository ):
|
||||
message = ''
|
||||
if repository.can_change_type_to( trans.app, rt_util.REPOSITORY_SUITE_DEFINITION ):
|
||||
repository_suite_definition_type_class = \
|
||||
trans.app.repository_types_registry.get_class_by_label( rt_util.REPOSITORY_SUITE_DEFINITION )
|
||||
message += "This repository currently contains a single file named <b>%s</b>. If the intent of this repository is " % \
|
||||
REPOSITORY_DEPENDENCY_DEFINITION_FILENAME
|
||||
message += "to define relationships to a collection of repositories that contain related Galaxy utilities with "
|
||||
message += "no plans to add additional files, consider setting its type to <b>%s</b>.<br/>" % \
|
||||
repository_suite_definition_type_class.label
|
||||
elif repository.can_change_type_to( trans.app, rt_util.TOOL_DEPENDENCY_DEFINITION ):
|
||||
tool_dependency_definition_type_class = \
|
||||
trans.app.repository_types_registry.get_class_by_label( rt_util.TOOL_DEPENDENCY_DEFINITION )
|
||||
message += "This repository currently contains a single file named <b>%s</b>. If additional files will " % \
|
||||
TOOL_DEPENDENCY_DEFINITION_FILENAME
|
||||
message += "not be added to this repository, consider setting its type to <b>%s</b>.<br/>" % \
|
||||
tool_dependency_definition_type_class.label
|
||||
return message
|
||||
|
||||
def generate_repository_info_elem( tool_shed, repository_name, changeset_revision, owner, parent_elem=None, **kwd ):
|
||||
"""Create and return an ElementTree repository info Element."""
|
||||
if parent_elem is None:
|
||||
@@ -306,7 +285,7 @@ def generate_repository_info_elem_from_repository( tool_shed_repository, parent_
|
||||
parent_elem=parent_elem,
|
||||
**kwd )
|
||||
|
||||
def generate_sharable_link_for_repository_in_tool_shed( trans, repository, changeset_revision=None ):
|
||||
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( '://' )
|
||||
@@ -486,16 +465,23 @@ def get_ctx_file_path_from_manifest( filename, repo, changeset_revision ):
|
||||
return manifest_ctx, ctx_file
|
||||
return None, None
|
||||
|
||||
def get_current_repository_metadata_for_changeset_revision( trans, repository, changeset_revision ):
|
||||
encoded_repository_id = trans.security.encode_id( repository.id )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( trans.app, encoded_repository_id, changeset_revision )
|
||||
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.repository( hg_util.get_configured_ui(), repository.repo_path( trans.app ) )
|
||||
updated_changeset_revision = get_next_downloadable_changeset_revision( repository, repo, after_changeset_revision=changeset_revision )
|
||||
# The installable changeset_revision may have been changed because it was "moved ahead"
|
||||
# in the repository changelog.
|
||||
repo = hg.repository( hg_util.get_configured_ui(), repository.repo_path( app ) )
|
||||
updated_changeset_revision = get_next_downloadable_changeset_revision( repository,
|
||||
repo,
|
||||
after_changeset_revision=changeset_revision )
|
||||
if updated_changeset_revision:
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( trans.app, encoded_repository_id, updated_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
|
||||
@@ -608,9 +594,11 @@ def get_installed_tool_shed_repository( trans, id ):
|
||||
"""Get a tool shed repository record from the Galaxy database defined by the id."""
|
||||
return trans.install_model.context.query( trans.install_model.ToolShedRepository ).get( trans.security.decode_id( id ) )
|
||||
|
||||
def get_latest_changeset_revision( trans, repository, repo ):
|
||||
repository_tip = repository.tip( trans.app )
|
||||
repository_metadata = get_repository_metadata_by_changeset_revision( trans.app, trans.security.encode_id( repository.id ), repository_tip )
|
||||
def get_latest_changeset_revision( app, repository, repo ):
|
||||
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 = get_ordered_metadata_changeset_revisions( repository, repo, downloadable=False )
|
||||
@@ -1403,7 +1391,7 @@ def handle_email_alerts( trans, repository, content_alert_str='', new_repo_alert
|
||||
"""
|
||||
repo_dir = repository.repo_path( trans.app )
|
||||
repo = hg.repository( hg_util.get_configured_ui(), repo_dir )
|
||||
sharable_link = generate_sharable_link_for_repository_in_tool_shed( trans, repository, changeset_revision=None )
|
||||
sharable_link = generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=None )
|
||||
smtp_server = trans.app.config.smtp_server
|
||||
if smtp_server and ( new_repo_alert or repository.email_alerts ):
|
||||
# Send email alert to users that want them.
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
else:
|
||||
is_new = False
|
||||
|
||||
if changeset_is_malicious( trans, trans.security.encode_id( repository.id ), repository.tip( trans.app ) ):
|
||||
if changeset_is_malicious( trans.app, trans.security.encode_id( repository.id ), repository.tip( trans.app ) ):
|
||||
is_malicious = True
|
||||
else:
|
||||
is_malicious = False
|
||||
|
||||
@@ -208,7 +208,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
|
||||
sharable_link = generate_sharable_link_for_repository_in_tool_shed( trans, repository, changeset_revision=changeset_revision )
|
||||
sharable_link = generate_sharable_link_for_repository_in_tool_shed( repository, changeset_revision=changeset_revision )
|
||||
%>
|
||||
${sharable_link}
|
||||
</%def>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
else:
|
||||
is_deprecated = False
|
||||
|
||||
if changeset_is_malicious( trans, trans.security.encode_id( repository.id ), repository.tip( trans.app ) ):
|
||||
if changeset_is_malicious( trans.app, trans.security.encode_id( repository.id ), repository.tip( trans.app ) ):
|
||||
is_malicious = True
|
||||
else:
|
||||
is_malicious = False
|
||||
|
||||
Reference in New Issue
Block a user