diff --git a/.ci/flake8_lint_include_list.txt b/.ci/flake8_lint_include_list.txt
index 3e14bb58636..c94fe657dda 100644
--- a/.ci/flake8_lint_include_list.txt
+++ b/.ci/flake8_lint_include_list.txt
@@ -57,6 +57,7 @@ lib/galaxy/managers/taggable.py
lib/galaxy/model/
lib/galaxy/objectstore/pulsar.py
lib/galaxy/objectstore/s3_multipart_upload.py
+lib/galaxy/objectstore/s3.py
lib/galaxy/openid/__init__.py
lib/galaxy/quota/
lib/galaxy/sample_tracking/data_transfer.py
@@ -81,6 +82,7 @@ lib/galaxy/visualization/tracks/
lib/galaxy/web/base/
lib/galaxy/web/buildapp.py
lib/galaxy/web/formatting.py
+lib/galaxy/web/form_builder.py
lib/galaxy/web/framework/base.py
lib/galaxy/web/framework/decorators.py
lib/galaxy/web/framework/helpers/grids.py
@@ -126,6 +128,7 @@ lib/galaxy/webapps/__init__.py
lib/galaxy/webapps/reports/config.py
lib/galaxy/webapps/reports/controllers/__init__.py
lib/galaxy/webapps/reports/controllers/query.py
+lib/galaxy/webapps/reports/controllers/tools.py
lib/galaxy/webapps/reports/__init__.py
lib/galaxy/webapps/tool_shed/api/__init__.py
lib/galaxy/webapps/tool_shed/controllers/groups.py
diff --git a/.ci/py3_sources.txt b/.ci/py3_sources.txt
index 1dd598e6bba..bb4f6917f03 100644
--- a/.ci/py3_sources.txt
+++ b/.ci/py3_sources.txt
@@ -70,6 +70,7 @@ scripts/communication/
scripts/data_libraries/build_whoosh_index.py
scripts/db_shell.py
scripts/drmaa_external_runner.py
+scripts/metagenomics/
scripts/secret_decoder_ring.py
test/
tool_list.py
diff --git a/contrib/galaxy_config_merger.py b/contrib/galaxy_config_merger.py
index 38b5d3cc6aa..d813dbb7b80 100644
--- a/contrib/galaxy_config_merger.py
+++ b/contrib/galaxy_config_merger.py
@@ -80,9 +80,6 @@ def main():
config_sample.write(outputfile)
outputfile.close()
else:
- # print "----------"
- # config_sample.write(sys.stdout)
- # print "----------"
logging.info("use -o OUTPUT to write the merged configuration into a file.")
logging.info("read Galaxy galaxy.ini.sample for detailed information.")
diff --git a/lib/galaxy/datatypes/converters/bed_to_gff_converter.py b/lib/galaxy/datatypes/converters/bed_to_gff_converter.py
index ce647167766..6507257d022 100644
--- a/lib/galaxy/datatypes/converters/bed_to_gff_converter.py
+++ b/lib/galaxy/datatypes/converters/bed_to_gff_converter.py
@@ -4,7 +4,7 @@ from __future__ import print_function
import sys
-assert sys.version_info[:2] >= (2, 4)
+assert sys.version_info[:2] >= (2, 6)
def __main__():
diff --git a/lib/galaxy/datatypes/converters/gff_to_bed_converter.py b/lib/galaxy/datatypes/converters/gff_to_bed_converter.py
index 60435054e34..9e9f767e80a 100644
--- a/lib/galaxy/datatypes/converters/gff_to_bed_converter.py
+++ b/lib/galaxy/datatypes/converters/gff_to_bed_converter.py
@@ -3,7 +3,7 @@ from __future__ import print_function
import sys
-assert sys.version_info[:2] >= (2, 4)
+assert sys.version_info[:2] >= (2, 6)
def __main__():
diff --git a/lib/galaxy/datatypes/converters/interval_to_bed_converter.py b/lib/galaxy/datatypes/converters/interval_to_bed_converter.py
index 48b0dd579ea..da2bdd1b86f 100644
--- a/lib/galaxy/datatypes/converters/interval_to_bed_converter.py
+++ b/lib/galaxy/datatypes/converters/interval_to_bed_converter.py
@@ -6,7 +6,7 @@ import sys
import bx.intervals.io
-assert sys.version_info[:2] >= (2, 4)
+assert sys.version_info[:2] >= (2, 6)
def stop_err(msg):
diff --git a/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py b/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py
index 04041cf575f..bde7292f8cf 100644
--- a/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py
+++ b/lib/galaxy/datatypes/converters/interval_to_bedstrict_converter.py
@@ -6,7 +6,7 @@ import sys
import bx.intervals.io
-assert sys.version_info[:2] >= (2, 4)
+assert sys.version_info[:2] >= (2, 6)
def stop_err(msg):
diff --git a/lib/galaxy/datatypes/converters/maf_to_fasta_converter.py b/lib/galaxy/datatypes/converters/maf_to_fasta_converter.py
index bd56734f389..af35321ba31 100644
--- a/lib/galaxy/datatypes/converters/maf_to_fasta_converter.py
+++ b/lib/galaxy/datatypes/converters/maf_to_fasta_converter.py
@@ -8,7 +8,7 @@ import bx.align.maf
from galaxy.tools.util import maf_utilities
-assert sys.version_info[:2] >= (2, 4)
+assert sys.version_info[:2] >= (2, 6)
def __main__():
diff --git a/lib/galaxy/datatypes/converters/maf_to_interval_converter.py b/lib/galaxy/datatypes/converters/maf_to_interval_converter.py
index 7223653052b..f8028902259 100644
--- a/lib/galaxy/datatypes/converters/maf_to_interval_converter.py
+++ b/lib/galaxy/datatypes/converters/maf_to_interval_converter.py
@@ -8,7 +8,7 @@ import bx.align.maf
from galaxy.tools.util import maf_utilities
-assert sys.version_info[:2] >= (2, 4)
+assert sys.version_info[:2] >= (2, 6)
def __main__():
diff --git a/lib/galaxy/datatypes/converters/picard_interval_list_to_bed6_converter.py b/lib/galaxy/datatypes/converters/picard_interval_list_to_bed6_converter.py
index f3783cceeb2..3c4b3bd69c5 100644
--- a/lib/galaxy/datatypes/converters/picard_interval_list_to_bed6_converter.py
+++ b/lib/galaxy/datatypes/converters/picard_interval_list_to_bed6_converter.py
@@ -4,7 +4,7 @@ from __future__ import print_function
import sys
-assert sys.version_info[:2] >= (2, 5)
+assert sys.version_info[:2] >= (2, 6)
HEADER_STARTS_WITH = ('@')
diff --git a/lib/galaxy/datatypes/dataproviders/base.py b/lib/galaxy/datatypes/dataproviders/base.py
index 7c3347478be..35b394bcaa5 100644
--- a/lib/galaxy/datatypes/dataproviders/base.py
+++ b/lib/galaxy/datatypes/dataproviders/base.py
@@ -260,8 +260,6 @@ class LimitedOffsetDataProvider(FilteredDataProvider):
parent_gen = super(LimitedOffsetDataProvider, self).__iter__()
for datum in parent_gen:
self.num_data_returned -= 1
- # print 'self.num_data_returned:', self.num_data_returned
- # print 'self.num_valid_data_read:', self.num_valid_data_read
if self.num_valid_data_read > self.offset:
self.num_data_returned += 1
diff --git a/lib/galaxy/model/__init__.py b/lib/galaxy/model/__init__.py
index ecfde77474e..b2292fb5396 100644
--- a/lib/galaxy/model/__init__.py
+++ b/lib/galaxy/model/__init__.py
@@ -4242,7 +4242,6 @@ class MetadataFile(StorableObject):
return path
except AttributeError:
# In case we're not working with the history_dataset
- # print "Caught AttributeError"
path = os.path.join(Dataset.file_path, '_metadata_files', *directory_hash_id(self.id))
# Create directory if it does not exist
try:
diff --git a/lib/galaxy/model/search.py b/lib/galaxy/model/search.py
index c8d39e5fd6d..d340124be77 100644
--- a/lib/galaxy/model/search.py
+++ b/lib/galaxy/model/search.py
@@ -122,7 +122,6 @@ class ViewQueryBaseClass(object):
clazz, attribute = field.sqlalchemy_field
sqlalchemy_field_value = getattr(clazz, attribute)
if operator == "=":
- # print field.sqlalchemy_field == right, field.sqlalchemy_field, right
self.query = self.query.filter(sqlalchemy_field_value == right)
elif operator == "!=":
self.query = self.query.filter(sqlalchemy_field_value != right)
@@ -166,7 +165,6 @@ def library_extended_metadata_filter(view, left, operator, right):
view.state['extended_metadata_joined'] = True
alias = aliased(ExtendedMetadataIndex)
field = "/%s" % ("/".join(left.split(".")[1:]))
- # print "FIELD", field
view.query = view.query.filter(
and_(
ExtendedMetadata.id == alias.extended_metadata_id,
@@ -313,7 +311,6 @@ def history_dataset_extended_metadata_filter(view, left, operator, right):
view.state['extended_metadata_joined'] = True
alias = aliased(ExtendedMetadataIndex)
field = "/%s" % ("/".join(left.split(".")[1:]))
- # print "FIELD", field
view.query = view.query.filter(
and_(
ExtendedMetadata.id == alias.extended_metadata_id,
diff --git a/lib/galaxy/objectstore/s3.py b/lib/galaxy/objectstore/s3.py
index 34a2fc39d74..ea7863ccdb7 100644
--- a/lib/galaxy/objectstore/s3.py
+++ b/lib/galaxy/objectstore/s3.py
@@ -1,7 +1,6 @@
"""
Object Store plugin for the Amazon Simple Storage Service (S3)
"""
-
import logging
import multiprocessing
import os
@@ -9,9 +8,17 @@ import shutil
import subprocess
import threading
import time
-
from datetime import datetime
+try:
+ # Imports are done this way to allow objectstore code to be used outside of Galaxy.
+ import boto
+ from boto.exception import S3ResponseError
+ from boto.s3.connection import S3Connection
+ from boto.s3.key import Key
+except ImportError:
+ boto = None
+
from galaxy.exceptions import ObjectInvalid, ObjectNotFound
from galaxy.util import (
directory_hash_id,
@@ -25,16 +32,6 @@ from galaxy.util.sleeper import Sleeper
from .s3_multipart_upload import multipart_upload
from ..objectstore import convert_bytes, ObjectStore
-try:
- # Imports are done this way to allow objectstore code to be used outside of Galaxy.
- import boto
-
- from boto.exception import S3ResponseError
- from boto.s3.key import Key
- from boto.s3.connection import S3Connection
-except ImportError:
- boto = None
-
NO_BOTO_ERROR_MESSAGE = ("S3/Swift object store configured, but no boto dependency available."
"Please install and properly configure boto or modify object store configuration.")
@@ -296,21 +293,21 @@ class S3ObjectStore(ObjectStore):
# creates, this check sould be implemented- in the mean time, it's not
# looking likely to be implementable reliably.
# if os.path.exists(cache_path):
- # # print "***1 %s exists" % cache_path
+ # # print("***1 %s exists" % cache_path)
# if self._key_exists(rel_path):
- # # print "***2 %s exists in S3" % rel_path
+ # # print("***2 %s exists in S3" % rel_path)
# # Make sure the size in cache is available in its entirety
- # # print "File '%s' cache size: %s, S3 size: %s" % (cache_path, os.path.getsize(cache_path), self._get_size_in_s3(rel_path))
+ # # print("File '%s' cache size: %s, S3 size: %s" % (cache_path, os.path.getsize(cache_path), self._get_size_in_s3(rel_path)))
# if os.path.getsize(cache_path) == self._get_size_in_s3(rel_path):
- # # print "***2.1 %s exists in S3 and the size is the same as in cache (in_cache=True)" % rel_path
+ # # print("***2.1 %s exists in S3 and the size is the same as in cache (in_cache=True)" % rel_path)
# exists = True
# else:
- # # print "***2.2 %s exists but differs in size from cache (in_cache=False)" % cache_path
+ # # print("***2.2 %s exists but differs in size from cache (in_cache=False)" % cache_path)
# exists = False
# else:
# # Although not perfect decision making, this most likely means
# # that the file is currently being uploaded
- # # print "***3 %s found in cache but not in S3 (in_cache=True)" % cache_path
+ # # print("***3 %s found in cache but not in S3 (in_cache=True)" % cache_path)
# exists = True
# else:
# return False
diff --git a/lib/galaxy/tools/deps/containers.py b/lib/galaxy/tools/deps/containers.py
index c7bb8f36b36..f3ca14c8552 100644
--- a/lib/galaxy/tools/deps/containers.py
+++ b/lib/galaxy/tools/deps/containers.py
@@ -35,7 +35,13 @@ ALL_CONTAINER_TYPES = [DOCKER_CONTAINER_TYPE, SINGULARITY_CONTAINER_TYPE]
LOAD_CACHED_IMAGE_COMMAND_TEMPLATE = '''
python << EOF
-import re, tarfile, json, subprocess
+from __future__ import print_function
+
+import json
+import re
+import subprocess
+import tarfile
+
t = tarfile.TarFile("${cached_image_file}")
meta_str = t.extractfile('repositories').read()
meta = json.loads(meta_str)
@@ -50,7 +56,7 @@ for line in stdo.split("\\n"):
if tmp[0] == tag and tmp[1] == rev and tmp[2] == rev_value:
found = True
if not found:
- print "Loading image"
+ print("Loading image")
cmd = "cat ${cached_image_file} | ${load_cmd}"
subprocess.check_call(cmd, shell=True)
EOF
diff --git a/lib/galaxy/tools/imp_exp/__init__.py b/lib/galaxy/tools/imp_exp/__init__.py
index 962aa423e6b..2389f2c87ff 100644
--- a/lib/galaxy/tools/imp_exp/__init__.py
+++ b/lib/galaxy/tools/imp_exp/__init__.py
@@ -271,14 +271,12 @@ class JobImportHistoryArchiveWrapper(object, UsesAnnotations):
input_hda = self.sa_session.query(model.HistoryDatasetAssociation) \
.filter_by(history=new_history, hid=value.hid).first()
value = input_hda.id
- # print "added parameter %s-->%s to job %i" % ( name, value, imported_job.id )
imported_job.add_parameter(name, dumps(value, cls=HistoryDatasetAssociationIDEncoder))
# TODO: Connect jobs to input datasets.
# Connect jobs to output datasets.
for output_hid in job_attrs['output_datasets']:
- # print "%s job has output dataset %i" % (imported_job.id, output_hid)
output_hda = self.sa_session.query(model.HistoryDatasetAssociation) \
.filter_by(history=new_history, hid=output_hid).first()
if output_hda:
diff --git a/lib/galaxy/tools/parameters/__init__.py b/lib/galaxy/tools/parameters/__init__.py
index c778551c401..ea3f3b826b2 100644
--- a/lib/galaxy/tools/parameters/__init__.py
+++ b/lib/galaxy/tools/parameters/__init__.py
@@ -1,6 +1,8 @@
"""
Classes encapsulating Galaxy tool parameters.
"""
+from __future__ import print_function
+
import re
from json import dumps
@@ -49,7 +51,7 @@ def visit_input_values(inputs, input_values, callback, name_prefix='', label_pre
>>> f.cases = [Bunch(value='true', inputs= { 'h': h }), Bunch(value='false', inputs= { 'i': i })]
>>>
>>> def visitor(input, value, prefix, prefixed_name, **kwargs):
- ... print 'name=%s, prefix=%s, prefixed_name=%s, value=%s' % (input.name, prefix, prefixed_name, value)
+ ... print('name=%s, prefix=%s, prefixed_name=%s, value=%s' % (input.name, prefix, prefixed_name, value))
>>> inputs = odict([('a',a),('b',b)])
>>> nested = odict([('a', 1), ('b', [odict([('c', 3), ('d', [odict([('e', 5), ('f', odict([('g', True), ('h', 7)]))])])])])])
>>> visit_input_values(inputs, nested, visitor)
@@ -249,13 +251,13 @@ def populate_state(request_context, inputs, incoming, state, errors={}, prefix='
>>> flat = odict([('a', 1), ('b_0|c', 2), ('b_0|d_0|e', 3), ('b_0|d_0|f|h', 4), ('b_0|d_0|f|g', True)])
>>> state = odict()
>>> populate_state(trans, inputs, flat, state, check=False)
- >>> print state['a']
+ >>> print(state['a'])
1
- >>> print state['b'][0]['c']
+ >>> print(state['b'][0]['c'])
2
- >>> print state['b'][0]['d'][0]['e']
+ >>> print(state['b'][0]['d'][0]['e'])
3
- >>> print state['b'][0]['d'][0]['f']['h']
+ >>> print(state['b'][0]['d'][0]['f']['h'])
4
"""
context = ExpressionContext(state, context)
diff --git a/lib/galaxy/tools/parameters/input_translation.py b/lib/galaxy/tools/parameters/input_translation.py
index 1917a7885ae..c9f36929396 100644
--- a/lib/galaxy/tools/parameters/input_translation.py
+++ b/lib/galaxy/tools/parameters/input_translation.py
@@ -1,6 +1,8 @@
"""
Tool Input Translation.
"""
+from __future__ import print_function
+
import logging
from galaxy.util.bunch import Bunch
@@ -43,7 +45,7 @@ class ToolInputTranslator(object):
... '''))
>>> params = Params({'db':'hg17', 'URL':'URL_value', 'org':'Human', 'hgta_outputType':'primaryTable'})
>>> translator.translate(params)
- >>> print sorted(list(params.__dict__.keys()))
+ >>> print(sorted(params.__dict__.keys()))
['URL', 'URL_method', 'data_type', 'db', 'dbkey', 'description', 'hgta_outputType', 'org', 'organism', 'table']
>>> params.get('URL', None) in ['URL_value?GALAXY_URL=0&_export=1', 'URL_value?_export=1&GALAXY_URL=0']
True
diff --git a/lib/galaxy/tools/util/maf_utilities.py b/lib/galaxy/tools/util/maf_utilities.py
index 7c9d7be22ff..2851cf2cac2 100644
--- a/lib/galaxy/tools/util/maf_utilities.py
+++ b/lib/galaxy/tools/util/maf_utilities.py
@@ -19,7 +19,7 @@ import bx.interval_index_file
import bx.intervals
from six.moves import xrange
-assert sys.version_info[:2] >= (2, 4)
+assert sys.version_info[:2] >= (2, 6)
log = logging.getLogger(__name__)
diff --git a/lib/galaxy/util/jstree.py b/lib/galaxy/util/jstree.py
index 9f20d66bc22..fb4543ea626 100644
--- a/lib/galaxy/util/jstree.py
+++ b/lib/galaxy/util/jstree.py
@@ -1,8 +1,11 @@
-import os
+from __future__ import print_function
+
import copy
-import dictobj
+import os
from collections import namedtuple
+import dictobj
+
Path = namedtuple('Path', ('path', 'id', 'options'))
@@ -46,23 +49,23 @@ class Node(dictobj.DictionaryObject):
Example:
>>> import jstree
>>> node = jstree.Node('a', None)
- >>> print node
+ >>> print(node)
Node({'text': 'a', 'children': MutableDictionaryObject({})})
- >>> print node.jsonData()
+ >>> print(node.jsonData())
{'text': 'a'}
>>> import jstree
>>> node = jstree.Node('a', 1)
- >>> print node
+ >>> print(node)
Node({'text': 'a', 'children': MutableDictionaryObject({}), 'li_attr': DictionaryObject({'id': 1}), 'id': 1})
- >>> print node.jsonData()
+ >>> print(node.jsonData())
{'text': 'a', 'id': 1, 'li_attr': {'id': 1}}
>>> import jstree
>>> node = jstree.Node('a', 5, icon="folder", state = {'opened': True})
- >>> print node
+ >>> print(node)
Node({'text': 'a', 'id': 5, 'state': DictionaryObject({'opened': True}), 'children': MutableDictionaryObject({}), 'li_attr': DictionaryObject({'id': 5}), 'icon': 'folder'})
- >>> print node.jsonData()
+ >>> print(node.jsonData())
{'text': 'a', 'state': {'opened': True}, 'id': 5, 'li_attr': {'id': 5}, 'icon': 'folder'}
"""
super(Node, self).__init__()
diff --git a/lib/galaxy/visualization/data_providers/basic.py b/lib/galaxy/visualization/data_providers/basic.py
index 456ffaa420c..8695db08464 100644
--- a/lib/galaxy/visualization/data_providers/basic.py
+++ b/lib/galaxy/visualization/data_providers/basic.py
@@ -104,7 +104,6 @@ class ColumnDataProvider(BaseDataProvider):
(column >= 0)), (
"column index (%d) must be positive and less" % (column) +
" than the number of columns: %d" % (self.original_dataset.metadata.columns))
- # print columns, start_val, max_vals, skip_comments, kwargs
# set up the response, column lists
response = {}
diff --git a/lib/galaxy/web/form_builder.py b/lib/galaxy/web/form_builder.py
index ffb9cbbdb0d..c138e00c747 100644
--- a/lib/galaxy/web/form_builder.py
+++ b/lib/galaxy/web/form_builder.py
@@ -1,10 +1,13 @@
"""
Classes for generating HTML forms
"""
+from __future__ import print_function
+
import logging
-from six import string_types
from cgi import escape
+from six import string_types
+
from galaxy.util import restore_text, unicodify
log = logging.getLogger(__name__)
@@ -44,9 +47,9 @@ class TextField(BaseField):
"""
A standard text input box.
- >>> print TextField( "foo" ).get_html()
+ >>> print(TextField( "foo" ).get_html())
- >>> print TextField( "bins", size=4, value="default" ).get_html()
+ >>> print(TextField( "bins", size=4, value="default" ).get_html())
"""
@@ -72,9 +75,9 @@ class PasswordField(BaseField):
"""
A password input box. text appears as "******"
- >>> print PasswordField( "foo" ).get_html()
+ >>> print(PasswordField( "foo" ).get_html())
- >>> print PasswordField( "bins", size=4, value="default" ).get_html()
+ >>> print(PasswordField( "bins", size=4, value="default" ).get_html())
"""
@@ -101,9 +104,9 @@ class TextArea(BaseField):
"""
A standard text area box.
- >>> print TextArea( "foo" ).get_html()
+ >>> print(TextArea( "foo" ).get_html())
- >>> print TextArea( "bins", size="4x5", value="default" ).get_html()
+ >>> print(TextArea( "bins", size="4x5", value="default" ).get_html())
"""
_DEFAULT_SIZE = "5x25"
@@ -136,9 +139,9 @@ class CheckboxField(BaseField):
"""
A checkbox (boolean input)
- >>> print CheckboxField( "foo" ).get_html()
+ >>> print(CheckboxField( "foo" ).get_html())
- >>> print CheckboxField( "bar", checked="yes" ).get_html()
+ >>> print(CheckboxField( "bar", checked="yes" ).get_html())
"""
@@ -186,9 +189,9 @@ class FileField(BaseField):
"""
A file upload input.
- >>> print FileField( "foo" ).get_html()
+ >>> print(FileField( "foo" ).get_html())
- >>> print FileField( "foo", ajax = True ).get_html()
+ >>> print(FileField( "foo", ajax = True ).get_html())
"""
@@ -233,7 +236,7 @@ class HiddenField(BaseField):
"""
A hidden field.
- >>> print HiddenField( "foo", 100 ).get_html()
+ >>> print(HiddenField( "foo", 100 ).get_html())
"""
@@ -259,7 +262,7 @@ class SelectField(BaseField):
>>> t = SelectField( "foo", multiple=True )
>>> t.add_option( "tuti", 1 )
>>> t.add_option( "fruity", "x" )
- >>> print t.get_html()
+ >>> print(t.get_html())