latch 2.39.0.dev19__tar.gz → 2.39.0.dev21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {latch-2.39.0.dev19/latch.egg-info → latch-2.39.0.dev21}/PKG-INFO +1 -1
- {latch-2.39.0.dev19 → latch-2.39.0.dev21/latch.egg-info}/PKG-INFO +1 -1
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/build.py +7 -3
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/channel.py +33 -5
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/file_persistence.py +10 -10
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/adapters.py +1 -3
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/conditional.py +1 -1
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/process.py +24 -12
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/main.py +8 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/register/register.py +2 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/setup.py +1 -1
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/LICENSE +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/MANIFEST.in +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/README.md +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/account.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/executions.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/functions/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/functions/messages.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/functions/operators.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/functions/secrets.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/download.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/manager.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/node.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/progress.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/remote_copy.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/throttle.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/upload.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/_transfer/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/path.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/ldata/type.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/project.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/record.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/table.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/types.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/upstream_types/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/upstream_types/types.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/upstream_types/values.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/registry/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/resources/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/resources/conditional.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/resources/launch_plan.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/resources/map_tasks.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/resources/reference_workflow.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/resources/tasks.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/resources/workflow.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/types/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/types/directory.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/types/file.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/types/glob.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/types/json.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/types/metadata.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/types/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/verified/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/verified/deseq2.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/verified/mafft.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/verified/pathway.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/verified/rnaseq.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch/verified/trim_galore.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch.egg-info/SOURCES.txt +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch.egg-info/dependency_links.txt +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch.egg-info/entry_points.txt +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch.egg-info/requires.txt +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch.egg-info/top_level.txt +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/auth/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/auth/csrf.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/auth/oauth2.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/auth/pkce.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/auth/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/centromere/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/centromere/ctx.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/centromere/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/click_utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/constants.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/docker_utils/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/exceptions/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/exceptions/cache.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/exceptions/errors.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/exceptions/handler.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/exceptions/traceback.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/common/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/common/serialize.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/common/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/dag.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/serialize.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/base.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/input.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/map.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/merge.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/operator.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/tasks/output.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/nextflow/workflow.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/config/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/config/parser.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/config/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/serialize.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/single_task_snakemake.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/workflow.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/menus.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/cp/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/cp/autocomplete.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/cp/glob.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/cp/main.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/cp/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/execute/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/execute/main.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/execute/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/get.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/get_executions.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/get_params.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/__init__.cpython-311.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/__init__.cpython-38.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/__init__.cpython-39.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/init.cpython-310.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/init.cpython-311.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/init.cpython-38.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/init.cpython-39.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/.env +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/LICENSE +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/README.md +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/assemble.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/sort.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/system-requirements.txt +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/common/.dockerignore +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_conda/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_conda/conda_task.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_conda/environment.yaml +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_docker/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_docker/task.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nf_integration/Dockerfile +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nf_integration/latch_metadata/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nf_integration/main.nf +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nf_integration/workflow.nf +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nfcore/Dockerfile +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nfcore/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nfcore/task.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_r/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_r/environment.R +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_r/r_task.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/.latch/latch_entrypoint +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/Dockerfile +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/Snakefile +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/config.yaml +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/environment.yaml +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/latch_metadata.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/scripts/plot-quals.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/version +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/init.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/template/LICENSE +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/template/README.md +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/template/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/template/task.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/launch.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/local_dev.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/local_dev_old.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/login.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/ls.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/mkdir.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/move.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/preview.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/register/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/register/constants.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/register/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/rm.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/stop_pod.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/sync.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/test_data/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/test_data/ls.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/test_data/remove.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/test_data/upload.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/test_data/utils.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/workspace.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/tinyrequests.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/tui/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/utils/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/utils/path.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/workflow_config.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/pyproject.toml +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/setup.cfg +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/tests/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/tests/cp/__init__.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/tests/fixtures.py +0 -0
- {latch-2.39.0.dev19 → latch-2.39.0.dev21}/tests/test_ls.py +0 -0
|
@@ -42,7 +42,9 @@ def get_node_name(vertex_id: str) -> str:
|
|
|
42
42
|
return f"n{vertex_id}"
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
def build_from_nextflow_dag(
|
|
45
|
+
def build_from_nextflow_dag(
|
|
46
|
+
wf: NextflowWorkflow, *, execution_profile: Optional[str] = None
|
|
47
|
+
):
|
|
46
48
|
global_start_node = Node(
|
|
47
49
|
id=_common_constants.GLOBAL_INPUT_NODE_ID,
|
|
48
50
|
metadata=None,
|
|
@@ -158,6 +160,7 @@ def build_from_nextflow_dag(wf: NextflowWorkflow):
|
|
|
158
160
|
import_path=Path(vertex.module),
|
|
159
161
|
process_name=vertex.label,
|
|
160
162
|
unaliased=vertex.unaliased,
|
|
163
|
+
execution_profile=execution_profile,
|
|
161
164
|
wf=wf,
|
|
162
165
|
)
|
|
163
166
|
|
|
@@ -391,6 +394,7 @@ def build_nf_wf(
|
|
|
391
394
|
nf_script: Path,
|
|
392
395
|
*,
|
|
393
396
|
redownload_dependencies: bool = False,
|
|
397
|
+
execution_profile: Optional[str] = None,
|
|
394
398
|
) -> NextflowWorkflow:
|
|
395
399
|
ensure_nf_dependencies(pkg_root, force_redownload=redownload_dependencies)
|
|
396
400
|
|
|
@@ -469,7 +473,7 @@ def build_nf_wf(
|
|
|
469
473
|
|
|
470
474
|
wf = NextflowWorkflow(nf_script, main_dag)
|
|
471
475
|
|
|
472
|
-
build_from_nextflow_dag(wf)
|
|
476
|
+
build_from_nextflow_dag(wf, execution_profile=execution_profile)
|
|
473
477
|
|
|
474
478
|
return wf
|
|
475
479
|
|
|
@@ -501,7 +505,7 @@ def generate_nf_entrypoint(
|
|
|
501
505
|
|
|
502
506
|
from flytekit.extras.persistence import LatchPersistence
|
|
503
507
|
from latch_cli.extras.nextflow.file_persistence import download_files, stage_for_output, upload_files
|
|
504
|
-
from latch_cli.extras.nextflow.channel import get_mapper_inputs, get_boolean_value
|
|
508
|
+
from latch_cli.extras.nextflow.channel import get_mapper_inputs, get_boolean_value, get_mapper_outputs
|
|
505
509
|
from latch_cli.utils import check_exists_and_rename, get_parameter_json_value, urljoins
|
|
506
510
|
|
|
507
511
|
from latch.resources.tasks import custom_task
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import json
|
|
2
|
-
from typing import Dict, List, Optional, Type, TypeVar
|
|
2
|
+
from typing import Dict, List, NamedTuple, Optional, Type, TypeVar
|
|
3
3
|
|
|
4
4
|
from latch.types.metadata import _IsDataclass
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
DC = TypeVar("DC", bound=_IsDataclass)
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def get_boolean_value(channel_value: str) -> bool:
|
|
@@ -29,10 +29,10 @@ def get_boolean_value(channel_value: str) -> bool:
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
def get_mapper_inputs(
|
|
32
|
-
cls: Type[
|
|
32
|
+
cls: Type[DC],
|
|
33
33
|
wf_inputs: Dict[str, object],
|
|
34
34
|
channel_inputs: Dict[str, str],
|
|
35
|
-
) -> List[
|
|
35
|
+
) -> List[DC]:
|
|
36
36
|
value_channels = {}
|
|
37
37
|
queue_channels = {}
|
|
38
38
|
|
|
@@ -49,7 +49,7 @@ def get_mapper_inputs(
|
|
|
49
49
|
if min_len == float("inf"):
|
|
50
50
|
min_len = 1
|
|
51
51
|
|
|
52
|
-
res: List[
|
|
52
|
+
res: List[DC] = []
|
|
53
53
|
for i in range(min_len):
|
|
54
54
|
kwargs = {**wf_inputs, **value_channels}
|
|
55
55
|
|
|
@@ -59,3 +59,31 @@ def get_mapper_inputs(
|
|
|
59
59
|
res.append(cls(**kwargs))
|
|
60
60
|
|
|
61
61
|
return res
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
NT = TypeVar("NT", bound=NamedTuple)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def get_mapper_outputs(adapter_output_cls: Type[NT], mapper_outputs: List[DC]) -> NT:
|
|
68
|
+
kwargs: Dict[str, str] = {}
|
|
69
|
+
|
|
70
|
+
if len(mapper_outputs) == 1:
|
|
71
|
+
output = mapper_outputs[0]
|
|
72
|
+
for f in adapter_output_cls._fields:
|
|
73
|
+
kwargs[f] = getattr(output, f)
|
|
74
|
+
|
|
75
|
+
return adapter_output_cls(**kwargs)
|
|
76
|
+
|
|
77
|
+
channels: Dict[str, List] = {}
|
|
78
|
+
for f in adapter_output_cls._fields:
|
|
79
|
+
channels[f] = []
|
|
80
|
+
|
|
81
|
+
for output in mapper_outputs:
|
|
82
|
+
for f in adapter_output_cls._fields:
|
|
83
|
+
channel = getattr(output, f)
|
|
84
|
+
channels[f].extend(json.loads(channel))
|
|
85
|
+
|
|
86
|
+
for f in adapter_output_cls._fields:
|
|
87
|
+
kwargs[f] = json.dumps(channels[f])
|
|
88
|
+
|
|
89
|
+
return adapter_output_cls(**kwargs)
|
|
@@ -104,11 +104,11 @@ def download_files(
|
|
|
104
104
|
):
|
|
105
105
|
paths: List[Path] = []
|
|
106
106
|
for channel in channels:
|
|
107
|
-
if type(channel)
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
if type(channel) == dict and "value" in channel:
|
|
108
|
+
_extract_paths(channel["value"], paths)
|
|
109
|
+
elif type(channel) == list:
|
|
110
|
+
for param in channel:
|
|
111
|
+
_extract_paths(param, paths)
|
|
112
112
|
|
|
113
113
|
remote = _get_remote(outdir)
|
|
114
114
|
|
|
@@ -178,11 +178,11 @@ def _upload(local: Path, remote: str):
|
|
|
178
178
|
def upload_files(channels: Dict[str, List[JSONValue]], outdir: LatchDir):
|
|
179
179
|
paths: List[Path] = []
|
|
180
180
|
for channel in channels.values():
|
|
181
|
-
if type(channel)
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
181
|
+
if type(channel) == dict and "value" in channel:
|
|
182
|
+
_extract_paths(channel["value"], paths)
|
|
183
|
+
elif type(channel) == list:
|
|
184
|
+
for param in channel:
|
|
185
|
+
_extract_paths(param, paths)
|
|
186
186
|
|
|
187
187
|
remote = _get_remote(outdir)
|
|
188
188
|
|
|
@@ -216,9 +216,7 @@ class NextflowProcessPostAdapterTask(NextflowBaseTask):
|
|
|
216
216
|
|
|
217
217
|
return reindent(
|
|
218
218
|
rf"""
|
|
219
|
-
return Res{self.name}
|
|
220
|
-
__return_str__
|
|
221
|
-
)
|
|
219
|
+
return get_mapper_outputs(Res{self.name}, default)
|
|
222
220
|
""",
|
|
223
221
|
1,
|
|
224
222
|
).replace("__return_str__", return_str)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
from dataclasses import fields, is_dataclass
|
|
3
3
|
from pathlib import Path
|
|
4
|
-
from typing import List, Mapping, Type
|
|
4
|
+
from typing import List, Mapping, Optional, Type
|
|
5
5
|
|
|
6
6
|
from latch.types.directory import LatchDir
|
|
7
7
|
from latch.types.file import LatchFile
|
|
@@ -24,6 +24,7 @@ class NextflowProcessTask(NextflowBaseTask):
|
|
|
24
24
|
import_path: Path,
|
|
25
25
|
process_name: str,
|
|
26
26
|
unaliased: str,
|
|
27
|
+
execution_profile: Optional[str],
|
|
27
28
|
wf: NextflowWorkflow,
|
|
28
29
|
):
|
|
29
30
|
super().__init__(inputs, outputs, id, name, {}, wf, cpu=16, memory=32)
|
|
@@ -50,6 +51,7 @@ class NextflowProcessTask(NextflowBaseTask):
|
|
|
50
51
|
self.import_path = import_path
|
|
51
52
|
self.process_name = process_name
|
|
52
53
|
self.unaliased = unaliased
|
|
54
|
+
self.execution_profile = execution_profile
|
|
53
55
|
|
|
54
56
|
def get_fn_interface(self):
|
|
55
57
|
input_name, input_t = list(self._python_inputs.items())[0]
|
|
@@ -112,6 +114,9 @@ class NextflowProcessTask(NextflowBaseTask):
|
|
|
112
114
|
str(nf_script_path_in_container),
|
|
113
115
|
]
|
|
114
116
|
|
|
117
|
+
if self.execution_profile is not None:
|
|
118
|
+
run_task_entrypoint.extend(["-profile", self.execution_profile])
|
|
119
|
+
|
|
115
120
|
for flag, val in self.wf.flags_to_params.items():
|
|
116
121
|
run_task_entrypoint.extend([flag, str(val)])
|
|
117
122
|
|
|
@@ -166,17 +171,24 @@ class NextflowProcessTask(NextflowBaseTask):
|
|
|
166
171
|
|
|
167
172
|
download_files(channel_vals, LatchDir({repr(self.wf.output_directory.remote_path)}))
|
|
168
173
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
174
|
+
try:
|
|
175
|
+
subprocess.run(
|
|
176
|
+
[{','.join([f"str({x})" if x.startswith("wf_") else repr(x) for x in run_task_entrypoint])}],
|
|
177
|
+
env={{
|
|
178
|
+
**os.environ,
|
|
179
|
+
"LATCH_INCLUDE_META": {repr(include_str)},
|
|
180
|
+
"LATCH_EXPRESSION": {repr(self.statement)},
|
|
181
|
+
"LATCH_RETURN": {repr(json.dumps(self.ret))},
|
|
182
|
+
"LATCH_PARAM_VALS": json.dumps(channel_vals),
|
|
183
|
+
}},
|
|
184
|
+
check=True,
|
|
185
|
+
)
|
|
186
|
+
except subprocess.CalledProcessError:
|
|
187
|
+
log = Path("/root/.nextflow.log").read_text()
|
|
188
|
+
print("\n\n\n\n\n" + log)
|
|
189
|
+
|
|
190
|
+
import time
|
|
191
|
+
time.sleep(10000)
|
|
180
192
|
|
|
181
193
|
out_channels = {{}}
|
|
182
194
|
files = [Path(f) for f in glob.glob(".latch/task-outputs/*.json")]
|
|
@@ -405,6 +405,12 @@ def execute(
|
|
|
405
405
|
default=False,
|
|
406
406
|
help="Redownload external Nextflow dependencies",
|
|
407
407
|
)
|
|
408
|
+
@click.option(
|
|
409
|
+
"--execution-profile",
|
|
410
|
+
type=str,
|
|
411
|
+
default=None,
|
|
412
|
+
help="Set execution profile for Nextflow workflow",
|
|
413
|
+
)
|
|
408
414
|
def register(
|
|
409
415
|
pkg_root: str,
|
|
410
416
|
disable_auto_version: bool,
|
|
@@ -416,6 +422,7 @@ def register(
|
|
|
416
422
|
cache_tasks: bool,
|
|
417
423
|
nf_script: Optional[Path],
|
|
418
424
|
redownload_dependencies: bool,
|
|
425
|
+
execution_profile: Optional[str],
|
|
419
426
|
):
|
|
420
427
|
"""Register local workflow code to Latch.
|
|
421
428
|
|
|
@@ -438,6 +445,7 @@ def register(
|
|
|
438
445
|
snakefile=snakefile,
|
|
439
446
|
nf_script=nf_script,
|
|
440
447
|
nf_redownload_dependencies=redownload_dependencies,
|
|
448
|
+
nf_execution_profile=execution_profile,
|
|
441
449
|
progress_plain=(docker_progress == "auto" and not sys.stdout.isatty())
|
|
442
450
|
or docker_progress == "plain",
|
|
443
451
|
use_new_centromere=use_new_centromere,
|
|
@@ -275,6 +275,7 @@ def register(
|
|
|
275
275
|
snakefile: Optional[Path] = None,
|
|
276
276
|
nf_script: Optional[Path] = None,
|
|
277
277
|
nf_redownload_dependencies: bool = False,
|
|
278
|
+
nf_execution_profile: Optional[str] = None,
|
|
278
279
|
progress_plain: bool = False,
|
|
279
280
|
cache_tasks: bool = False,
|
|
280
281
|
use_new_centromere: bool = False,
|
|
@@ -420,6 +421,7 @@ def register(
|
|
|
420
421
|
ctx.pkg_root,
|
|
421
422
|
ctx.nf_script,
|
|
422
423
|
redownload_dependencies=nf_redownload_dependencies,
|
|
424
|
+
execution_profile=nf_execution_profile,
|
|
423
425
|
)
|
|
424
426
|
generate_nf_entrypoint(nf_wf, ctx.pkg_root, ctx.nf_script)
|
|
425
427
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/extras/snakemake/single_task_snakemake.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/init.cpython-310.pyc
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/init.cpython-311.pyc
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/init.cpython-38.pyc
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/__pycache__/init.cpython-39.pyc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/README.md
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/assemble_and_sort/assemble.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_conda/conda_task.py
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_conda/environment.yaml
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_docker/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nf_integration/Dockerfile
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nf_integration/main.nf
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nf_integration/workflow.nf
RENAMED
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_nfcore/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/Dockerfile
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/Snakefile
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/config.yaml
RENAMED
|
File without changes
|
{latch-2.39.0.dev19 → latch-2.39.0.dev21}/latch_cli/services/init/example_snakemake/environment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|