From 844959709a4239f41c832c01bd620e2a9a8ed08a Mon Sep 17 00:00:00 2001 From: Greg Von Kuster Date: Wed, 8 Jan 2014 22:29:33 -0500 Subject: [PATCH] Handle invalid information from the tool shed API in the tool shed's install and test framework. --- .../base/util.py | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/test/install_and_test_tool_shed_repositories/base/util.py b/test/install_and_test_tool_shed_repositories/base/util.py index f630604bc70..2e937208b77 100644 --- a/test/install_and_test_tool_shed_repositories/base/util.py +++ b/test/install_and_test_tool_shed_repositories/base/util.py @@ -889,9 +889,19 @@ def populate_install_containers_for_repository_dependencies( app, repository, re log.debug( 'due to the following error getting repository_dependencies_dicts:\n%s' % str( error_message ) ) else: for repository_dependencies_dict in repository_dependencies_dicts: - name = str( repository_dependencies_dict[ 'name' ] ) - owner = str( repository_dependencies_dict[ 'owner' ] ) - changeset_revision = str( repository_dependencies_dict[ 'changeset_revision' ] ) + if not isinstance( repository_dependencies_dict, dict ): + log.debug( 'Skipping invalid repository_dependencies_dict: %s' % str( repository_dependencies_dict ) ) + continue + name = repository_dependencies_dict.get( 'name', None ) + owner = repository_dependencies_dict.get( 'owner', None ) + changeset_revision = repository_dependencies_dict.get( 'changeset_revision', None ) + if name is None or owner is None or changeset_revision is None: + log.debug( 'Skipping invalid repository_dependencies_dict due to missing name,owner or changeset_revision: %s' % \ + str( repository_dependencies_dict ) ) + continue + name = str( name ) + owner = str( owner ) + changeset_revision = str( changeset_revision ) log.debug( 'Checking installation containers for revision %s of repository dependency %s owned by %s' % \ ( changeset_revision, name, owner ) ) required_repository_metadata_id = repository_dependencies_dict[ 'id' ] @@ -907,21 +917,21 @@ def populate_install_containers_for_repository_dependencies( app, repository, re # Check the required repository's time_last_tested value to see if its tool_test_results column # has been updated within the past 12 hours. The RepositoryMetadata class's to_dict() method # returns the value of time_last_tested in datetime.isoformat(). - twelve_hours_ago = ( datetime.utcnow() - timedelta( hours=12 ) ).isoformat() + twenty_hours_ago = ( datetime.utcnow() - timedelta( hours=20 ) ).isoformat() time_last_tested, error_message = get_time_last_tested( galaxy_tool_shed_url, repository_metadata_id ) - if time_last_tested is not None and time_last_tested < twelve_hours_ago: + if time_last_tested is not None and time_last_tested < twenty_hours_ago: log.debug( 'The install containers for version %s of repository dependency %s owned by %s have been ' % \ ( changeset_revision, name, owner ) ) - log.debug( 'populated within the past 12 hours (likely in this test run), so skipping this check.' ) + log.debug( 'populated within the past 20 hours (likely in this test run), so skipping this check.' ) continue elif time_last_tested is None: log.debug( 'The time_last_tested column value is None for version %s of repository dependency %s owned by %s.' % \ ( changeset_revision, name, owner ) ) - elif time_last_tested < twelve_hours_ago: - log.debug( 'Version %s of repository dependency %s owned by %s was last tested less than 12 hours ago.' % \ + elif time_last_tested < twenty_hours_ago: + log.debug( 'Version %s of repository dependency %s owned by %s was last tested less than 20 hours ago.' % \ ( changeset_revision, name, owner ) ) else: - log.debug( 'Version %s of repository dependency %s owned by %s was last tested more than 12 hours ago.' % \ + log.debug( 'Version %s of repository dependency %s owned by %s was last tested more than 20 hours ago.' % \ ( changeset_revision, name, owner ) ) # Inspect the tool_test_results_dict for the last test run to see if it has not yet been populated. if len( tool_test_results_dicts ) == 0: