mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
... it has a PEP-8 detected bug (undefined reference) so it would fail even if it was used.
97 lines
4.7 KiB
Python
97 lines
4.7 KiB
Python
import logging
|
|
import os
|
|
import sys
|
|
|
|
cwd = os.getcwd()
|
|
if cwd not in sys.path:
|
|
sys.path.append( cwd )
|
|
|
|
new_path = [ os.path.join( cwd, "lib" ) ]
|
|
if new_path not in sys.path:
|
|
new_path.extend( sys.path )
|
|
sys.path = new_path
|
|
|
|
from galaxy.util import parse_xml
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
# Set a 10 minute timeout for repository installation.
|
|
repository_installation_timeout = 600
|
|
|
|
|
|
def get_installed_repository_info( elem, last_galaxy_test_file_dir, last_tested_repository_name, last_tested_changeset_revision, tool_path ):
|
|
"""
|
|
Return the GALAXY_TEST_FILE_DIR, the containing repository name and the
|
|
change set revision for the tool elem. This only happens when testing
|
|
tools installed from the tool shed.
|
|
"""
|
|
tool_config_path = elem.get( 'file' )
|
|
installed_tool_path_items = tool_config_path.split( '/repos/' )
|
|
sans_shed = installed_tool_path_items[ 1 ]
|
|
path_items = sans_shed.split( '/' )
|
|
repository_owner = path_items[ 0 ]
|
|
repository_name = path_items[ 1 ]
|
|
changeset_revision = path_items[ 2 ]
|
|
if repository_name != last_tested_repository_name or changeset_revision != last_tested_changeset_revision:
|
|
# Locate the test-data directory.
|
|
installed_tool_path = os.path.join( installed_tool_path_items[ 0 ], 'repos', repository_owner, repository_name, changeset_revision )
|
|
for root, dirs, files in os.walk( os.path.join(tool_path, installed_tool_path )):
|
|
if '.' in dirs:
|
|
dirs.remove( '.hg' )
|
|
if 'test-data' in dirs:
|
|
return os.path.join( root, 'test-data' ), repository_name, changeset_revision
|
|
return None, repository_name, changeset_revision
|
|
return last_galaxy_test_file_dir, last_tested_repository_name, last_tested_changeset_revision
|
|
|
|
|
|
def parse_tool_panel_config( config, shed_tools_dict ):
|
|
"""
|
|
Parse a shed-related tool panel config to generate the shed_tools_dict. This only happens when testing tools installed from the tool shed.
|
|
"""
|
|
last_galaxy_test_file_dir = None
|
|
last_tested_repository_name = None
|
|
last_tested_changeset_revision = None
|
|
tool_path = None
|
|
has_test_data = False
|
|
tree = parse_xml( config )
|
|
root = tree.getroot()
|
|
tool_path = root.get('tool_path')
|
|
for elem in root:
|
|
if elem.tag == 'tool':
|
|
galaxy_test_file_dir, \
|
|
last_tested_repository_name, \
|
|
last_tested_changeset_revision = get_installed_repository_info( elem,
|
|
last_galaxy_test_file_dir,
|
|
last_tested_repository_name,
|
|
last_tested_changeset_revision,
|
|
tool_path )
|
|
if galaxy_test_file_dir:
|
|
if not has_test_data:
|
|
has_test_data = True
|
|
if galaxy_test_file_dir != last_galaxy_test_file_dir:
|
|
if not os.path.isabs( galaxy_test_file_dir ):
|
|
galaxy_test_file_dir = os.path.join( os.getcwd(), galaxy_test_file_dir )
|
|
guid = elem.get( 'guid' )
|
|
shed_tools_dict[ guid ] = galaxy_test_file_dir
|
|
last_galaxy_test_file_dir = galaxy_test_file_dir
|
|
elif elem.tag == 'section':
|
|
for section_elem in elem:
|
|
if section_elem.tag == 'tool':
|
|
galaxy_test_file_dir, \
|
|
last_tested_repository_name, \
|
|
last_tested_changeset_revision = get_installed_repository_info( section_elem,
|
|
last_galaxy_test_file_dir,
|
|
last_tested_repository_name,
|
|
last_tested_changeset_revision,
|
|
tool_path )
|
|
if galaxy_test_file_dir:
|
|
if not has_test_data:
|
|
has_test_data = True
|
|
if galaxy_test_file_dir != last_galaxy_test_file_dir:
|
|
if not os.path.isabs( galaxy_test_file_dir ):
|
|
galaxy_test_file_dir = os.path.join( os.getcwd(), galaxy_test_file_dir )
|
|
guid = section_elem.get( 'guid' )
|
|
shed_tools_dict[ guid ] = galaxy_test_file_dir
|
|
last_galaxy_test_file_dir = galaxy_test_file_dir
|
|
return has_test_data, shed_tools_dict
|