Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/cwltool/argparser.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/cwltool/argparser.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,480 +0,0 @@ -"""Command line argument parsing for cwltool.""" -from __future__ import absolute_import, print_function - -import argparse -import os -from typing import (Any, AnyStr, Dict, List, MutableMapping, MutableSequence, - Optional, Sequence, Union, cast) - -from schema_salad.ref_resolver import file_uri -from typing_extensions import Text # pylint: disable=unused-import -# move to a regular typing import when Python 3.3-3.6 is no longer supported - -from .loghandler import _logger -from .process import Process, shortname # pylint: disable=unused-import -from .resolver import ga4gh_tool_registries -from .software_requirements import SOFTWARE_REQUIREMENTS_ENABLED -from .utils import DEFAULT_TMP_PREFIX - - -def arg_parser(): # type: () -> argparse.ArgumentParser - parser = argparse.ArgumentParser( - description='Reference executor for Common Workflow Language standards.') - parser.add_argument("--basedir", type=Text) - parser.add_argument("--outdir", type=Text, default=os.path.abspath('.'), - help="Output directory, default current directory") - - parser.add_argument("--parallel", action="store_true", default=False, - help="[experimental] Run jobs in parallel. ") - envgroup = parser.add_mutually_exclusive_group() - envgroup.add_argument("--preserve-environment", type=Text, action="append", - help="Preserve specific environment variable when " - "running CommandLineTools. May be provided multiple " - "times.", metavar="ENVVAR", default=["PATH"], - dest="preserve_environment") - envgroup.add_argument("--preserve-entire-environment", action="store_true", - help="Preserve all environment variable when running " - "CommandLineTools.", default=False, - dest="preserve_entire_environment") - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--rm-container", action="store_true", default=True, - help="Delete Docker container used by jobs after they exit (default)", - dest="rm_container") - - exgroup.add_argument( - "--leave-container", action="store_false", default=True, - help="Do not delete Docker container used by jobs after they exit", - dest="rm_container") - - cidgroup = parser.add_argument_group( - "Options for recording the Docker container identifier into a file.") - # Disabled as containerid is now saved by default - cidgroup.add_argument("--record-container-id", action="store_true", - default=False, - help = argparse.SUPPRESS, - dest="record_container_id") - - cidgroup.add_argument( - "--cidfile-dir", type=Text, help="Store the Docker " - "container ID into a file in the specified directory.", - default=None, dest="cidfile_dir") - - cidgroup.add_argument( - "--cidfile-prefix", type=Text, - help="Specify a prefix to the container ID filename. " - "Final file name will be followed by a timestamp. " - "The default is no prefix.", - default=None, dest="cidfile_prefix") - - parser.add_argument("--tmpdir-prefix", type=Text, - help="Path prefix for temporary directories", - default=DEFAULT_TMP_PREFIX) - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--tmp-outdir-prefix", type=Text, - help="Path prefix for intermediate output directories", - default=DEFAULT_TMP_PREFIX) - - exgroup.add_argument( - "--cachedir", type=Text, default="", - help="Directory to cache intermediate workflow outputs to avoid recomputing steps.") - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--rm-tmpdir", action="store_true", default=True, - help="Delete intermediate temporary directories (default)", - dest="rm_tmpdir") - - exgroup.add_argument("--leave-tmpdir", action="store_false", - default=True, help="Do not delete intermediate temporary directories", - dest="rm_tmpdir") - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument( - "--move-outputs", action="store_const", const="move", default="move", - help="Move output files to the workflow output directory and delete " - "intermediate output directories (default).", dest="move_outputs") - - exgroup.add_argument("--leave-outputs", action="store_const", const="leave", default="move", - help="Leave output files in intermediate output directories.", - dest="move_outputs") - - exgroup.add_argument("--copy-outputs", action="store_const", const="copy", default="move", - help="Copy output files to the workflow output directory, don't delete intermediate output directories.", - dest="move_outputs") - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--enable-pull", default=True, action="store_true", - help="Try to pull Docker images", dest="pull_image") - - exgroup.add_argument("--disable-pull", default=True, action="store_false", - help="Do not try to pull Docker images", dest="pull_image") - - parser.add_argument("--rdf-serializer", - help="Output RDF serialization format used by --print-rdf (one of turtle (default), n3, nt, xml)", - default="turtle") - - parser.add_argument("--eval-timeout", - help="Time to wait for a Javascript expression to evaluate before giving an error, default 20s.", - type=float, - default=20) - - provgroup = parser.add_argument_group("Options for recording provenance " - "information of the execution") - provgroup.add_argument("--provenance", - help="Save provenance to specified folder as a " - "Research Object that captures and aggregates " - "workflow execution and data products.", - type=Text) - - provgroup.add_argument("--enable-user-provenance", default=False, - action="store_true", - help="Record user account info as part of provenance.", - dest="user_provenance") - provgroup.add_argument("--disable-user-provenance", default=False, - action="store_false", - help="Do not record user account info in provenance.", - dest="user_provenance") - provgroup.add_argument("--enable-host-provenance", default=False, - action="store_true", - help="Record host info as part of provenance.", - dest="host_provenance") - provgroup.add_argument("--disable-host-provenance", default=False, - action="store_false", - help="Do not record host info in provenance.", - dest="host_provenance") - provgroup.add_argument( - "--orcid", help="Record user ORCID identifier as part of " - "provenance, e.g. https://orcid.org/0000-0002-1825-0097 " - "or 0000-0002-1825-0097. Alternatively the environment variable " - "ORCID may be set.", dest="orcid", default=os.environ.get("ORCID", ''), - type=Text) - provgroup.add_argument( - "--full-name", help="Record full name of user as part of provenance, " - "e.g. Josiah Carberry. You may need to use shell quotes to preserve " - "spaces. Alternatively the environment variable CWL_FULL_NAME may " - "be set.", dest="cwl_full_name", default=os.environ.get("CWL_FULL_NAME", ''), - type=Text) - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--print-rdf", action="store_true", - help="Print corresponding RDF graph for workflow and exit") - exgroup.add_argument("--print-dot", action="store_true", - help="Print workflow visualization in graphviz format and exit") - exgroup.add_argument("--print-pre", action="store_true", help="Print CWL document after preprocessing.") - exgroup.add_argument("--print-deps", action="store_true", help="Print CWL document dependencies.") - exgroup.add_argument("--print-input-deps", action="store_true", help="Print input object document dependencies.") - exgroup.add_argument("--pack", action="store_true", help="Combine components into single document and print.") - exgroup.add_argument("--version", action="store_true", help="Print version and exit") - exgroup.add_argument("--validate", action="store_true", help="Validate CWL document only.") - exgroup.add_argument("--print-supported-versions", action="store_true", help="Print supported CWL specs.") - exgroup.add_argument("--print-subgraph", action="store_true", - help="Print workflow subgraph that will execute " - "(can combine with --target)") - exgroup.add_argument("--print-targets", action="store_true", help="Print targets (output parameters)") - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--strict", action="store_true", - help="Strict validation (unrecognized or out of place fields are error)", - default=True, dest="strict") - exgroup.add_argument("--non-strict", action="store_false", help="Lenient validation (ignore unrecognized fields)", - default=True, dest="strict") - - parser.add_argument("--skip-schemas", action="store_true", - help="Skip loading of schemas", default=False, dest="skip_schemas") - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--verbose", action="store_true", help="Default logging") - exgroup.add_argument("--quiet", action="store_true", help="Only print warnings and errors.") - exgroup.add_argument("--debug", action="store_true", help="Print even more logging") - - parser.add_argument( - "--strict-memory-limit", action="store_true", help="When running with " - "software containers and the Docker engine, pass either the " - "calculated memory allocation from ResourceRequirements or the " - "default of 1 gigabyte to Docker's --memory option.") - - parser.add_argument("--timestamps", action="store_true", help="Add " - "timestamps to the errors, warnings, and " - "notifications.") - parser.add_argument("--js-console", action="store_true", help="Enable javascript console output") - parser.add_argument("--disable-js-validation", action="store_true", help="Disable javascript validation.") - parser.add_argument("--js-hint-options-file", - type=Text, - help="File of options to pass to jshint." - "This includes the added option \"includewarnings\". ") - dockergroup = parser.add_mutually_exclusive_group() - dockergroup.add_argument("--user-space-docker-cmd", metavar="CMD", - help="(Linux/OS X only) Specify a user space docker " - "command (like udocker or dx-docker) that will be " - "used to call 'pull' and 'run'") - dockergroup.add_argument("--singularity", action="store_true", - default=False, help="[experimental] Use " - "Singularity runtime for running containers. " - "Requires Singularity v2.6.1+ and Linux with kernel " - "version v3.18+ or with overlayfs support " - "backported.") - dockergroup.add_argument("--no-container", action="store_false", - default=True, help="Do not execute jobs in a " - "Docker container, even when `DockerRequirement` " - "is specified under `hints`.", - dest="use_container") - - dependency_resolvers_configuration_help = argparse.SUPPRESS - dependencies_directory_help = argparse.SUPPRESS - use_biocontainers_help = argparse.SUPPRESS - conda_dependencies = argparse.SUPPRESS - - if SOFTWARE_REQUIREMENTS_ENABLED: - dependency_resolvers_configuration_help = "Dependency resolver configuration file describing how to adapt 'SoftwareRequirement' packages to current system." - dependencies_directory_help = "Defaut root directory used by dependency resolvers configuration." - use_biocontainers_help = "Use biocontainers for tools without an explicitly annotated Docker container." - conda_dependencies = "Short cut to use Conda to resolve 'SoftwareRequirement' packages." - - parser.add_argument("--beta-dependency-resolvers-configuration", default=None, help=dependency_resolvers_configuration_help) - parser.add_argument("--beta-dependencies-directory", default=None, help=dependencies_directory_help) - parser.add_argument("--beta-use-biocontainers", default=None, help=use_biocontainers_help, action="store_true") - parser.add_argument("--beta-conda-dependencies", default=None, help=conda_dependencies, action="store_true") - - parser.add_argument("--tool-help", action="store_true", help="Print command line help for tool") - - parser.add_argument("--relative-deps", choices=['primary', 'cwd'], - default="primary", help="When using --print-deps, print paths " - "relative to primary file or current working directory.") - - parser.add_argument("--enable-dev", action="store_true", - help="Enable loading and running development versions " - "of CWL spec.", default=False) - - parser.add_argument("--enable-ext", action="store_true", - help="Enable loading and running cwltool extensions " - "to CWL spec.", default=False) - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--enable-color", action="store_true", - help="Enable logging color (default enabled)", default=True) - exgroup.add_argument("--disable-color", action="store_false", dest="enable_color", - help="Disable colored logging (default false)") - - parser.add_argument("--default-container", - help="Specify a default docker container that will be used if the workflow fails to specify one.") - parser.add_argument("--no-match-user", action="store_true", - help="Disable passing the current uid to `docker run --user`") - parser.add_argument("--custom-net", type=Text, - help="Passed to `docker run` as the '--net' " - "parameter when NetworkAccess is true.") - parser.add_argument("--disable-validate", dest="do_validate", - action="store_false", default=True, - help=argparse.SUPPRESS) - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--enable-ga4gh-tool-registry", action="store_true", help="Enable resolution using GA4GH tool registry API", - dest="enable_ga4gh_tool_registry", default=True) - exgroup.add_argument("--disable-ga4gh-tool-registry", action="store_false", help="Disable resolution using GA4GH tool registry API", - dest="enable_ga4gh_tool_registry", default=True) - - parser.add_argument("--add-ga4gh-tool-registry", action="append", help="Add a GA4GH tool registry endpoint to use for resolution, default %s" % ga4gh_tool_registries, - dest="ga4gh_tool_registries", default=[]) - - parser.add_argument("--on-error", - help="Desired workflow behavior when a step fails. One of 'stop' (do not submit any more steps) or " - "'continue' (may submit other steps that are not downstream from the error). Default is 'stop'.", - default="stop", choices=("stop", "continue")) - - exgroup = parser.add_mutually_exclusive_group() - exgroup.add_argument("--compute-checksum", action="store_true", default=True, - help="Compute checksum of contents while collecting outputs", - dest="compute_checksum") - exgroup.add_argument("--no-compute-checksum", action="store_false", - help="Do not compute checksum of contents while collecting outputs", - dest="compute_checksum") - - parser.add_argument("--relax-path-checks", action="store_true", - default=False, help="Relax requirements on path names to permit " - "spaces and hash characters.", dest="relax_path_checks") - exgroup.add_argument("--make-template", action="store_true", - help="Generate a template input object") - - parser.add_argument("--force-docker-pull", action="store_true", - default=False, help="Pull latest docker image even if" - " it is locally present", dest="force_docker_pull") - parser.add_argument("--no-read-only", action="store_true", - default=False, help="Do not set root directory in the" - " container as read-only", dest="no_read_only") - - parser.add_argument("--overrides", type=str, - default=None, help="Read process requirement overrides from file.") - - parser.add_argument("--target", "-t", action="append", - help="Only execute steps that contribute to " - "listed targets (can provide more than once).") - - parser.add_argument("workflow", type=Text, nargs="?", default=None, - metavar='cwl_document', help="path or URL to a CWL Workflow, " - "CommandLineTool, or ExpressionTool. If the `inputs_object` has a " - "`cwl:tool` field indicating the path or URL to the cwl_document, " - " then the `workflow` argument is optional.") - parser.add_argument("job_order", nargs=argparse.REMAINDER, - metavar='inputs_object', help="path or URL to a YAML or JSON " - "formatted description of the required input values for the given " - "`cwl_document`.") - - return parser - - -def get_default_args(): - # type: () -> Dict[str, Any] - """Get default values of cwltool's command line options.""" - ap = arg_parser() - args = ap.parse_args([]) - return vars(args) - - -class FSAction(argparse.Action): - objclass = None # type: Text - - def __init__(self, option_strings, dest, nargs=None, **kwargs): - # type: (List[Text], Text, Any, **Any) -> None - """Fail if nargs is used.""" - if nargs is not None: - raise ValueError("nargs not allowed") - super(FSAction, self).__init__(option_strings, dest, **kwargs) - - def __call__(self, - parser, # type: argparse.ArgumentParser - namespace, # type: argparse.Namespace - values, # type: Union[AnyStr, Sequence[Any], None] - option_string=None # type: Optional[Text] - ): # type: (...) -> None - setattr(namespace, - self.dest, - {"class": self.objclass, - "location": file_uri(str(os.path.abspath(cast(AnyStr, values))))}) - - -class FSAppendAction(argparse.Action): - objclass = None # type: Text - - def __init__(self, option_strings, dest, nargs=None, **kwargs): - # type: (List[Text], Text, Any, **Any) -> None - """Initialize.""" - if nargs is not None: - raise ValueError("nargs not allowed") - super(FSAppendAction, self).__init__(option_strings, dest, **kwargs) - - def __call__(self, - parser, # type: argparse.ArgumentParser - namespace, # type: argparse.Namespace - values, # type: Union[AnyStr, Sequence[Any], None] - option_string=None # type: Optional[Text] - ): # type: (...) -> None - g = getattr(namespace, self.dest) - if not g: - g = [] - setattr(namespace, self.dest, g) - g.append( - {"class": self.objclass, - "location": file_uri(str(os.path.abspath(cast(AnyStr, values))))}) - - -class FileAction(FSAction): - objclass = "File" - - -class DirectoryAction(FSAction): - objclass = "Directory" - - -class FileAppendAction(FSAppendAction): - objclass = "File" - - -class DirectoryAppendAction(FSAppendAction): - objclass = "Directory" - - -def add_argument(toolparser, name, inptype, records, description="", - default=None, input_required=True): - # type: (argparse.ArgumentParser, Text, Any, List[Text], Text, Any, bool) -> None - if len(name) == 1: - flag = "-" - else: - flag = "--" - - # if input_required is false, don't make the command line - # parameter required. - required = default is None and input_required - if isinstance(inptype, MutableSequence): - if inptype[0] == "null": - required = False - if len(inptype) == 2: - inptype = inptype[1] - else: - _logger.debug(u"Can't make command line argument from %s", inptype) - return None - - ahelp = description.replace("%", "%%") - action = None # type: Optional[Union[argparse.Action, Text]] - atype = None # type: Any - - if inptype == "File": - action = cast(argparse.Action, FileAction) - elif inptype == "Directory": - action = cast(argparse.Action, DirectoryAction) - elif isinstance(inptype, MutableMapping) and inptype["type"] == "array": - if inptype["items"] == "File": - action = cast(argparse.Action, FileAppendAction) - elif inptype["items"] == "Directory": - action = cast(argparse.Action, DirectoryAppendAction) - else: - action = "append" - elif isinstance(inptype, MutableMapping) and inptype["type"] == "enum": - atype = Text - elif isinstance(inptype, MutableMapping) and inptype["type"] == "record": - records.append(name) - for field in inptype['fields']: - fieldname = name + "." + shortname(field['name']) - fieldtype = field['type'] - fielddescription = field.get("doc", "") - add_argument( - toolparser, fieldname, fieldtype, records, - fielddescription) - return - elif inptype == "string": - atype = Text - elif inptype == "int": - atype = int - elif inptype == "double": - atype = float - elif inptype == "float": - atype = float - elif inptype == "boolean": - action = "store_true" - else: - _logger.debug(u"Can't make command line argument from %s", inptype) - return None - - if inptype != "boolean": - typekw = {'type': atype} - else: - typekw = {} - - toolparser.add_argument( # type: ignore - flag + name, required=required, help=ahelp, action=action, - default=default, **typekw) - - -def generate_parser(toolparser, tool, namemap, records, input_required=True): - # type: (argparse.ArgumentParser, Process, Dict[Text, Text], List[Text], bool) -> argparse.ArgumentParser - toolparser.add_argument("job_order", nargs="?", help="Job input json file") - namemap["job_order"] = "job_order" - - for inp in tool.tool["inputs"]: - name = shortname(inp["id"]) - namemap[name.replace("-", "_")] = name - inptype = inp["type"] - description = inp.get("doc", "") - default = inp.get("default", None) - add_argument(toolparser, name, inptype, records, description, default, input_required) - - return toolparser