mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-28 02:58:18 +08:00
Enable flake8-implicit-str-concat ruff rules
See https://docs.astral.sh/ruff/rules/#flake8-implicit-str-concat-isc
This commit is contained in:
@@ -19398,7 +19398,7 @@ export interface operations {
|
||||
* @description Allows remote job running mechanisms to get a fresh OIDC token that can be used on remote side to authorize user. It is not meant to represent part of Galaxy's stable, user facing API
|
||||
*/
|
||||
parameters: {
|
||||
/** @description A key used to authenticate this request as acting onbehalf or a job runner for the specified job */
|
||||
/** @description A key used to authenticate this request as acting on behalf or a job runner for the specified job */
|
||||
/** @description OIDC provider name */
|
||||
query: {
|
||||
job_key: string;
|
||||
|
||||
@@ -95,8 +95,9 @@ class AuthnzManager:
|
||||
func = getattr(builtins, child.get("Type"))
|
||||
except AttributeError:
|
||||
log.error(
|
||||
"The value of attribute `Type`, `{}`, is not a valid built-in type;" " skipping this node"
|
||||
).format(child.get("Type"))
|
||||
"The value of attribute `Type`, `%s`, is not a valid built-in type; skipping this node",
|
||||
child.get("Type"),
|
||||
)
|
||||
continue
|
||||
self.oidc_config[child.get("Property")] = func(child.get("Value"))
|
||||
except ImportError:
|
||||
|
||||
@@ -87,7 +87,7 @@ class GalaxyTaskBeforeStartUserRateLimitPostgres(GalaxyTaskBeforeStartUserRateLi
|
||||
update_stmt = (
|
||||
update(CeleryUserRateLimit)
|
||||
.where(CeleryUserRateLimit.user_id == user_id)
|
||||
.values(last_scheduled_time=text("greatest(last_scheduled_time + ':interval second', " ":now) "))
|
||||
.values(last_scheduled_time=text("greatest(last_scheduled_time + ':interval second', :now)"))
|
||||
.returning(CeleryUserRateLimit.last_scheduled_time)
|
||||
)
|
||||
result = sa_session.execute(update_stmt, {"interval": task_interval_secs, "now": now}).all()
|
||||
|
||||
@@ -877,15 +877,15 @@ class PQR(GenericMolFile):
|
||||
"""
|
||||
pat = (
|
||||
r"(ATOM|HETATM)\s+"
|
||||
+ r"(\d+)\s+"
|
||||
+ r"([A-Z0-9]+)\s+"
|
||||
+ r"([A-Z0-9]+)\s+"
|
||||
+ r"(([A-Z]?)\s+)?"
|
||||
+ r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
+ r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
+ r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
+ r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
+ r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
r"(\d+)\s+"
|
||||
r"([A-Z0-9]+)\s+"
|
||||
r"([A-Z0-9]+)\s+"
|
||||
r"(([A-Z]?)\s+)?"
|
||||
r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
r"([-+]?\d*\.\d+|\d+)\s+"
|
||||
)
|
||||
return re.compile(pat)
|
||||
|
||||
|
||||
@@ -275,7 +275,7 @@ def _get_versions(path, uuid):
|
||||
framework_version = framework_version_line.split(":")[1].strip()
|
||||
return version, framework_version
|
||||
except Exception:
|
||||
raise ValueError("Archive does not contain a correctly formatted" " VERSION file.")
|
||||
raise ValueError("Archive does not contain a correctly formatted VERSION file.")
|
||||
|
||||
|
||||
def _open_file_in_archive(zip_path, path, uuid):
|
||||
|
||||
@@ -1223,7 +1223,8 @@ class Eland(Tabular):
|
||||
"DESC",
|
||||
"SRAS",
|
||||
"PRAS",
|
||||
"PART_CHROM" "PART_CONTIG",
|
||||
"PART_CHROM",
|
||||
"PART_CONTIG",
|
||||
"PART_OFFSET",
|
||||
"PART_STRAND",
|
||||
"FILT",
|
||||
|
||||
@@ -1331,7 +1331,7 @@ class MinimalJobWrapper(HasResourceParameters):
|
||||
job = self.get_job()
|
||||
if not os.path.exists(self.working_directory):
|
||||
log.warning(
|
||||
"(%s): Working directory clear requested but %s does " "not exist", self.job_id, self.working_directory
|
||||
"(%s): Working directory clear requested but %s does not exist", self.job_id, self.working_directory
|
||||
)
|
||||
return
|
||||
|
||||
@@ -1535,7 +1535,7 @@ class MinimalJobWrapper(HasResourceParameters):
|
||||
|
||||
if job.state in model.Job.terminal_states:
|
||||
log.warning(
|
||||
"(%s) Ignoring state change from '%s' to '%s' for job " "that is already terminal",
|
||||
"(%s) Ignoring state change from '%s' to '%s' for job that is already terminal",
|
||||
job.id,
|
||||
job.state,
|
||||
state,
|
||||
|
||||
@@ -1773,11 +1773,13 @@ if __name__ == "__main__":
|
||||
"--check-config",
|
||||
dest="check_config",
|
||||
nargs="?",
|
||||
help="Use this option to validate tool_destinations.yml."
|
||||
+ " Optionally, provide the path to the tool_destinations.yml"
|
||||
+ " that you would like to check, and/or the path to the related"
|
||||
+ " job_conf.xml. Default: galaxy/config/tool_destinations.yml"
|
||||
+ "and galaxy/config/job_conf.xml",
|
||||
help=(
|
||||
"Use this option to validate tool_destinations.yml."
|
||||
" Optionally, provide the path to the tool_destinations.yml"
|
||||
" that you would like to check, and/or the path to the related"
|
||||
" job_conf.xml. Default: galaxy/config/tool_destinations.yml"
|
||||
"and galaxy/config/job_conf.xml"
|
||||
),
|
||||
)
|
||||
|
||||
parser.add_argument("-j", "--job-config", dest="job_config")
|
||||
|
||||
@@ -399,7 +399,7 @@ class AWSBatchJobRunner(AsynchronousJobRunner):
|
||||
log.debug(msg.format(name=job_name))
|
||||
|
||||
def recover(self, job, job_wrapper):
|
||||
msg = "(name!r/runner!r) is still in {state!s} state, adding to" " the runner monitor queue"
|
||||
msg = "(name!r/runner!r) is still in {state!s} state, adding to the runner monitor queue"
|
||||
job_id = job.get_job_runner_external_id()
|
||||
job_name = self.JOB_NAME_PREFIX + job_wrapper.get_id_tag()
|
||||
ajs = AsynchronousJobState(files_dir=job_wrapper.working_directory, job_wrapper=job_wrapper)
|
||||
|
||||
@@ -178,7 +178,7 @@ class ChronosJobRunner(AsynchronousJobRunner):
|
||||
LOGGER.error(msg.format(name=job_name))
|
||||
|
||||
def recover(self, job, job_wrapper):
|
||||
msg = "(name!r/runner!r) is still in {state!s} state, adding to" " the runner monitor queue"
|
||||
msg = "(name!r/runner!r) is still in {state!s} state, adding to the runner monitor queue"
|
||||
job_id = job.get_job_runner_external_id()
|
||||
ajs = AsynchronousJobState(
|
||||
files_dir=job_wrapper.working_directory,
|
||||
|
||||
@@ -3252,7 +3252,7 @@ class History(Base, HasTags, Dictifiable, UsesAnnotations, HasName, Serializable
|
||||
elif not isinstance(dataset, (HistoryDatasetAssociation, HistoryDatasetCollectionAssociation)):
|
||||
raise TypeError(
|
||||
"You can only add Dataset and HistoryDatasetAssociation instances to a history"
|
||||
+ f" ( you tried to add {str(dataset)} )."
|
||||
f" ( you tried to add {str(dataset)} )."
|
||||
)
|
||||
is_dataset = is_hda(dataset)
|
||||
if parent_id:
|
||||
|
||||
@@ -83,7 +83,7 @@ def parse_config_xml(config_xml):
|
||||
log.error(msg)
|
||||
raise Exception(msg)
|
||||
except Exception:
|
||||
log.exception("Malformed PithosObjectStore Configuration XML -- " "unable to continue")
|
||||
log.exception("Malformed PithosObjectStore Configuration XML, unable to continue")
|
||||
raise
|
||||
return r
|
||||
|
||||
@@ -325,7 +325,7 @@ class PithosObjectStore(ConcreteObjectStore):
|
||||
try:
|
||||
return os.path.getsize(self._get_cache_path(path))
|
||||
except OSError as ex:
|
||||
log.warning(f"Could not get size of file {path} in local cache," f"will try Pithos. Error: {ex}")
|
||||
log.warning("Could not get size of file %s in local cache, will try Pithos. Error: %s", path, ex)
|
||||
try:
|
||||
file = self.pithos.get_object_info(path)
|
||||
except ClientError as ce:
|
||||
@@ -408,7 +408,7 @@ class PithosObjectStore(ConcreteObjectStore):
|
||||
if kwargs.get("create"):
|
||||
self._create(obj, **kwargs)
|
||||
if not self._exists(obj, **kwargs):
|
||||
raise ObjectNotFound(f"objectstore.update_from_file, object does not exist: {obj}, " f"kwargs: {kwargs}")
|
||||
raise ObjectNotFound(f"objectstore.update_from_file, object does not exist: {obj}, kwargs: {kwargs}")
|
||||
|
||||
path = self._construct_path(obj, **kwargs)
|
||||
cache_path = self._get_cache_path(path)
|
||||
|
||||
@@ -594,7 +594,7 @@ class RucioObjectStore(ConcreteObjectStore):
|
||||
file_name = self._get_cache_path(rel_path)
|
||||
if not os.path.islink(file_name):
|
||||
raise ObjectInvalid(
|
||||
"rucio objectstore._register_file, rucio_register_only " "is set, but file in cache is not a link "
|
||||
"rucio objectstore._register_file, rucio_register_only is set, but file in cache is not a link "
|
||||
)
|
||||
if os.path.islink(file_name):
|
||||
file_name = os.readlink(file_name)
|
||||
|
||||
@@ -1563,14 +1563,14 @@ class CreateHistoryPayload(Model):
|
||||
default=None,
|
||||
title="History ID",
|
||||
description=(
|
||||
"The encoded ID of the history to copy. " "Provide this value only if you want to copy an existing history."
|
||||
"The encoded ID of the history to copy. Provide this value only if you want to copy an existing history."
|
||||
),
|
||||
)
|
||||
all_datasets: Optional[bool] = Field(
|
||||
default=True,
|
||||
title="All Datasets",
|
||||
description=(
|
||||
"Whether to copy also deleted HDAs/HDCAs. Only applies when " "providing a `history_id` to copy from."
|
||||
"Whether to copy also deleted HDAs/HDCAs. Only applies when providing a `history_id` to copy from."
|
||||
),
|
||||
)
|
||||
archive_source: Optional[str] = Field(
|
||||
@@ -3411,7 +3411,7 @@ class ShareWithPayload(Model):
|
||||
...,
|
||||
title="User Identifiers",
|
||||
description=(
|
||||
"A collection of encoded IDs (or email addresses) of users " "that this resource will be shared with."
|
||||
"A collection of encoded IDs (or email addresses) of users that this resource will be shared with."
|
||||
),
|
||||
)
|
||||
share_option: Optional[SharingOptions] = Field(
|
||||
|
||||
@@ -11,11 +11,11 @@ from galaxy.util import (
|
||||
)
|
||||
|
||||
UPDATE_TEMPLATE = Template(
|
||||
"git --work-tree $dir --git-dir $dir/.git fetch && " "git --work-tree $dir --git-dir $dir/.git merge origin/master"
|
||||
"git --work-tree $dir --git-dir $dir/.git fetch && git --work-tree $dir --git-dir $dir/.git merge origin/master"
|
||||
)
|
||||
|
||||
UPDATE_FAILED_TEMPLATE = Template(
|
||||
"Warning failed to update test repository $dir - " "update stdout was [$stdout] and stderr was [$stderr]."
|
||||
"Warning failed to update test repository $dir - update stdout was [$stdout] and stderr was [$stderr]."
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -305,7 +305,7 @@ def _fetch_target(upload_config: "UploadConfig", target):
|
||||
if datatype.dataset_content_needs_grooming(path):
|
||||
err_msg = (
|
||||
"The uploaded files need grooming, so change your <b>Copy data into Galaxy?</b> selection to be "
|
||||
+ "<b>Copy files into Galaxy</b> instead of <b>Link to files without copying into Galaxy</b> so grooming can be performed."
|
||||
"<b>Copy files into Galaxy</b> instead of <b>Link to files without copying into Galaxy</b> so grooming can be performed."
|
||||
)
|
||||
raise UploadProblemException(err_msg)
|
||||
|
||||
|
||||
@@ -233,7 +233,7 @@ class ToolPanelViewSearch:
|
||||
# Add tool document to index (or overwrite if existing)
|
||||
writer.update_document(**add_doc_kwds)
|
||||
|
||||
log.debug(f"Toolbox index of panel {self.panel_view_id}" f" finished {execution_timer}")
|
||||
log.debug("Toolbox index of panel %s finished %s", self.panel_view_id, execution_timer)
|
||||
|
||||
def _get_tools_to_remove(self, tool_cache) -> list:
|
||||
"""Return list of tool IDs to be removed from index."""
|
||||
|
||||
@@ -12,7 +12,7 @@ except ImportError:
|
||||
FluentSender = None
|
||||
|
||||
|
||||
FLUENT_IMPORT_MESSAGE = "The Python fluent package is required to use this " "feature, please install it"
|
||||
FLUENT_IMPORT_MESSAGE = "The Python fluent package is required to use this feature, please install it"
|
||||
|
||||
|
||||
class FluentTraceLogger:
|
||||
|
||||
@@ -122,9 +122,9 @@ class CloudAuthzController(BaseGalaxyAPIController):
|
||||
description = payload.get("description", "")
|
||||
|
||||
if not isinstance(config, dict):
|
||||
log.debug(msg_template.format(f"invalid config type `{type(config)}`, expect `dict`"))
|
||||
log.debug(msg_template.format(f"invalid config type `{type(config)}`, expected `dict`"))
|
||||
raise RequestParameterInvalidException(
|
||||
"Invalid type for the required `config` variable; expect `dict` " f"but received `{type(config)}`."
|
||||
f"Invalid type for the required `config` variable; expected `dict` but received `{type(config)}`."
|
||||
)
|
||||
if authn_id:
|
||||
try:
|
||||
|
||||
@@ -39,7 +39,7 @@ class FastAPIJobTokens:
|
||||
job_id: EncodedDatabaseIdField,
|
||||
job_key: str = Query(
|
||||
description=(
|
||||
"A key used to authenticate this request as acting on" "behalf or a job runner for the specified job"
|
||||
"A key used to authenticate this request as acting on behalf or a job runner for the specified job"
|
||||
),
|
||||
),
|
||||
provider: str = Query(
|
||||
|
||||
@@ -37,7 +37,7 @@ router = Router(tags=["remote files"])
|
||||
TargetQueryParam: str = Query(
|
||||
default=RemoteFilesTarget.ftpdir,
|
||||
title="Target source",
|
||||
description=("The source to load datasets from." " Possible values: ftpdir, userdir, importdir"),
|
||||
description=("The source to load datasets from. Possible values: ftpdir, userdir, importdir"),
|
||||
)
|
||||
|
||||
FormatQueryParam: Optional[RemoteFilesFormat] = Query(
|
||||
@@ -54,7 +54,7 @@ RecursiveQueryParam: Optional[bool] = Query(
|
||||
default=None,
|
||||
title="Recursive",
|
||||
description=(
|
||||
"Whether to recursively lists all sub-directories." " This will be `True` by default depending on the `target`."
|
||||
"Whether to recursively lists all sub-directories. This will be `True` by default depending on the `target`."
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ from galaxy.model.item_attrs import (
|
||||
UsesItemRatings,
|
||||
)
|
||||
from galaxy.structured_app import StructuredApp
|
||||
from galaxy.util import unicodify
|
||||
from galaxy.util.sanitize_html import sanitize_html
|
||||
from galaxy.visualization.genomes import GenomeRegion
|
||||
from galaxy.webapps.base.controller import (
|
||||
@@ -263,9 +262,8 @@ class VisualizationController(
|
||||
raise exception
|
||||
return trans.show_error_message(
|
||||
"There was an error rendering the visualization. "
|
||||
+ "Contact your Galaxy administrator if the problem persists."
|
||||
+ "<br/>Details: "
|
||||
+ unicodify(exception),
|
||||
"Contact your Galaxy administrator if the problem persists."
|
||||
f"<br/>Details: {exception}",
|
||||
use_panels=False,
|
||||
)
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ class LibraryFoldersService(ServiceBase):
|
||||
trans.app.security_agent.set_all_library_permissions(trans, folder, permissions)
|
||||
else:
|
||||
raise RequestParameterInvalidException(
|
||||
'The mandatory parameter "action" has an invalid value.' 'Allowed values are: "set_permissions"'
|
||||
'The mandatory parameter "action" has an invalid value. Allowed values are: "set_permissions"'
|
||||
)
|
||||
current_permissions = self.folder_manager.get_current_roles(trans, folder)
|
||||
return LibraryFolderCurrentPermissions(**current_permissions)
|
||||
|
||||
+3
-2
@@ -191,8 +191,9 @@ exclude = [
|
||||
|
||||
[tool.ruff.lint]
|
||||
# Enable: pycodestyle errors (E), Pyflakes (F), flake8-bugbear (B),
|
||||
# flake8-comprehensions (C4), flake8-logging-format (G) and pyupgrade (UP)
|
||||
select = ["E", "F", "B", "C4", "G", "UP"]
|
||||
# flake8-comprehensions (C4), flake8-logging-format (G),
|
||||
# flake8-implicit-str-concat (ISC) and pyupgrade (UP)
|
||||
select = ["E", "F", "B", "C4", "G", "ISC", "UP"]
|
||||
# Exceptions:
|
||||
# B008 Do not perform function calls in argument defaults (for FastAPI Depends and Body)
|
||||
# B9 flake8-bugbear opinionated warnings
|
||||
|
||||
@@ -12,7 +12,7 @@ try:
|
||||
except ImportError:
|
||||
print(
|
||||
"Could not import the requests module. See http://docs.python-requests.org/en/latest/"
|
||||
+ " or install with 'pip install requests'"
|
||||
" or install with 'pip install requests'"
|
||||
)
|
||||
raise
|
||||
|
||||
@@ -46,7 +46,7 @@ if __name__ == "__main__":
|
||||
if len(sys.argv) < 5:
|
||||
print(
|
||||
"history_upload.py <api key> <galaxy base url> <history id> <filepath to upload>\n"
|
||||
+ " (where galaxy base url is just the root url where your Galaxy is served; e.g. 'localhost:8080')"
|
||||
" (where galaxy base url is just the root url where your Galaxy is served; e.g. 'localhost:8080')"
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ def main():
|
||||
help="config file (legacy, use --config instead)",
|
||||
)
|
||||
parser.add_argument("-d", "--days", dest="days", action="store", type=int, help="number of days (60)", default=60)
|
||||
parser.add_argument("--tool_id", default=None, help="Text to match against tool_id" "Default: match all")
|
||||
parser.add_argument("--tool_id", default=None, help="Text to match against tool_id. Default: match all")
|
||||
parser.add_argument(
|
||||
"--template",
|
||||
default=None,
|
||||
@@ -121,10 +121,10 @@ def main():
|
||||
default=False,
|
||||
)
|
||||
parser.add_argument(
|
||||
"--smtp", default=None, help="SMTP Server to use to send email. " "Default: [read from galaxy config file]"
|
||||
"--smtp", default=None, help="SMTP Server to use to send email. Default: [read from galaxy config file]"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--fromaddr", default=None, help="From address to use to send email. " "Default: [read from galaxy config file]"
|
||||
"--fromaddr", default=None, help="From address to use to send email. Default: [read from galaxy config file]"
|
||||
)
|
||||
populate_config_args(parser)
|
||||
|
||||
@@ -138,14 +138,12 @@ def main():
|
||||
if args.smtp is not None:
|
||||
app_properties["smtp_server"] = args.smtp
|
||||
if app_properties.get("smtp_server") is None:
|
||||
parser.error("SMTP Server must be specified as an option (--smtp) " "or in the config file (smtp_server)")
|
||||
parser.error("SMTP Server must be specified as an option (--smtp) or in the config file (smtp_server)")
|
||||
|
||||
if args.fromaddr is not None:
|
||||
app_properties["email_from"] = args.fromaddr
|
||||
if app_properties.get("email_from") is None:
|
||||
parser.error(
|
||||
"From address must be specified as an option " "(--fromaddr) or in the config file " "(email_from)"
|
||||
)
|
||||
parser.error("From address must be specified as an option (--fromaddr) or in the config file (email_from)")
|
||||
|
||||
scriptdir = os.path.dirname(os.path.abspath(__file__))
|
||||
template_file = args.template
|
||||
@@ -262,7 +260,7 @@ def administrative_delete_datasets(
|
||||
# Mark the HistoryDatasetAssociation as deleted
|
||||
hda.deleted = True
|
||||
app.sa_session.add(hda)
|
||||
print("Marked HistoryDatasetAssociation id %d as " "deleted" % hda.id)
|
||||
print("Marked HistoryDatasetAssociation id %d as deleted" % hda.id)
|
||||
session = app.sa_session()
|
||||
with transaction(session):
|
||||
session.commit()
|
||||
@@ -270,7 +268,7 @@ def administrative_delete_datasets(
|
||||
emailtemplate = Template(filename=template_file)
|
||||
for email, dataset_list in user_notifications.items():
|
||||
msgtext = emailtemplate.render(email=email, datasets=dataset_list, cutoff=cutoff_days)
|
||||
subject = "Galaxy Server Cleanup " "- %d datasets DELETED" % len(dataset_list)
|
||||
subject = "Galaxy Server Cleanup - %d datasets DELETED" % len(dataset_list)
|
||||
fromaddr = config.email_from
|
||||
print()
|
||||
print(f"From: {fromaddr}")
|
||||
|
||||
+1
-1
@@ -22,6 +22,6 @@ from docutils.core import (
|
||||
publish_cmdline,
|
||||
)
|
||||
|
||||
description = "Generates (X)HTML documents from standalone reStructuredText " "sources. " + default_description
|
||||
description = "Generates (X)HTML documents from standalone reStructuredText sources. " + default_description
|
||||
|
||||
publish_cmdline(writer_name="html", description=description)
|
||||
|
||||
@@ -82,20 +82,20 @@ def parse_arguments():
|
||||
"--like",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help="Use SQL `LIKE` operator to find " "a shed-installed tool using the tool's " '"short" id',
|
||||
help='Use SQL `LIKE` operator to find a shed-installed tool using the tool\'s "short" id',
|
||||
)
|
||||
populate_config_args(parser)
|
||||
parser.add_argument("-d", "--debug", action="store_true", default=False, help="Print extra info")
|
||||
parser.add_argument("-m", "--min", type=int, default=-1, help="Ignore runtimes less than MIN seconds")
|
||||
parser.add_argument("-M", "--max", type=int, default=-1, help="Ignore runtimes greater than MAX seconds")
|
||||
parser.add_argument("-u", "--user", help="Return stats for only this user (id, email, " "or username)")
|
||||
parser.add_argument("-u", "--user", help="Return stats for only this user (id, email, or username)")
|
||||
parser.add_argument(
|
||||
"-s", "--source", default="metrics", help="Runtime data source (SOURCES: {})".format(", ".join(DATA_SOURCES))
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.like and "/" in args.tool_id:
|
||||
print("ERROR: Do not use --like with a tool shed tool id (the tool " "id should not contain `/` characters)")
|
||||
print("ERROR: Do not use --like with a tool shed tool id (the tool id should not contain `/` characters)")
|
||||
sys.exit(2)
|
||||
|
||||
args.source = args.source.lower()
|
||||
|
||||
@@ -106,8 +106,8 @@ def send_mail_to_owner(app, owner, email, repositories_deprecated, days=14):
|
||||
subject = f"Regarding your tool shed repositories at {url}"
|
||||
message_body_template = (
|
||||
"The tool shed automated repository checker has discovered that one or more of your repositories hosted "
|
||||
+ "at this tool shed url ${url} have remained empty for over ${days} days, so they have been marked as deprecated. If you have plans "
|
||||
+ "for these repositories, you can mark them as un-deprecated at any time."
|
||||
"at this tool shed url ${url} have remained empty for over ${days} days, so they have been marked as deprecated. If you have plans "
|
||||
"for these repositories, you can mark them as un-deprecated at any time."
|
||||
)
|
||||
message_template = string.Template(message_body_template)
|
||||
body = "\n".join(textwrap.wrap(message_template.safe_substitute(days=days, url=url), width=95))
|
||||
|
||||
@@ -221,8 +221,7 @@ class TestHDAManager(HDATestCase):
|
||||
assert accessible == item1
|
||||
|
||||
self.log(
|
||||
"after setting a dataset to private (one user) permissions, "
|
||||
+ "access should be not allowed for other users"
|
||||
"after setting a dataset to private (one user) permissions, access should be not allowed for other users"
|
||||
)
|
||||
with self.assertRaises(exceptions.ItemAccessibilityException):
|
||||
self.hda_manager.get_accessible(
|
||||
@@ -233,7 +232,7 @@ class TestHDAManager(HDATestCase):
|
||||
|
||||
self.log(
|
||||
"a copy of a restricted dataset in another users history should be inaccessible even to "
|
||||
+ "the histories owner"
|
||||
"the histories owner"
|
||||
)
|
||||
history2 = self.history_manager.create(name="history2", user=non_owner)
|
||||
self.trans.set_history(history2)
|
||||
@@ -300,7 +299,7 @@ class TestHDAManager(HDATestCase):
|
||||
|
||||
self.log(
|
||||
"anonymous users should not be able to access datasets within their own histories if "
|
||||
+ "permissions do not allow"
|
||||
"permissions do not allow"
|
||||
)
|
||||
assert not self.hda_manager.is_accessible(item1, anon_user)
|
||||
with self.assertRaises(exceptions.ItemAccessibilityException):
|
||||
@@ -308,7 +307,7 @@ class TestHDAManager(HDATestCase):
|
||||
|
||||
self.log(
|
||||
"those users with access permissions should still be allowed access to datasets "
|
||||
+ "within anon users' histories"
|
||||
"within anon users' histories"
|
||||
)
|
||||
assert self.hda_manager.is_accessible(item1, dataset_owner)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ Name: {{ name }}
|
||||
"""
|
||||
DEFAULT_TEMPLATE_HEADER_SUBSTRING = "The following variables are available"
|
||||
DEFAULT_TEMPLATE_OUTPUT_SUBSTRING = "<!DOCTYPE html>"
|
||||
CUSTOM_TEMPLATE_OUTPUT = "This is my custom template!\n" f"Name: {CONTEXT['name']}"
|
||||
CUSTOM_TEMPLATE_OUTPUT = f"This is my custom template!\nName: {CONTEXT['name']}"
|
||||
|
||||
|
||||
def test_it_can_render_a_default_template(tmp_path):
|
||||
|
||||
@@ -147,7 +147,7 @@ def test_strip_properties_single():
|
||||
|
||||
|
||||
def test_strip_properties_double():
|
||||
double_expression = 'FeatureData[Taxonomy % Properties("SILVIA"), ' 'DistanceMatrix % Axes("ASV", "ASV")]'
|
||||
double_expression = 'FeatureData[Taxonomy % Properties("SILVIA"), DistanceMatrix % Axes("ASV", "ASV")]'
|
||||
stripped_expression = "FeatureData[Taxonomy, DistanceMatrix]"
|
||||
|
||||
reconstructed_expression = _strip_properties(double_expression)
|
||||
@@ -156,7 +156,7 @@ def test_strip_properties_double():
|
||||
|
||||
|
||||
def test_strip_properties_nested():
|
||||
nested_expression = "Tuple[FeatureData[Taxonomy % " 'Properties("SILVIA")] % Axes("ASV", "ASV")]'
|
||||
nested_expression = 'Tuple[FeatureData[Taxonomy % Properties("SILVIA")] % Axes("ASV", "ASV")]'
|
||||
stripped_expression = "Tuple[FeatureData[Taxonomy]]"
|
||||
|
||||
reconstructed_expression = _strip_properties(nested_expression)
|
||||
@@ -177,7 +177,7 @@ def test_strip_properties_complex():
|
||||
|
||||
|
||||
def test_strip_properties_keeps_different_binop():
|
||||
expression_with_different_binop = 'FeatureData[Taxonomy % Properties("SILVIA"), ' "Taxonomy & Properties]"
|
||||
expression_with_different_binop = 'FeatureData[Taxonomy % Properties("SILVIA"), Taxonomy & Properties]'
|
||||
stripped_expression = "FeatureData[Taxonomy, Taxonomy & Properties]"
|
||||
|
||||
reconstructed_expression = _strip_properties(expression_with_different_binop)
|
||||
|
||||
@@ -102,7 +102,7 @@ def parse_args(args):
|
||||
"--object_label",
|
||||
type=str,
|
||||
required=True,
|
||||
help="The label of the object created on the cloud-based storage for " "the data to be persisted.",
|
||||
help="The label of the object created on the cloud-based storage for the data to be persisted.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
@@ -110,7 +110,7 @@ def parse_args(args):
|
||||
"--filename",
|
||||
type=str,
|
||||
required=True,
|
||||
help="The (absolute) filename of the data to be persisted on the " "cloud-based storage.",
|
||||
help="The (absolute) filename of the data to be persisted on the cloud-based storage.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
|
||||
@@ -155,7 +155,7 @@ def add_file(dataset, registry, output_path: str) -> Dict[str, str]:
|
||||
if datatype.dataset_content_needs_grooming(dataset.path):
|
||||
err_msg = (
|
||||
"The uploaded files need grooming, so change your <b>Copy data into Galaxy?</b> selection to be "
|
||||
+ "<b>Copy files into Galaxy</b> instead of <b>Link to files without copying into Galaxy</b> so grooming can be performed."
|
||||
"<b>Copy files into Galaxy</b> instead of <b>Link to files without copying into Galaxy</b> so grooming can be performed."
|
||||
)
|
||||
raise UploadProblemException(err_msg)
|
||||
if not link_data_only:
|
||||
|
||||
Reference in New Issue
Block a user