internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: DataBiosphere/toil

Issue:
LSF bsub memory calculation off by a factor of 1000
My toil leader submmited 
```
Issued job 'CWLJob' kind-CWLJob/instance-9xk___sp with job batch system ID: 7 and cores: 1, disk: 3.0 Gi, and memory: 2.0 Gi
```
But then when I checked on the job I saw that it requested ~2tb of memory
```
 STACKLIMIT MEMLIMIT
      1 G     1.9 T
```
megabytes_of_mem ( [here](https://github.com/DataBiosphere/toil/blob/master/src/toil/batchSystems/lsfHelper.py#L2062048000.0) ) had a value of 2048000.0


Version: Latest master, commit: 92c9d23aea219b07f92c37cdf702c81254067357
I have a PR ready that will fix this

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-896)
┆Issue Number: TOIL-896



Discussion:

Resolving patch:
diff --git a/src/toil/batchSystems/lsfHelper.py b/src/toil/batchSystems/lsfHelper.py
--- a/src/toil/batchSystems/lsfHelper.py
+++ b/src/toil/batchSystems/lsfHelper.py
@@ -203,7 +203,7 @@ def parse_memory_limit(mem: float) -> str:
 def parse_memory(mem: float, resource: bool) -> str:
     """Parse memory parameter."""
     lsf_unit = get_lsf_units(resource=resource)
-    megabytes_of_mem = convert_units(float(mem) * 1024, src_unit=lsf_unit, dst_unit='MB')
+    megabytes_of_mem = convert_units(float(mem), src_unit=lsf_unit, dst_unit='MB')
     if megabytes_of_mem < 1:
         megabytes_of_mem = 1.0
     # round as a string here to avoid returning something like 1.231e+12


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to toilClean.py
Add type hints to src/toil/utils/toilClean.py so it can be checked by mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-899)
┆Issue Number: TOIL-899



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -99,7 +99,6 @@ def main():
         'src/toil/utils/toilDestroyCluster.py',
         'src/toil/utils/toilDebugJob.py',
         'src/toil/utils/toilRsyncCluster.py',
-        'src/toil/utils/toilClean.py',
         'src/toil/utils/toilLaunchCluster.py',
         'src/toil/lib/memoize.py',
         'src/toil/lib/throttle.py',
diff --git a/src/toil/utils/toilClean.py b/src/toil/utils/toilClean.py
--- a/src/toil/utils/toilClean.py
+++ b/src/toil/utils/toilClean.py
@@ -21,7 +21,7 @@
 logger = logging.getLogger(__name__)
 
 
-def main():
+def main() -> None:
     parser = parser_with_common_options(jobstore_option=True)
 
     options = parser.parse_args()


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to toilRsyncCluster.py
Add type hints to src/toil/utils/toilRsyncCluster.py so it can be checked by mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-900)
┆Issue Number: TOIL-900



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -98,7 +98,6 @@ def main():
         'src/toil/utils/__init__.py',
         'src/toil/utils/toilDestroyCluster.py',
         'src/toil/utils/toilDebugJob.py',
-        'src/toil/utils/toilRsyncCluster.py',
         'src/toil/utils/toilLaunchCluster.py',
         'src/toil/lib/memoize.py',
         'src/toil/lib/throttle.py',
diff --git a/src/toil/utils/toilRsyncCluster.py b/src/toil/utils/toilRsyncCluster.py
--- a/src/toil/utils/toilRsyncCluster.py
+++ b/src/toil/utils/toilRsyncCluster.py
@@ -22,7 +22,7 @@
 logger = logging.getLogger(__name__)
 
 
-def main():
+def main() -> None:
     parser = parser_with_common_options(provisioner_options=True, jobstore_option=False)
     parser.add_argument("--insecure", dest='insecure', action='store_true', required=False,
                         help="Temporarily disable strict host key checking.")


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to toilDestroyCluster.py
Add type hints to src/toil/utils/toilDestroyCluster.py so it can be checked under mypy during linting. 

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-905)
┆Issue Number: TOIL-905



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -96,7 +96,6 @@ def main():
         'src/toil/utils/toilSshCluster.py',
         'src/toil/utils/toilMain.py',
         'src/toil/utils/__init__.py',
-        'src/toil/utils/toilDestroyCluster.py',
         'src/toil/utils/toilDebugJob.py',
         'src/toil/utils/toilRsyncCluster.py',
         'src/toil/utils/toilClean.py',
diff --git a/src/toil/utils/toilDestroyCluster.py b/src/toil/utils/toilDestroyCluster.py
--- a/src/toil/utils/toilDestroyCluster.py
+++ b/src/toil/utils/toilDestroyCluster.py
@@ -20,7 +20,7 @@
 
 logger = logging.getLogger(__name__)
 
-def main():
+def main() -> None:
     parser = parser_with_common_options(provisioner_options=True, jobstore_option=False)
     options = parser.parse_args()
     set_logging_from_options(options)


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to toilDebugJob.py
Add type hints to src/toil/utils/toilDebugJob.py so it can be checked by mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-906)
┆Issue Number: TOIL-906



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -96,7 +96,6 @@ def main():
         'src/toil/utils/toilSshCluster.py',
         'src/toil/utils/toilMain.py',
         'src/toil/utils/__init__.py',
-        'src/toil/utils/toilDebugJob.py',
         'src/toil/utils/toilLaunchCluster.py',
         'src/toil/lib/memoize.py',
         'src/toil/lib/throttle.py',
diff --git a/src/toil/utils/toilDebugJob.py b/src/toil/utils/toilDebugJob.py
--- a/src/toil/utils/toilDebugJob.py
+++ b/src/toil/utils/toilDebugJob.py
@@ -22,7 +22,7 @@
 logger = logging.getLogger(__name__)
 
 
-def main():
+def main() -> None:
     parser = parser_with_common_options(jobstore_option=True)
     parser.add_argument("jobID", nargs=1,
                         help="The job store id of a job within the provided jobstore to run by itself.")


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to toilSshCluster.py
Adds type hints to src/toil/utils/toilSshCluster.py so it can be checked under mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-912)
┆Issue Number: TOIL-912



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -90,10 +90,8 @@ def main():
         'src/toil/jobStores/aws/jobStore.py',
         'src/toil/jobStores/aws/__init__.py',
         'src/toil/utils/toilDebugFile.py',
-        'src/toil/utils/toilUpdateEC2Instances.py',
         'src/toil/utils/toilStatus.py',
         'src/toil/utils/toilStats.py',
-        'src/toil/utils/toilSshCluster.py',
         'src/toil/utils/toilMain.py',
         'src/toil/utils/__init__.py',
         'src/toil/utils/toilDestroyCluster.py',
diff --git a/src/toil/utils/toilSshCluster.py b/src/toil/utils/toilSshCluster.py
--- a/src/toil/utils/toilSshCluster.py
+++ b/src/toil/utils/toilSshCluster.py
@@ -19,11 +19,12 @@
 from toil.common import parser_with_common_options
 from toil.provisioners import cluster_factory
 from toil.statsAndLogging import set_logging_from_options
+from typing import List
 
 logger = logging.getLogger(__name__)
 
 
-def main():
+def main() -> None:
     parser = parser_with_common_options(provisioner_options=True, jobstore_option=False)
     parser.add_argument("--insecure", action='store_true',
                         help="Temporarily disable strict host key checking.")
@@ -45,7 +46,7 @@ def main():
                               clusterName=options.clusterName,
                               zone=options.zone)
     command = options.args if options.args else ['bash']
-    sshOptions: list = options.sshOptions
+    sshOptions: List[str] = options.sshOptions
 
     # Forward ports:
     # 3000 for Grafana dashboard
diff --git a/src/toil/utils/toilUpdateEC2Instances.py b/src/toil/utils/toilUpdateEC2Instances.py
--- a/src/toil/utils/toilUpdateEC2Instances.py
+++ b/src/toil/utils/toilUpdateEC2Instances.py
@@ -29,7 +29,7 @@ def internet_connection() -> bool:
         return False
 
 
-def main():
+def main() -> None:
     if not internet_connection():
         raise RuntimeError('No internet.  Updating the EC2 Instance list requires internet.')
     updateStaticEC2Instances()


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to compatibility.py
Adds type hints to src/toil/lib/compatibility.py so it can be checked under mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-921)
┆Issue Number: TOIL-921



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -91,14 +91,12 @@ def main():
         'src/toil/jobStores/aws/jobStore.py',
         'src/toil/jobStores/aws/__init__.py',
         'src/toil/utils/toilDebugFile.py',
-        # 'src/toil/utils/toilStatus.py',
         'src/toil/utils/toilStats.py',
         'src/toil/utils/__init__.py',
         'src/toil/utils/toilLaunchCluster.py',
         'src/toil/lib/memoize.py',
         'src/toil/lib/throttle.py',
         'src/toil/lib/humanize.py',
-        'src/toil/lib/compatibility.py',
         'src/toil/lib/iterables.py',
         'src/toil/lib/bioio.py',
         'src/toil/lib/ec2.py',
@@ -112,7 +110,6 @@ def main():
         'src/toil/lib/objects.py',
         'src/toil/lib/io.py',
         'src/toil/lib/docker.py',
-        # 'src/toil/lib/encryption/_nacl.py',
         'src/toil/lib/encryption/_dummy.py',
         'src/toil/lib/encryption/conftest.py',
         'src/toil/lib/encryption/__init__.py',
diff --git a/src/toil/lib/compatibility.py b/src/toil/lib/compatibility.py
--- a/src/toil/lib/compatibility.py
+++ b/src/toil/lib/compatibility.py
@@ -1,2 +1,4 @@
-def compat_bytes(s):
+from typing import Union
+
+def compat_bytes(s: Union[bytes, str]) -> str:
     return s.decode('utf-8') if isinstance(s, bytes) else s


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to toilLaunchCluster.py
Adds type hints to src/toil/utils/toilLaunchCluster.py so it can be checked under mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-910)
┆Issue Number: TOIL-910



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -91,7 +91,6 @@ def main():
         'src/toil/jobStores/aws/__init__.py',
         'src/toil/utils/toilStats.py',
         'src/toil/utils/__init__.py',
-        'src/toil/utils/toilLaunchCluster.py',
         'src/toil/lib/memoize.py',
         'src/toil/lib/throttle.py',
         'src/toil/lib/humanize.py',
diff --git a/src/toil/utils/toilLaunchCluster.py b/src/toil/utils/toilLaunchCluster.py
--- a/src/toil/utils/toilLaunchCluster.py
+++ b/src/toil/utils/toilLaunchCluster.py
@@ -19,11 +19,12 @@
 from toil.common import parser_with_common_options
 from toil.provisioners import parse_node_types, check_valid_node_types, cluster_factory
 from toil.statsAndLogging import set_logging_from_options
+from typing import List, Dict, Union, Tuple
 
 logger = logging.getLogger(__name__)
 
 
-def create_tags_dict(tags: list) -> dict:
+def create_tags_dict(tags: List[str]) -> Dict[str, str]:
     tags_dict = dict()
     for tag in tags:
         key, value = tag.split('=')
@@ -31,7 +32,7 @@ def create_tags_dict(tags: list) -> dict:
     return tags_dict
 
 
-def main():
+def main() -> None:
     parser = parser_with_common_options(provisioner_options=True, jobstore_option=False)
     parser.add_argument("-T", "--clusterType", dest="clusterType",
                         choices=['mesos', 'kubernetes'], default='mesos',
@@ -119,7 +120,7 @@ def main():
 
     # This holds either ints to launch static nodes, or tuples of ints
     # specifying ranges to launch managed auto-scaling nodes, for each type.
-    nodeCounts = []
+    nodeCounts: List[Union[int, Tuple[int, int]]] = []
 
     if ((worker_node_types != [] or worker_node_ranges != []) and not
         (worker_node_types != [] and worker_node_ranges != [])):
@@ -208,6 +209,3 @@ def main():
                                         preemptable=True, spotBid=wanted[1])
 
     logger.info('Cluster created successfully.')
-
-
-


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to toilDebugFile.py
Adds type hints to src/toil/utils/toilDebugFile.py so it can be checked under mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-911)
┆Issue Number: TOIL-911



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -90,7 +90,6 @@ def main():
         'src/toil/jobStores/aws/utils.py',
         'src/toil/jobStores/aws/jobStore.py',
         'src/toil/jobStores/aws/__init__.py',
-        'src/toil/utils/toilDebugFile.py',
         'src/toil/utils/toilStats.py',
         'src/toil/utils/__init__.py',
         'src/toil/utils/toilLaunchCluster.py',
diff --git a/src/toil/utils/toilDebugFile.py b/src/toil/utils/toilDebugFile.py
--- a/src/toil/utils/toilDebugFile.py
+++ b/src/toil/utils/toilDebugFile.py
@@ -16,13 +16,16 @@
 import os.path
 
 from toil.common import Config, Toil, parser_with_common_options
+from toil.jobStores.abstractJobStore import AbstractJobStore
 from toil.statsAndLogging import set_logging_from_options
 from toil.lib.resources import glob
+from toil.lib.expando import Expando
+from typing import Optional
 
 logger = logging.getLogger(__name__)
 
 
-def fetchJobStoreFiles(jobStore, options):
+def fetchJobStoreFiles(jobStore: AbstractJobStore, options: Expando) -> None:
     """
     Takes a list of file names as glob patterns, searches for these within a
     given directory, and attempts to take all of the files found and copy them
@@ -45,7 +48,7 @@ def fetchJobStoreFiles(jobStore, options):
                               symlink=options.useSymlinks)
 
 
-def printContentsOfJobStore(jobStorePath, nameOfJob=None):
+def printContentsOfJobStore(jobStorePath: str, nameOfJob: Optional[str] = None) -> None:
     """
     Fetch a list of all files contained in the jobStore directory input if
     nameOfJob is not declared, otherwise it only prints out the names of files
@@ -77,7 +80,7 @@ def printContentsOfJobStore(jobStorePath, nameOfJob=None):
                 f.write("\n")
 
 
-def main():
+def main() -> None:
     parser = parser_with_common_options(jobstore_option=True)
     parser.add_argument("--localFilePath",
                         nargs=1,


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to humanize.py
Add type hints to `src/toil/lib/humanize.py` so it can be checked under mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-946)
┆Issue Number: TOIL-946



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -89,7 +89,6 @@ def main():
         'src/toil/utils/__init__.py',
         'src/toil/lib/memoize.py',
         'src/toil/lib/throttle.py',
-        'src/toil/lib/humanize.py',
         'src/toil/lib/iterables.py',
         'src/toil/lib/bioio.py',
         'src/toil/lib/ec2.py',
diff --git a/src/toil/lib/humanize.py b/src/toil/lib/humanize.py
--- a/src/toil/lib/humanize.py
+++ b/src/toil/lib/humanize.py
@@ -4,7 +4,7 @@
 
 # http://code.activestate.com/recipes/578019-bytes-to-human-human-to-bytes-converter/
 import logging
-from typing import Optional, SupportsInt
+from typing import SupportsInt
 from toil.lib.conversions import bytes2human as b2h, human2bytes as h2b
 
 """
@@ -19,17 +19,15 @@
 logger = logging.getLogger(__name__)
 
 
-def bytes2human(n: SupportsInt, fmt: Optional[str] = None, symbols: Optional[str] = None) -> str:
+def bytes2human(n: SupportsInt) -> str:
     """
-    Convert n bytes into a human readable string based on format.
-    symbols can be either "customary", "customary_ext", "iec" or "iec_ext",
-    see: http://goo.gl/kTQMs
+    Convert n bytes into a human readable string.
     """
     logger.warning('Deprecated toil method.  Please use "toil.lib.conversions.bytes2human()" instead."')
     return b2h(n)
 
 
-def human2bytes(s):
+def human2bytes(s: str) -> int:
     """
     Attempts to guess the string format based on default symbols
     set and return the corresponding bytes as an integer.


Test patch:
Repository: DataBiosphere/toil

Issue:
Add type hints to wdl_types.py
Add type hints to `src/toil/wdl/wdl_types.py` so it can be checked under mypy during linting.

Refers to #3568.

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-952)
┆Issue Number: TOIL-952



Discussion:

Resolving patch:
diff --git a/contrib/admin/mypy-with-ignore.py b/contrib/admin/mypy-with-ignore.py
--- a/contrib/admin/mypy-with-ignore.py
+++ b/contrib/admin/mypy-with-ignore.py
@@ -35,7 +35,6 @@ def main():
         'src/toil/deferred.py',
         'src/toil/version.py',
         'src/toil/wdl/utils.py',
-        'src/toil/wdl/wdl_types.py',
         'src/toil/wdl/wdl_synthesis.py',
         'src/toil/wdl/wdl_analysis.py',
         'src/toil/wdl/wdl_functions.py',
diff --git a/src/toil/wdl/wdl_types.py b/src/toil/wdl/wdl_types.py
--- a/src/toil/wdl/wdl_types.py
+++ b/src/toil/wdl/wdl_types.py
@@ -1,5 +1,5 @@
 from abc import ABC
-from typing import Any
+from typing import Any, Dict, Optional
 
 from toil.job import Promise
 
@@ -27,7 +27,7 @@ def name(self) -> str:
         raise NotImplementedError
 
     @property
-    def default_value(self):
+    def default_value(self) -> Optional[str]:
         """
         Default value if optional.
         """
@@ -55,13 +55,13 @@ def create(self, value: Any, output: bool = False) -> Any:
     def _create(self, value: Any) -> Any:
         raise NotImplementedError
 
-    def __eq__(self, other):
+    def __eq__(self, other: Any) -> bool:
         return self.name.__eq__(other)
 
-    def __str__(self):
+    def __str__(self) -> str:
         return self.name.__str__()
 
-    def __repr__(self):
+    def __repr__(self) -> str:
         return self.name.__repr__()
 
 
@@ -80,7 +80,7 @@ def name(self) -> str:
         return 'String'
 
     @property
-    def default_value(self):
+    def default_value(self) -> str:
         return ''
 
     def _create(self, value: Any) -> Any:
@@ -128,7 +128,7 @@ def name(self) -> str:
         return 'File'
 
     @property
-    def default_value(self):
+    def default_value(self) -> str:
         return ''
 
     def _create(self, value: Any) -> Any:
@@ -210,7 +210,7 @@ class WDLFile:
     """
     Represents a WDL File.
     """
-    def __init__(self, file_path, file_name=None, imported=False):
+    def __init__(self, file_path: str, file_name: Optional[str] = None, imported: bool = False):
         """
         :param file_path: Path to file.
         :param file_name: Optional. Preserved file name.
@@ -232,13 +232,13 @@ def __init__(self, left: Any, right: Any):
         self.left = left
         self.right = right
 
-    def to_dict(self):
+    def to_dict(self) -> Dict[str, Any]:
         return {'left': self.left, 'right': self.right}
 
-    def __eq__(self, other):
+    def __eq__(self, other: Any) -> Any:
         if not isinstance(other, WDLPair):
             return False
         return self.left == other.left and self.right == other.right
 
-    def __repr__(self):
+    def __repr__(self) -> str:
         return str(self.to_dict())


Test patch:
Repository: DataBiosphere/toil

Issue:
cwl: test for exit_code of exceptions leads to the wrong exception being thrown
```
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/toil-cwl-runner", line 33, in <module>
    sys.exit(load_entry_point('toil==5.5.0', 'console_scripts', 'toil-cwl-runner')())
  File "/usr/lib/python3/dist-packages/toil/cwl/cwltoil.py", line 3404, in main
    if getattr(err, "exit_code") == CWL_UNSUPPORTED_REQUIREMENT_EXIT_CODE:
AttributeError: 'InsufficientSystemResources' object has no attribute 'exit_code'
```

┆Issue is synchronized with this [Jira Task](https://ucsc-cgl.atlassian.net/browse/TOIL-1047)
┆Issue Number: TOIL-1047



Discussion:

Resolving patch:
diff --git a/src/toil/cwl/cwltoil.py b/src/toil/cwl/cwltoil.py
--- a/src/toil/cwl/cwltoil.py
+++ b/src/toil/cwl/cwltoil.py
@@ -3401,7 +3401,7 @@ def main(args: Union[List[str]] = None, stdout: TextIO = sys.stdout) -> int:
             except Exception as err:
                 # TODO: We can't import FailedJobsException due to a circular
                 # import but that's what we'd expect here.
-                if getattr(err, "exit_code") == CWL_UNSUPPORTED_REQUIREMENT_EXIT_CODE:
+                if getattr(err, "exit_code", None) == CWL_UNSUPPORTED_REQUIREMENT_EXIT_CODE:
                     # We figured out that we can't support this workflow.
                     logging.error(err)
                     logging.error(


Test patch: