latch 2.40.4.dev4__tar.gz → 2.40.4.dev5__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.40.4.dev5/PKG-INFO +39 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/account.py +7 -11
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/project.py +7 -11
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/table.py +14 -20
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/verified/deseq2.py +18 -28
- latch-2.40.4.dev5/latch.egg-info/PKG-INFO +39 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch.egg-info/SOURCES.txt +11 -3
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/centromere/utils.py +4 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/build.py +33 -8
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/channel.py +10 -2
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/file_persistence.py +14 -1
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/tasks/adapters.py +9 -5
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/tasks/base.py +4 -1
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/tasks/operator.py +1 -1
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/tasks/process.py +3 -1
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/main.py +24 -0
- latch-2.40.4.dev5/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/__pycache__/__init__.cpython-311.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/__pycache__/__init__.cpython-38.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/__pycache__/__init__.cpython-39.pyc +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/__pycache__/init.cpython-310.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/__pycache__/init.cpython-311.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/__pycache__/init.cpython-38.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/__pycache__/init.cpython-39.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc +0 -0
- latch-2.40.4.dev5/latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/register/register.py +2 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/setup.py +1 -1
- latch-2.40.4.dev4/PKG-INFO +0 -13
- latch-2.40.4.dev4/latch.egg-info/PKG-INFO +0 -13
- latch-2.40.4.dev4/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
- latch-2.40.4.dev4/latch_cli/services/init/example_docker/.__init__.py.swn +0 -0
- latch-2.40.4.dev4/latch_cli/services/init/example_docker/.__init__.py.swo +0 -0
- latch-2.40.4.dev4/latch_cli/services/init/example_docker/.__init__.py.swp +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/LICENSE +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/MANIFEST.in +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/README.md +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/executions.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/functions/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/functions/messages.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/functions/operators.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/functions/secrets.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/download.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/manager.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/node.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/progress.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/remote_copy.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/throttle.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/upload.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/_transfer/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/path.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/ldata/type.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/record.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/types.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/upstream_types/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/upstream_types/types.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/upstream_types/values.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/registry/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/resources/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/resources/conditional.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/resources/dynamic.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/resources/launch_plan.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/resources/map_tasks.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/resources/reference_workflow.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/resources/tasks.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/resources/workflow.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/types/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/types/directory.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/types/file.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/types/glob.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/types/json.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/types/metadata.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/types/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/verified/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/verified/mafft.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/verified/pathway.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/verified/rnaseq.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch/verified/trim_galore.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch.egg-info/dependency_links.txt +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch.egg-info/entry_points.txt +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch.egg-info/requires.txt +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch.egg-info/top_level.txt +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/auth/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/auth/csrf.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/auth/oauth2.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/auth/pkce.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/auth/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/centromere/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/centromere/ctx.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/click_utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/constants.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/docker_utils/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/exceptions/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/exceptions/cache.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/exceptions/errors.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/exceptions/handler.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/exceptions/traceback.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/common/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/common/config/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/common/config/parser.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/common/config/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/common/serialize.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/common/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/config.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/dag.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/serialize.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/tasks/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/tasks/conditional.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/tasks/map.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/tasks/merge.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/nextflow/workflow.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/snakemake/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/snakemake/config.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/snakemake/serialize.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/snakemake/single_task_snakemake.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/snakemake/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/extras/snakemake/workflow.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/menus.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/cp/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/cp/autocomplete.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/cp/glob.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/cp/main.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/cp/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/execute/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/execute/main.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/execute/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/get.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/get_executions.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/get_params.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/assemble_and_sort/.env +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/assemble_and_sort/LICENSE +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/assemble_and_sort/README.md +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/assemble_and_sort/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/assemble_and_sort/assemble.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/assemble_and_sort/sort.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/assemble_and_sort/system-requirements.txt +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/common/.dockerignore +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_conda/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_conda/conda_task.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_conda/environment.yaml +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_docker/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_docker/task.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_nextflow/main.nf +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_nextflow/nextflow.config +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_nextflow/workflow.nf +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_nfcore/Dockerfile +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_nfcore/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_nfcore/task.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_r/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_r/environment.R +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_r/r_task.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_snakemake/.latch/latch_entrypoint +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_snakemake/Dockerfile +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_snakemake/Snakefile +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_snakemake/config.yaml +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_snakemake/environment.yaml +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_snakemake/latch_metadata.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_snakemake/scripts/plot-quals.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/example_snakemake/version +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/init.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/template/LICENSE +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/template/README.md +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/template/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/template/task.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/launch.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/local_dev.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/local_dev_old.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/login.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/ls.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/mkdir.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/move.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/preview.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/register/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/register/constants.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/register/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/rm.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/stop_pod.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/sync.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/test_data/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/test_data/ls.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/test_data/remove.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/test_data/upload.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/test_data/utils.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/workspace.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/tinyrequests.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/tui/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/utils/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/utils/path.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/utils/workflow.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/workflow_config.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/pyproject.toml +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/setup.cfg +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/tests/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/tests/cp/__init__.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/tests/fixtures.py +0 -0
- {latch-2.40.4.dev4 → latch-2.40.4.dev5}/tests/test_ls.py +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: latch
|
|
3
|
+
Version: 2.40.4.dev5
|
|
4
|
+
Summary: The Latch SDK
|
|
5
|
+
Author-email: kenny@latch.bio
|
|
6
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
7
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
10
|
+
Requires-Python: >=3.8,<3.12
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Dist: kubernetes>=24.2.0
|
|
13
|
+
Requires-Dist: pyjwt>=0.2.0
|
|
14
|
+
Requires-Dist: requests>=2.28.1
|
|
15
|
+
Requires-Dist: click>=8.0
|
|
16
|
+
Requires-Dist: docker>=5.0
|
|
17
|
+
Requires-Dist: paramiko>=3.2.0
|
|
18
|
+
Requires-Dist: scp>=0.14.0
|
|
19
|
+
Requires-Dist: boto3>=1.26.0
|
|
20
|
+
Requires-Dist: tqdm>=4.63.0
|
|
21
|
+
Requires-Dist: lytekit==0.15.6
|
|
22
|
+
Requires-Dist: lytekitplugins-pods==0.6.2
|
|
23
|
+
Requires-Dist: typing-extensions==4.7.1
|
|
24
|
+
Requires-Dist: apscheduler==3.9.1
|
|
25
|
+
Requires-Dist: gql==3.4.0
|
|
26
|
+
Requires-Dist: graphql-core==3.2.3
|
|
27
|
+
Requires-Dist: requests-toolbelt==0.10.1
|
|
28
|
+
Requires-Dist: latch-sdk-gql==0.0.6
|
|
29
|
+
Requires-Dist: latch-sdk-config==0.0.4
|
|
30
|
+
Requires-Dist: python-dateutil>=2.8
|
|
31
|
+
Requires-Dist: aioconsole==0.6.1
|
|
32
|
+
Requires-Dist: asyncssh==2.13.2
|
|
33
|
+
Requires-Dist: websockets==11.0.3
|
|
34
|
+
Requires-Dist: watchfiles==0.19.0
|
|
35
|
+
Provides-Extra: snakemake
|
|
36
|
+
Requires-Dist: snakemake<7.30.2,>=7.18.0; extra == "snakemake"
|
|
37
|
+
Requires-Dist: pulp<2.8,>=2.0; extra == "snakemake"
|
|
38
|
+
Provides-Extra: pandas
|
|
39
|
+
Requires-Dist: pandas>=2.0.0; extra == "pandas"
|
|
@@ -258,12 +258,10 @@ class AccountUpdate:
|
|
|
258
258
|
|
|
259
259
|
args = l.ArgumentNode()
|
|
260
260
|
args.name = _name_node("input")
|
|
261
|
-
args.value = _json_value(
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
)
|
|
261
|
+
args.value = _json_value({
|
|
262
|
+
"argOwnerId": self.account.id,
|
|
263
|
+
"argDisplayNames": display_names,
|
|
264
|
+
})
|
|
267
265
|
|
|
268
266
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
269
267
|
res.arguments = tuple([args])
|
|
@@ -299,11 +297,9 @@ class AccountUpdate:
|
|
|
299
297
|
|
|
300
298
|
args = l.ArgumentNode()
|
|
301
299
|
args.name = _name_node("input")
|
|
302
|
-
args.value = _json_value(
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
}
|
|
306
|
-
)
|
|
300
|
+
args.value = _json_value({
|
|
301
|
+
"argIds": ids,
|
|
302
|
+
})
|
|
307
303
|
|
|
308
304
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
309
305
|
res.arguments = tuple([args])
|
|
@@ -228,12 +228,10 @@ class ProjectUpdate:
|
|
|
228
228
|
|
|
229
229
|
args = l.ArgumentNode()
|
|
230
230
|
args.name = _name_node("input")
|
|
231
|
-
args.value = _json_value(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
)
|
|
231
|
+
args.value = _json_value({
|
|
232
|
+
"argProjectId": self.project.id,
|
|
233
|
+
"argDisplayNames": display_names,
|
|
234
|
+
})
|
|
237
235
|
|
|
238
236
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
239
237
|
res.arguments = tuple([args])
|
|
@@ -267,11 +265,9 @@ class ProjectUpdate:
|
|
|
267
265
|
|
|
268
266
|
args = l.ArgumentNode()
|
|
269
267
|
args.name = _name_node("input")
|
|
270
|
-
args.value = _json_value(
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
)
|
|
268
|
+
args.value = _json_value({
|
|
269
|
+
"argIds": ids,
|
|
270
|
+
})
|
|
275
271
|
|
|
276
272
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
277
273
|
res.arguments = tuple([args])
|
|
@@ -496,13 +496,11 @@ class TableUpdate:
|
|
|
496
496
|
|
|
497
497
|
args = l.ArgumentNode()
|
|
498
498
|
args.name = _name_node("input")
|
|
499
|
-
args.value = _json_value(
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
}
|
|
505
|
-
)
|
|
499
|
+
args.value = _json_value({
|
|
500
|
+
"argExperimentId": self.table.id,
|
|
501
|
+
"argNames": names,
|
|
502
|
+
"argData": _var_node(argDataVar),
|
|
503
|
+
})
|
|
506
504
|
|
|
507
505
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
508
506
|
res.arguments = tuple([args])
|
|
@@ -537,12 +535,10 @@ class TableUpdate:
|
|
|
537
535
|
|
|
538
536
|
args = l.ArgumentNode()
|
|
539
537
|
args.name = _name_node("input")
|
|
540
|
-
args.value = _json_value(
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
}
|
|
545
|
-
)
|
|
538
|
+
args.value = _json_value({
|
|
539
|
+
"argExperimentId": self.table.id,
|
|
540
|
+
"argNames": names,
|
|
541
|
+
})
|
|
546
542
|
|
|
547
543
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
548
544
|
res.arguments = tuple([args])
|
|
@@ -690,13 +686,11 @@ class TableUpdate:
|
|
|
690
686
|
|
|
691
687
|
args = l.ArgumentNode()
|
|
692
688
|
args.name = _name_node("input")
|
|
693
|
-
args.value = _json_value(
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
}
|
|
699
|
-
)
|
|
689
|
+
args.value = _json_value({
|
|
690
|
+
"argExperimentId": self.table.id,
|
|
691
|
+
"argKeys": keys,
|
|
692
|
+
"argTypes": _var_node(argTypesVar),
|
|
693
|
+
})
|
|
700
694
|
|
|
701
695
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
702
696
|
res.arguments = tuple([args])
|
|
@@ -19,17 +19,13 @@ def deseq2_wf(
|
|
|
19
19
|
raw_count_table: Optional[
|
|
20
20
|
Annotated[
|
|
21
21
|
LatchFile,
|
|
22
|
-
FlyteAnnotation(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
}
|
|
32
|
-
),
|
|
22
|
+
FlyteAnnotation({
|
|
23
|
+
"_tmp_hack_deseq2": "counts_table",
|
|
24
|
+
"rules": [{
|
|
25
|
+
"regex": r".*\.(csv|tsv|xlsx)$",
|
|
26
|
+
"message": "Expected a CSV, TSV, or XLSX file",
|
|
27
|
+
}],
|
|
28
|
+
}),
|
|
33
29
|
]
|
|
34
30
|
] = None,
|
|
35
31
|
raw_count_tables: List[LatchFile] = [],
|
|
@@ -44,17 +40,13 @@ def deseq2_wf(
|
|
|
44
40
|
conditions_table: Optional[
|
|
45
41
|
Annotated[
|
|
46
42
|
LatchFile,
|
|
47
|
-
FlyteAnnotation(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
],
|
|
56
|
-
}
|
|
57
|
-
),
|
|
43
|
+
FlyteAnnotation({
|
|
44
|
+
"_tmp_hack_deseq2": "design_matrix",
|
|
45
|
+
"rules": [{
|
|
46
|
+
"regex": r".*\.(csv|tsv|xlsx)$",
|
|
47
|
+
"message": "Expected a CSV, TSV, or XLSX file",
|
|
48
|
+
}],
|
|
49
|
+
}),
|
|
58
50
|
]
|
|
59
51
|
] = None,
|
|
60
52
|
design_matrix_sample_id_column: Optional[
|
|
@@ -62,12 +54,10 @@ def deseq2_wf(
|
|
|
62
54
|
] = None,
|
|
63
55
|
design_formula: Annotated[
|
|
64
56
|
List[List[str]],
|
|
65
|
-
FlyteAnnotation(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
),
|
|
57
|
+
FlyteAnnotation({
|
|
58
|
+
"_tmp_hack_deseq2": "design_formula",
|
|
59
|
+
"_tmp_hack_deseq2_allow_clustering": True,
|
|
60
|
+
}),
|
|
71
61
|
] = [],
|
|
72
62
|
number_of_genes_to_plot: int = 30,
|
|
73
63
|
) -> LatchDir: ...
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: latch
|
|
3
|
+
Version: 2.40.4.dev5
|
|
4
|
+
Summary: The Latch SDK
|
|
5
|
+
Author-email: kenny@latch.bio
|
|
6
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
7
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
10
|
+
Requires-Python: >=3.8,<3.12
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Dist: kubernetes>=24.2.0
|
|
13
|
+
Requires-Dist: pyjwt>=0.2.0
|
|
14
|
+
Requires-Dist: requests>=2.28.1
|
|
15
|
+
Requires-Dist: click>=8.0
|
|
16
|
+
Requires-Dist: docker>=5.0
|
|
17
|
+
Requires-Dist: paramiko>=3.2.0
|
|
18
|
+
Requires-Dist: scp>=0.14.0
|
|
19
|
+
Requires-Dist: boto3>=1.26.0
|
|
20
|
+
Requires-Dist: tqdm>=4.63.0
|
|
21
|
+
Requires-Dist: lytekit==0.15.6
|
|
22
|
+
Requires-Dist: lytekitplugins-pods==0.6.2
|
|
23
|
+
Requires-Dist: typing-extensions==4.7.1
|
|
24
|
+
Requires-Dist: apscheduler==3.9.1
|
|
25
|
+
Requires-Dist: gql==3.4.0
|
|
26
|
+
Requires-Dist: graphql-core==3.2.3
|
|
27
|
+
Requires-Dist: requests-toolbelt==0.10.1
|
|
28
|
+
Requires-Dist: latch-sdk-gql==0.0.6
|
|
29
|
+
Requires-Dist: latch-sdk-config==0.0.4
|
|
30
|
+
Requires-Dist: python-dateutil>=2.8
|
|
31
|
+
Requires-Dist: aioconsole==0.6.1
|
|
32
|
+
Requires-Dist: asyncssh==2.13.2
|
|
33
|
+
Requires-Dist: websockets==11.0.3
|
|
34
|
+
Requires-Dist: watchfiles==0.19.0
|
|
35
|
+
Provides-Extra: snakemake
|
|
36
|
+
Requires-Dist: snakemake<7.30.2,>=7.18.0; extra == "snakemake"
|
|
37
|
+
Requires-Dist: pulp<2.8,>=2.0; extra == "snakemake"
|
|
38
|
+
Provides-Extra: pandas
|
|
39
|
+
Requires-Dist: pandas>=2.0.0; extra == "pandas"
|
|
@@ -136,7 +136,13 @@ latch_cli/services/execute/utils.py
|
|
|
136
136
|
latch_cli/services/init/__init__.py
|
|
137
137
|
latch_cli/services/init/init.py
|
|
138
138
|
latch_cli/services/init/__pycache__/__init__.cpython-310.pyc
|
|
139
|
+
latch_cli/services/init/__pycache__/__init__.cpython-311.pyc
|
|
140
|
+
latch_cli/services/init/__pycache__/__init__.cpython-38.pyc
|
|
141
|
+
latch_cli/services/init/__pycache__/__init__.cpython-39.pyc
|
|
139
142
|
latch_cli/services/init/__pycache__/init.cpython-310.pyc
|
|
143
|
+
latch_cli/services/init/__pycache__/init.cpython-311.pyc
|
|
144
|
+
latch_cli/services/init/__pycache__/init.cpython-38.pyc
|
|
145
|
+
latch_cli/services/init/__pycache__/init.cpython-39.pyc
|
|
140
146
|
latch_cli/services/init/assemble_and_sort/.env
|
|
141
147
|
latch_cli/services/init/assemble_and_sort/LICENSE
|
|
142
148
|
latch_cli/services/init/assemble_and_sort/README.md
|
|
@@ -144,24 +150,25 @@ latch_cli/services/init/assemble_and_sort/__init__.py
|
|
|
144
150
|
latch_cli/services/init/assemble_and_sort/assemble.py
|
|
145
151
|
latch_cli/services/init/assemble_and_sort/sort.py
|
|
146
152
|
latch_cli/services/init/assemble_and_sort/system-requirements.txt
|
|
153
|
+
latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc
|
|
147
154
|
latch_cli/services/init/common/.dockerignore
|
|
148
155
|
latch_cli/services/init/example_conda/__init__.py
|
|
149
156
|
latch_cli/services/init/example_conda/conda_task.py
|
|
150
157
|
latch_cli/services/init/example_conda/environment.yaml
|
|
151
|
-
latch_cli/services/init/
|
|
152
|
-
latch_cli/services/init/example_docker/.__init__.py.swo
|
|
153
|
-
latch_cli/services/init/example_docker/.__init__.py.swp
|
|
158
|
+
latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc
|
|
154
159
|
latch_cli/services/init/example_docker/__init__.py
|
|
155
160
|
latch_cli/services/init/example_docker/task.py
|
|
156
161
|
latch_cli/services/init/example_nextflow/main.nf
|
|
157
162
|
latch_cli/services/init/example_nextflow/nextflow.config
|
|
158
163
|
latch_cli/services/init/example_nextflow/workflow.nf
|
|
164
|
+
latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc
|
|
159
165
|
latch_cli/services/init/example_nfcore/Dockerfile
|
|
160
166
|
latch_cli/services/init/example_nfcore/__init__.py
|
|
161
167
|
latch_cli/services/init/example_nfcore/task.py
|
|
162
168
|
latch_cli/services/init/example_r/__init__.py
|
|
163
169
|
latch_cli/services/init/example_r/environment.R
|
|
164
170
|
latch_cli/services/init/example_r/r_task.py
|
|
171
|
+
latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc
|
|
165
172
|
latch_cli/services/init/example_snakemake/Dockerfile
|
|
166
173
|
latch_cli/services/init/example_snakemake/Snakefile
|
|
167
174
|
latch_cli/services/init/example_snakemake/config.yaml
|
|
@@ -174,6 +181,7 @@ latch_cli/services/init/template/LICENSE
|
|
|
174
181
|
latch_cli/services/init/template/README.md
|
|
175
182
|
latch_cli/services/init/template/__init__.py
|
|
176
183
|
latch_cli/services/init/template/task.py
|
|
184
|
+
latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc
|
|
177
185
|
latch_cli/services/register/__init__.py
|
|
178
186
|
latch_cli/services/register/constants.py
|
|
179
187
|
latch_cli/services/register/register.py
|
|
@@ -2,6 +2,7 @@ import builtins
|
|
|
2
2
|
import contextlib
|
|
3
3
|
import os
|
|
4
4
|
import random
|
|
5
|
+
import shutil
|
|
5
6
|
import string
|
|
6
7
|
import sys
|
|
7
8
|
import tempfile
|
|
@@ -261,6 +262,9 @@ class MaybeRemoteDir:
|
|
|
261
262
|
return
|
|
262
263
|
|
|
263
264
|
if self._tempdir is not None and not isinstance(self._tempdir, str):
|
|
265
|
+
if os.environ.get("LATCH_SAVE_PROTO") is not None:
|
|
266
|
+
shutil.copytree(Path(self._tempdir.name), Path.cwd() / "protos")
|
|
267
|
+
|
|
264
268
|
self._tempdir.cleanup()
|
|
265
269
|
|
|
266
270
|
|
|
@@ -50,7 +50,10 @@ def get_node_name(vertex_id: str) -> str:
|
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
def build_from_nextflow_dag(
|
|
53
|
-
wf: NextflowWorkflow,
|
|
53
|
+
wf: NextflowWorkflow,
|
|
54
|
+
*,
|
|
55
|
+
execution_profile: Optional[str] = None,
|
|
56
|
+
ephemeral_storage_gib: int = 500,
|
|
54
57
|
):
|
|
55
58
|
global_start_node = Node(
|
|
56
59
|
id=_common_constants.GLOBAL_INPUT_NODE_ID,
|
|
@@ -105,18 +108,22 @@ def build_from_nextflow_dag(
|
|
|
105
108
|
else:
|
|
106
109
|
input_name = f"channel_{dep.id}"
|
|
107
110
|
|
|
108
|
-
|
|
111
|
+
dep_output_name = "res"
|
|
109
112
|
if len(dep.outputNames) > 0:
|
|
110
113
|
idx = int(edge.label or "0")
|
|
111
114
|
input_name = f"{input_name}_{idx}"
|
|
112
|
-
|
|
115
|
+
dep_output_name = dep.outputNames[idx]
|
|
113
116
|
|
|
114
117
|
if vertex.type == VertexType.Merge:
|
|
115
|
-
|
|
118
|
+
vertex_output_name = "res"
|
|
119
|
+
if len(vertex.outputNames) > 0:
|
|
120
|
+
vertex_output_name = dep_output_name
|
|
121
|
+
|
|
122
|
+
merge_sources[vertex_output_name].append(input_name)
|
|
116
123
|
|
|
117
124
|
task_inputs[input_name] = Optional[str]
|
|
118
125
|
|
|
119
|
-
node = NodeOutput(node=node_map[dep.id], var=
|
|
126
|
+
node = NodeOutput(node=node_map[dep.id], var=dep_output_name)
|
|
120
127
|
|
|
121
128
|
task_bindings.append(
|
|
122
129
|
literals_models.Binding(
|
|
@@ -177,6 +184,7 @@ def build_from_nextflow_dag(
|
|
|
177
184
|
wf=wf,
|
|
178
185
|
cpu=vertex.cpu,
|
|
179
186
|
memory=vertex.memoryBytes,
|
|
187
|
+
storage_gib=ephemeral_storage_gib,
|
|
180
188
|
)
|
|
181
189
|
|
|
182
190
|
wf.nextflow_tasks.append(process_task)
|
|
@@ -220,9 +228,21 @@ def build_from_nextflow_dag(
|
|
|
220
228
|
),
|
|
221
229
|
).ref
|
|
222
230
|
),
|
|
223
|
-
)
|
|
231
|
+
),
|
|
232
|
+
literals_models.Binding(
|
|
233
|
+
var="is_skipped",
|
|
234
|
+
binding=literals_models.BindingData(
|
|
235
|
+
promise=Promise(
|
|
236
|
+
var="is_skipped",
|
|
237
|
+
val=NodeOutput(
|
|
238
|
+
node=pre_adapter_node,
|
|
239
|
+
var="is_skipped",
|
|
240
|
+
),
|
|
241
|
+
).ref
|
|
242
|
+
),
|
|
243
|
+
),
|
|
224
244
|
],
|
|
225
|
-
upstream_nodes=[mapped_process_node],
|
|
245
|
+
upstream_nodes=[mapped_process_node, pre_adapter_node],
|
|
226
246
|
flyte_entity=post_adapter_task,
|
|
227
247
|
)
|
|
228
248
|
|
|
@@ -396,6 +416,7 @@ def build_nf_wf(
|
|
|
396
416
|
*,
|
|
397
417
|
redownload_dependencies: bool = False,
|
|
398
418
|
execution_profile: Optional[str] = None,
|
|
419
|
+
ephemeral_storage_gib: int = 500,
|
|
399
420
|
) -> NextflowWorkflow:
|
|
400
421
|
ensure_nf_dependencies(pkg_root, force_redownload=redownload_dependencies)
|
|
401
422
|
|
|
@@ -474,7 +495,11 @@ def build_nf_wf(
|
|
|
474
495
|
|
|
475
496
|
wf = NextflowWorkflow(pkg_root, nf_script, version, main_dag)
|
|
476
497
|
|
|
477
|
-
build_from_nextflow_dag(
|
|
498
|
+
build_from_nextflow_dag(
|
|
499
|
+
wf,
|
|
500
|
+
execution_profile=execution_profile,
|
|
501
|
+
ephemeral_storage_gib=ephemeral_storage_gib,
|
|
502
|
+
)
|
|
478
503
|
|
|
479
504
|
return wf
|
|
480
505
|
|
|
@@ -64,8 +64,16 @@ def get_mapper_inputs(
|
|
|
64
64
|
NT = TypeVar("NT", bound=NamedTuple)
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
def get_mapper_outputs(
|
|
68
|
-
|
|
67
|
+
def get_mapper_outputs(
|
|
68
|
+
adapter_output_cls: Type[NT], mapper_outputs: List[DC], is_skipped: bool
|
|
69
|
+
) -> NT:
|
|
70
|
+
|
|
71
|
+
kwargs: Dict[str, Optional[str]] = {}
|
|
72
|
+
if is_skipped:
|
|
73
|
+
for f in adapter_output_cls._fields:
|
|
74
|
+
kwargs[f] = None
|
|
75
|
+
|
|
76
|
+
return adapter_output_cls(**kwargs)
|
|
69
77
|
|
|
70
78
|
if len(mapper_outputs) == 1:
|
|
71
79
|
output = mapper_outputs[0]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import os
|
|
2
|
-
import shutil
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Dict, List, Optional, Set, Union
|
|
@@ -230,5 +230,18 @@ def upload_files(channels: Dict[str, List[JSONValue]], outdir: LatchDir):
|
|
|
230
230
|
local_to_remote[local] = remote
|
|
231
231
|
data.parameter["remote"] = remote
|
|
232
232
|
|
|
233
|
+
published_files: List[str] = []
|
|
234
|
+
try:
|
|
235
|
+
with open(".latch/published.json", "r") as f:
|
|
236
|
+
data = f.read()
|
|
237
|
+
conf = json.loads(data)
|
|
238
|
+
published_files = conf.get("files", [])
|
|
239
|
+
except FileNotFoundError:
|
|
240
|
+
pass
|
|
241
|
+
|
|
242
|
+
for file in published_files:
|
|
243
|
+
relative_path = Path(file).relative_to(Path.home())
|
|
244
|
+
local_to_remote[file] = urljoins(remote_parent, str(relative_path))
|
|
245
|
+
|
|
233
246
|
for local, remote in local_to_remote.items():
|
|
234
247
|
_upload(local, remote)
|
|
@@ -66,7 +66,7 @@ class NextflowProcessPreAdapterTask(NextflowBaseTask):
|
|
|
66
66
|
|
|
67
67
|
super().__init__(
|
|
68
68
|
inputs,
|
|
69
|
-
{"default": List[self.dataclass]},
|
|
69
|
+
{"default": List[self.dataclass], "is_skipped": bool},
|
|
70
70
|
id,
|
|
71
71
|
name,
|
|
72
72
|
branches,
|
|
@@ -96,6 +96,7 @@ class NextflowProcessPreAdapterTask(NextflowBaseTask):
|
|
|
96
96
|
|
|
97
97
|
class Res_{self.id}(NamedTuple):
|
|
98
98
|
default: {type_repr(output_typ)}
|
|
99
|
+
is_skipped: bool
|
|
99
100
|
|
|
100
101
|
""",
|
|
101
102
|
0,
|
|
@@ -114,7 +115,9 @@ class NextflowProcessPreAdapterTask(NextflowBaseTask):
|
|
|
114
115
|
return res
|
|
115
116
|
|
|
116
117
|
def get_fn_return_stmt(self):
|
|
117
|
-
return reindent(
|
|
118
|
+
return reindent(
|
|
119
|
+
f"return Res_{self.id}(default=result, is_skipped = not cond)", 1
|
|
120
|
+
)
|
|
118
121
|
|
|
119
122
|
def get_fn_code(self, nf_script_path_in_container: Path):
|
|
120
123
|
code_block = self.get_fn_interface()
|
|
@@ -173,7 +176,7 @@ class NextflowProcessPostAdapterTask(NextflowBaseTask):
|
|
|
173
176
|
self.dataclass = dataclass_from_python_params(outputs, id)
|
|
174
177
|
|
|
175
178
|
super().__init__(
|
|
176
|
-
{"default": List[self.dataclass]},
|
|
179
|
+
{"default": List[self.dataclass], "is_skipped": bool},
|
|
177
180
|
outputs,
|
|
178
181
|
id,
|
|
179
182
|
name,
|
|
@@ -210,7 +213,8 @@ class NextflowProcessPostAdapterTask(NextflowBaseTask):
|
|
|
210
213
|
rf"""
|
|
211
214
|
@task(cache=True)
|
|
212
215
|
def {self.name}(
|
|
213
|
-
default: List[Dataclass_{self.id}]
|
|
216
|
+
default: List[Dataclass_{self.id}],
|
|
217
|
+
is_skipped: bool,
|
|
214
218
|
) -> Res{self.name}:
|
|
215
219
|
""",
|
|
216
220
|
0,
|
|
@@ -221,7 +225,7 @@ class NextflowProcessPostAdapterTask(NextflowBaseTask):
|
|
|
221
225
|
def get_fn_return_stmt(self):
|
|
222
226
|
return reindent(
|
|
223
227
|
rf"""
|
|
224
|
-
return get_mapper_outputs(Res{self.name}, default)
|
|
228
|
+
return get_mapper_outputs(Res{self.name}, default, is_skipped)
|
|
225
229
|
""",
|
|
226
230
|
1,
|
|
227
231
|
)
|
|
@@ -49,6 +49,7 @@ class NextflowBaseTask(PythonAutoContainerTask[Pod]):
|
|
|
49
49
|
# ayush: 0.5/1 is too small and stuff starts taking a while to run
|
|
50
50
|
cpu: float = 1,
|
|
51
51
|
memory: float = 2,
|
|
52
|
+
storage_gib: int = 500,
|
|
52
53
|
):
|
|
53
54
|
self.id = id
|
|
54
55
|
self.wf = wf
|
|
@@ -77,7 +78,9 @@ class NextflowBaseTask(PythonAutoContainerTask[Pod]):
|
|
|
77
78
|
task_type_version=2,
|
|
78
79
|
name=f"{name}_{id}",
|
|
79
80
|
interface=interface,
|
|
80
|
-
task_config=custom_task(
|
|
81
|
+
task_config=custom_task(
|
|
82
|
+
cpu=cpu, memory=memory, storage_gib=storage_gib
|
|
83
|
+
).keywords["task_config"],
|
|
81
84
|
task_resolver=NextflowBaseTaskResolver(),
|
|
82
85
|
)
|
|
83
86
|
|
|
@@ -34,6 +34,7 @@ class NextflowProcessTask(NextflowBaseTask):
|
|
|
34
34
|
wf: NextflowWorkflow,
|
|
35
35
|
cpu: Optional[int] = None,
|
|
36
36
|
memory: Optional[float] = None,
|
|
37
|
+
storage_gib: int = 500,
|
|
37
38
|
):
|
|
38
39
|
super().__init__(
|
|
39
40
|
inputs,
|
|
@@ -45,6 +46,7 @@ class NextflowProcessTask(NextflowBaseTask):
|
|
|
45
46
|
NFTaskType.Process,
|
|
46
47
|
cpu=cpu if cpu is not None else 4,
|
|
47
48
|
memory=memory / 1024 / 1024 / 1024 if memory is not None else 8,
|
|
49
|
+
storage_gib=storage_gib,
|
|
48
50
|
)
|
|
49
51
|
|
|
50
52
|
self.wf_inputs = {}
|
|
@@ -100,7 +102,7 @@ class NextflowProcessTask(NextflowBaseTask):
|
|
|
100
102
|
results.append(
|
|
101
103
|
reindent(
|
|
102
104
|
rf"""
|
|
103
|
-
{field.name}=out_channels.get(f"{field.name}"
|
|
105
|
+
{field.name}=out_channels.get(f"{field.name}")
|
|
104
106
|
""",
|
|
105
107
|
2,
|
|
106
108
|
).rstrip()
|
|
@@ -473,6 +473,12 @@ def execute(
|
|
|
473
473
|
default=None,
|
|
474
474
|
help="Set execution profile for Nextflow workflow",
|
|
475
475
|
)
|
|
476
|
+
@click.option(
|
|
477
|
+
"--ephemeral-storage-gib",
|
|
478
|
+
default=500,
|
|
479
|
+
type=int,
|
|
480
|
+
help="Input the number of GiB needed of ephemeral storage.",
|
|
481
|
+
)
|
|
476
482
|
@requires_login
|
|
477
483
|
def register(
|
|
478
484
|
pkg_root: str,
|
|
@@ -486,6 +492,7 @@ def register(
|
|
|
486
492
|
nf_script: Optional[Path],
|
|
487
493
|
redownload_dependencies: bool,
|
|
488
494
|
execution_profile: Optional[str],
|
|
495
|
+
ephemeral_storage_gib: int,
|
|
489
496
|
):
|
|
490
497
|
"""Register local workflow code to Latch.
|
|
491
498
|
|
|
@@ -497,6 +504,22 @@ def register(
|
|
|
497
504
|
crash_handler.message = "Unable to register workflow."
|
|
498
505
|
crash_handler.pkg_root = pkg_root
|
|
499
506
|
|
|
507
|
+
if ephemeral_storage_gib > 4949:
|
|
508
|
+
click.secho(
|
|
509
|
+
f"You tried setting ephemeral storage to {ephemeral_storage_gib} GiB. "
|
|
510
|
+
"This value exceeds the maximum allowed size of 4949 GiB.",
|
|
511
|
+
fg="red",
|
|
512
|
+
)
|
|
513
|
+
raise click.exceptions.Exit(1)
|
|
514
|
+
|
|
515
|
+
if ephemeral_storage_gib <= 0:
|
|
516
|
+
click.secho(
|
|
517
|
+
f"You tried setting ephemeral storage to {ephemeral_storage_gib} GiB. "
|
|
518
|
+
"Ephemeral storage value must be a positive integer less than 4949.",
|
|
519
|
+
fg="red",
|
|
520
|
+
)
|
|
521
|
+
raise click.exceptions.Exit(1)
|
|
522
|
+
|
|
500
523
|
from latch_cli.services.register import register
|
|
501
524
|
|
|
502
525
|
register(
|
|
@@ -513,6 +536,7 @@ def register(
|
|
|
513
536
|
or docker_progress == "plain",
|
|
514
537
|
use_new_centromere=use_new_centromere,
|
|
515
538
|
cache_tasks=cache_tasks,
|
|
539
|
+
nf_ephemeral_storage_gib=ephemeral_storage_gib,
|
|
516
540
|
)
|
|
517
541
|
|
|
518
542
|
|
{latch-2.40.4.dev4 → latch-2.40.4.dev5}/latch_cli/services/init/__pycache__/init.cpython-310.pyc
RENAMED
|
Binary file
|
latch-2.40.4.dev5/latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|