From bd9c8314edf7ec1ca533fcfb0756f5f28d1a250e Mon Sep 17 00:00:00 2001 From: John Chilton Date: Wed, 24 Aug 2022 18:02:07 -0400 Subject: [PATCH] Stronger type checking for provided_metadata. --- lib/galaxy/tool_util/provided_metadata.py | 16 ++++++++-------- mypy.ini | 2 -- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/galaxy/tool_util/provided_metadata.py b/lib/galaxy/tool_util/provided_metadata.py index da899630b1a..67854501dde 100644 --- a/lib/galaxy/tool_util/provided_metadata.py +++ b/lib/galaxy/tool_util/provided_metadata.py @@ -103,8 +103,8 @@ class LegacyToolProvidedMetadata(BaseToolProvidedMetadata): with open(meta_file) as f: for line in f: try: - line = stringify_dictionary_keys(json.loads(line)) - assert "type" in line + line_as_dict = stringify_dictionary_keys(json.loads(line)) + assert "type" in line_as_dict except Exception as e: message = f'Got JSON data from tool, but line is improperly formatted or no "type" key in: [{line}]' raise ValueError(message) from e @@ -112,12 +112,12 @@ class LegacyToolProvidedMetadata(BaseToolProvidedMetadata): # This isn't insecure. We loop the job's output datasets in # the finish method, so if a tool writes out metadata for a # dataset id that it doesn't own, it'll just be ignored. - dataset_id_not_specified = line["type"] == "dataset" and "dataset_id" not in line + dataset_id_not_specified = line_as_dict["type"] == "dataset" and "dataset_id" not in line_as_dict if dataset_id_not_specified: - dataset_basename = line["dataset"] + dataset_basename = line_as_dict["dataset"] if job_wrapper: try: - line["dataset_id"] = job_wrapper.job_io.get_output_file_id(dataset_basename) + line_as_dict["dataset_id"] = job_wrapper.job_io.get_output_file_id(dataset_basename) except KeyError: log.warning( f"({job_wrapper.job_id}) Tool provided job dataset-specific metadata without specifying a dataset" @@ -131,11 +131,11 @@ class LegacyToolProvidedMetadata(BaseToolProvidedMetadata): ) dataset_id = match.group(2) if dataset_id.isdigit(): - line["dataset_id"] = dataset_id + line_as_dict["dataset_id"] = dataset_id else: - line["dataset_uuid"] = dataset_id + line_as_dict["dataset_uuid"] = dataset_id - self.tool_provided_job_metadata.append(line) + self.tool_provided_job_metadata.append(line_as_dict) def get_dataset_meta(self, output_name, dataset_id, dataset_uuid): for meta in self.tool_provided_job_metadata: diff --git a/mypy.ini b/mypy.ini index ee5ee5aaa6a..bfca49825f8 100644 --- a/mypy.ini +++ b/mypy.ini @@ -161,8 +161,6 @@ check_untyped_defs = False check_untyped_defs = False [mypy-galaxy.tools.bundled.filters.join] check_untyped_defs = False -[mypy-galaxy.tool_util.provided_metadata] -check_untyped_defs = False [mypy-galaxy.tool_util.output_checker] check_untyped_defs = False [mypy-galaxy.tool_util.verify.test_data]