latch 2.39.0.dev23__tar.gz → 2.39.0.dev25__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.dev23/latch.egg-info → latch-2.39.0.dev25}/PKG-INFO +1 -1
- {latch-2.39.0.dev23 → latch-2.39.0.dev25/latch.egg-info}/PKG-INFO +1 -1
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch.egg-info/SOURCES.txt +3 -0
- latch-2.39.0.dev25/latch_cli/extras/common/config/parser.py +82 -0
- latch-2.39.0.dev25/latch_cli/extras/common/config/utils.py +268 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/setup.py +1 -1
- latch-2.39.0.dev25/tests/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/LICENSE +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/MANIFEST.in +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/README.md +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/account.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/executions.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/functions/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/functions/messages.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/functions/operators.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/functions/secrets.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/download.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/manager.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/node.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/progress.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/remote_copy.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/throttle.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/upload.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/_transfer/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/path.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/ldata/type.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/project.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/record.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/table.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/types.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/upstream_types/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/upstream_types/types.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/upstream_types/values.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/registry/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/resources/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/resources/conditional.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/resources/launch_plan.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/resources/map_tasks.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/resources/reference_workflow.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/resources/tasks.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/resources/workflow.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/types/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/types/directory.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/types/file.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/types/glob.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/types/json.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/types/metadata.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/types/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/verified/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/verified/deseq2.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/verified/mafft.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/verified/pathway.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/verified/rnaseq.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch/verified/trim_galore.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch.egg-info/dependency_links.txt +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch.egg-info/entry_points.txt +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch.egg-info/requires.txt +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch.egg-info/top_level.txt +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/auth/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/auth/csrf.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/auth/oauth2.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/auth/pkce.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/auth/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/centromere/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/centromere/ctx.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/centromere/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/click_utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/constants.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/docker_utils/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/exceptions/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/exceptions/cache.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/exceptions/errors.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/exceptions/handler.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/exceptions/traceback.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/common/__init__.py +0 -0
- {latch-2.39.0.dev23/latch_cli/extras/nextflow → latch-2.39.0.dev25/latch_cli/extras/common/config}/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/common/serialize.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/common/utils.py +0 -0
- {latch-2.39.0.dev23/latch_cli/extras/nextflow/tasks → latch-2.39.0.dev25/latch_cli/extras/nextflow}/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/build.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/channel.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/config.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/dag.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/file_persistence.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/serialize.py +0 -0
- {latch-2.39.0.dev23/latch_cli/extras/snakemake → latch-2.39.0.dev25/latch_cli/extras/nextflow/tasks}/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/adapters.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/base.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/conditional.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/input.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/map.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/merge.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/operator.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/output.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/tasks/process.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/nextflow/workflow.py +0 -0
- {latch-2.39.0.dev23/latch_cli/services/cp → latch-2.39.0.dev25/latch_cli/extras/snakemake}/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/snakemake/config.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/snakemake/serialize.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/snakemake/single_task_snakemake.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/snakemake/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/extras/snakemake/workflow.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/main.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/menus.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/__init__.py +0 -0
- {latch-2.39.0.dev23/latch_cli/services/execute → latch-2.39.0.dev25/latch_cli/services/cp}/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/cp/autocomplete.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/cp/glob.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/cp/main.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/cp/utils.py +0 -0
- {latch-2.39.0.dev23/latch_cli/services/test_data → latch-2.39.0.dev25/latch_cli/services/execute}/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/execute/main.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/execute/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/get.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/get_executions.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/get_params.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/__init__.cpython-311.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/__init__.cpython-38.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/__init__.cpython-39.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/init.cpython-310.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/init.cpython-311.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/init.cpython-38.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/init.cpython-39.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/.env +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/LICENSE +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/README.md +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/assemble.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/sort.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/system-requirements.txt +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/common/.dockerignore +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_conda/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_conda/conda_task.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_conda/environment.yaml +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_docker/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_docker/task.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nf_integration/Dockerfile +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nf_integration/latch_metadata/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nf_integration/main.nf +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nf_integration/workflow.nf +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nfcore/Dockerfile +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nfcore/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nfcore/task.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_r/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_r/environment.R +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_r/r_task.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/.latch/latch_entrypoint +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/Dockerfile +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/Snakefile +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/config.yaml +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/environment.yaml +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/latch_metadata.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/scripts/plot-quals.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/version +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/init.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/template/LICENSE +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/template/README.md +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/template/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/template/task.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/launch.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/local_dev.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/local_dev_old.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/login.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/ls.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/mkdir.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/move.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/preview.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/register/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/register/constants.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/register/register.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/register/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/rm.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/stop_pod.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/sync.py +0 -0
- {latch-2.39.0.dev23/latch_cli/tui → latch-2.39.0.dev25/latch_cli/services/test_data}/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/test_data/ls.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/test_data/remove.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/test_data/upload.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/test_data/utils.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/workspace.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/tinyrequests.py +0 -0
- {latch-2.39.0.dev23/tests → latch-2.39.0.dev25/latch_cli/tui}/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/utils/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/utils/path.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/utils/workflow.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/workflow_config.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/pyproject.toml +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/setup.cfg +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/tests/cp/__init__.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/tests/fixtures.py +0 -0
- {latch-2.39.0.dev23 → latch-2.39.0.dev25}/tests/test_ls.py +0 -0
|
@@ -82,6 +82,9 @@ latch_cli/extras/__init__.py
|
|
|
82
82
|
latch_cli/extras/common/__init__.py
|
|
83
83
|
latch_cli/extras/common/serialize.py
|
|
84
84
|
latch_cli/extras/common/utils.py
|
|
85
|
+
latch_cli/extras/common/config/__init__.py
|
|
86
|
+
latch_cli/extras/common/config/parser.py
|
|
87
|
+
latch_cli/extras/common/config/utils.py
|
|
85
88
|
latch_cli/extras/nextflow/__init__.py
|
|
86
89
|
latch_cli/extras/nextflow/build.py
|
|
87
90
|
latch_cli/extras/nextflow/channel.py
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from typing import Dict, Tuple, Type, TypeVar
|
|
3
|
+
|
|
4
|
+
import click
|
|
5
|
+
|
|
6
|
+
from ..utils import reindent
|
|
7
|
+
from .utils import JSONValue, parse_type, parse_value
|
|
8
|
+
|
|
9
|
+
T = TypeVar("T")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def parse_config(
|
|
13
|
+
config: JSONValue,
|
|
14
|
+
*,
|
|
15
|
+
infer_files: bool = False,
|
|
16
|
+
) -> Dict[str, Tuple[Type[T], T]]:
|
|
17
|
+
parsed: Dict[str, Type] = {}
|
|
18
|
+
for k, v in config.items():
|
|
19
|
+
try:
|
|
20
|
+
typ = parse_type(v, k, infer_files=infer_files)
|
|
21
|
+
except ValueError as e:
|
|
22
|
+
click.secho(
|
|
23
|
+
f"WARNING: Skipping parameter {k}. Failed to parse type: {e}.",
|
|
24
|
+
fg="yellow",
|
|
25
|
+
)
|
|
26
|
+
continue
|
|
27
|
+
val, default = parse_value(typ, v)
|
|
28
|
+
|
|
29
|
+
parsed[k] = (typ, (val, default))
|
|
30
|
+
|
|
31
|
+
return parsed
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def write_metadata(
|
|
35
|
+
metadata: str,
|
|
36
|
+
params: str,
|
|
37
|
+
*,
|
|
38
|
+
skip_confirmation: bool = False,
|
|
39
|
+
) -> None:
|
|
40
|
+
metadata_root = Path("latch_metadata")
|
|
41
|
+
if metadata_root.is_file():
|
|
42
|
+
if not click.confirm("A file exists at `latch_metadata`. Delete it?"):
|
|
43
|
+
raise click.exceptions.Exit(0)
|
|
44
|
+
|
|
45
|
+
metadata_root.unlink()
|
|
46
|
+
|
|
47
|
+
metadata_root.mkdir(exist_ok=True)
|
|
48
|
+
|
|
49
|
+
metadata_path = metadata_root / Path("__init__.py")
|
|
50
|
+
old_metadata_path = Path("latch_metadata.py")
|
|
51
|
+
|
|
52
|
+
if old_metadata_path.exists() and not metadata_path.exists():
|
|
53
|
+
if click.confirm(
|
|
54
|
+
"Found legacy `latch_metadata.py` file in current directory. This is"
|
|
55
|
+
" deprecated and will be ignored in future releases. Move to"
|
|
56
|
+
" `latch_metadata/__init__.py`? (This will not change file contents)"
|
|
57
|
+
):
|
|
58
|
+
old_metadata_path.rename(metadata_path)
|
|
59
|
+
elif old_metadata_path.exists() and metadata_path.exists():
|
|
60
|
+
click.secho(
|
|
61
|
+
"Warning: Found both `latch_metadata.py` and"
|
|
62
|
+
" `latch_metadata/__init__.py` in current directory."
|
|
63
|
+
" `latch_metadata.py` will be ignored.",
|
|
64
|
+
fg="yellow",
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
if not metadata_path.exists():
|
|
68
|
+
metadata_path.write_text(reindent(metadata, 0))
|
|
69
|
+
click.secho("Generated `latch_metadata/__init__.py`.", fg="green")
|
|
70
|
+
|
|
71
|
+
params_path = metadata_root / Path("parameters.py")
|
|
72
|
+
if (
|
|
73
|
+
params_path.exists()
|
|
74
|
+
and not skip_confirmation
|
|
75
|
+
and not click.confirm(
|
|
76
|
+
"File `latch_metadata/parameters.py` already exists. Overwrite?"
|
|
77
|
+
)
|
|
78
|
+
):
|
|
79
|
+
raise click.exceptions.Exit(0)
|
|
80
|
+
|
|
81
|
+
params_path.write_text(reindent(params, 0))
|
|
82
|
+
click.secho("Generated `latch_metadata/parameters.py`.", fg="green")
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
from dataclasses import fields, is_dataclass, make_dataclass
|
|
2
|
+
from typing import Any, Dict, List, Optional, Type, Union, get_args, get_origin
|
|
3
|
+
|
|
4
|
+
from flytekit.core.annotation import FlyteAnnotation
|
|
5
|
+
from typing_extensions import Annotated, TypeAlias, TypeGuard
|
|
6
|
+
|
|
7
|
+
from latch.types.directory import LatchDir
|
|
8
|
+
from latch.types.file import LatchFile
|
|
9
|
+
from latch_cli.utils import identifier_from_str
|
|
10
|
+
|
|
11
|
+
from ..utils import is_primitive_type, is_primitive_value, type_repr
|
|
12
|
+
|
|
13
|
+
JSONValue: TypeAlias = Union[int, str, bool, float, None, List["JSONValue"], "JSONDict"]
|
|
14
|
+
JSONDict: TypeAlias = Dict[str, "JSONValue"]
|
|
15
|
+
|
|
16
|
+
# ayush: yoinked from console
|
|
17
|
+
valid_extensions = {
|
|
18
|
+
"bed",
|
|
19
|
+
"vcf",
|
|
20
|
+
"css",
|
|
21
|
+
"csv",
|
|
22
|
+
"gif",
|
|
23
|
+
"png",
|
|
24
|
+
"pdf",
|
|
25
|
+
"webp",
|
|
26
|
+
"xhtml",
|
|
27
|
+
"xlsx",
|
|
28
|
+
"xml",
|
|
29
|
+
"py",
|
|
30
|
+
"log",
|
|
31
|
+
"json",
|
|
32
|
+
"gz",
|
|
33
|
+
"mmtf",
|
|
34
|
+
"deseqreport",
|
|
35
|
+
"sam",
|
|
36
|
+
"bam",
|
|
37
|
+
"cram",
|
|
38
|
+
"tsv",
|
|
39
|
+
"tab",
|
|
40
|
+
"sf",
|
|
41
|
+
"txt",
|
|
42
|
+
"text",
|
|
43
|
+
"license",
|
|
44
|
+
"readme",
|
|
45
|
+
"r",
|
|
46
|
+
"rscript",
|
|
47
|
+
"md",
|
|
48
|
+
"markdown",
|
|
49
|
+
"markdn",
|
|
50
|
+
"mdown",
|
|
51
|
+
"htm",
|
|
52
|
+
"html",
|
|
53
|
+
"ipynb",
|
|
54
|
+
"jpeg",
|
|
55
|
+
"jpg",
|
|
56
|
+
"jif",
|
|
57
|
+
"jpe",
|
|
58
|
+
"jfif",
|
|
59
|
+
"js",
|
|
60
|
+
"mjs",
|
|
61
|
+
"es",
|
|
62
|
+
"ts",
|
|
63
|
+
"jsx",
|
|
64
|
+
"tsx",
|
|
65
|
+
"svg",
|
|
66
|
+
"svgz",
|
|
67
|
+
"fasta",
|
|
68
|
+
"fna",
|
|
69
|
+
"fa",
|
|
70
|
+
"ffn",
|
|
71
|
+
"faa",
|
|
72
|
+
"frn",
|
|
73
|
+
"fastq",
|
|
74
|
+
"fq",
|
|
75
|
+
"pdb",
|
|
76
|
+
"pdb1",
|
|
77
|
+
"ent",
|
|
78
|
+
"brk",
|
|
79
|
+
"ml2",
|
|
80
|
+
"mol2",
|
|
81
|
+
"sy2",
|
|
82
|
+
"hdf",
|
|
83
|
+
"h4",
|
|
84
|
+
"hdf4",
|
|
85
|
+
"he4",
|
|
86
|
+
"h5",
|
|
87
|
+
"hdf5",
|
|
88
|
+
"he5",
|
|
89
|
+
"h5ad",
|
|
90
|
+
"yaml",
|
|
91
|
+
"yml",
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def parse_type(
|
|
96
|
+
v: JSONValue, name: Optional[str] = None, *, infer_files: bool = False
|
|
97
|
+
) -> Type:
|
|
98
|
+
if v is None:
|
|
99
|
+
return str
|
|
100
|
+
|
|
101
|
+
if infer_files and isinstance(v, str):
|
|
102
|
+
if any([v.endswith(ext) for ext in valid_extensions]):
|
|
103
|
+
return LatchFile
|
|
104
|
+
elif v.endswith("/"):
|
|
105
|
+
return LatchDir
|
|
106
|
+
|
|
107
|
+
if is_primitive_value(v):
|
|
108
|
+
return type(v)
|
|
109
|
+
|
|
110
|
+
if isinstance(v, list):
|
|
111
|
+
parsed_types = tuple(
|
|
112
|
+
parse_type(
|
|
113
|
+
x,
|
|
114
|
+
name,
|
|
115
|
+
infer_files=infer_files,
|
|
116
|
+
)
|
|
117
|
+
for x in v
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
if len(set(parsed_types)) != 1:
|
|
121
|
+
raise ValueError(
|
|
122
|
+
"Generic Lists are not supported - please"
|
|
123
|
+
f" ensure that all elements in {name} are of the same type",
|
|
124
|
+
)
|
|
125
|
+
typ = parsed_types[0]
|
|
126
|
+
if typ in {LatchFile, LatchDir}:
|
|
127
|
+
return Annotated[List[typ], FlyteAnnotation({"size": len(v)})]
|
|
128
|
+
return List[typ]
|
|
129
|
+
|
|
130
|
+
assert isinstance(v, dict)
|
|
131
|
+
|
|
132
|
+
if name is None:
|
|
133
|
+
name = "SnakemakeRecord"
|
|
134
|
+
|
|
135
|
+
fields: Dict[str, Type] = {}
|
|
136
|
+
for k, x in v.items():
|
|
137
|
+
fields[identifier_from_str(k)] = parse_type(
|
|
138
|
+
x,
|
|
139
|
+
k,
|
|
140
|
+
infer_files=infer_files,
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
return make_dataclass(identifier_from_str(name), fields.items())
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
# returns raw value and generated default
|
|
147
|
+
def parse_value(t: Type, v: JSONValue):
|
|
148
|
+
if v is None:
|
|
149
|
+
return None, None
|
|
150
|
+
|
|
151
|
+
if get_origin(t) is Annotated:
|
|
152
|
+
args = get_args(t)
|
|
153
|
+
assert len(args) > 0
|
|
154
|
+
return parse_value(args[0], v)
|
|
155
|
+
|
|
156
|
+
if t in {LatchFile, LatchDir}:
|
|
157
|
+
# ayush: autogenerated defaults don't make sense for files/dirs since their
|
|
158
|
+
# value in the config is their local path
|
|
159
|
+
return v, None
|
|
160
|
+
|
|
161
|
+
if is_primitive_value(v):
|
|
162
|
+
return v, v
|
|
163
|
+
|
|
164
|
+
if isinstance(v, list):
|
|
165
|
+
assert get_origin(t) is list
|
|
166
|
+
|
|
167
|
+
args = get_args(t)
|
|
168
|
+
assert len(args) > 0
|
|
169
|
+
|
|
170
|
+
sub_type = args[0]
|
|
171
|
+
res = [parse_value(sub_type, x) for x in v]
|
|
172
|
+
return [x[0] for x in res], [x[1] for x in res]
|
|
173
|
+
|
|
174
|
+
assert isinstance(v, dict), v
|
|
175
|
+
assert is_dataclass(t), t
|
|
176
|
+
|
|
177
|
+
ret = {}
|
|
178
|
+
defaults = {}
|
|
179
|
+
fs = {identifier_from_str(f.name): f for f in fields(t)}
|
|
180
|
+
|
|
181
|
+
for k, x in v.items():
|
|
182
|
+
sanitized = identifier_from_str(k)
|
|
183
|
+
assert sanitized in fs, sanitized
|
|
184
|
+
val, default = parse_value(fs[sanitized].type, x)
|
|
185
|
+
ret[sanitized] = val
|
|
186
|
+
defaults[sanitized] = default
|
|
187
|
+
|
|
188
|
+
return t(**ret), t(**defaults)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def is_primitive_type(
|
|
192
|
+
typ: Type,
|
|
193
|
+
) -> TypeGuard[Union[Type[None], Type[str], Type[bool], Type[int], Type[float]]]:
|
|
194
|
+
return typ in {Type[None], str, bool, int, float}
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def is_primitive_value(val: object) -> TypeGuard[Union[None, str, bool, int, float]]:
|
|
198
|
+
return is_primitive_type(type(val))
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def is_list_type(typ: Type) -> TypeGuard[Type[List]]:
|
|
202
|
+
return get_origin(typ) is list
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def type_repr(t: Type, *, add_namespace: bool = False) -> str:
|
|
206
|
+
if is_primitive_type(t) or t in {LatchFile, LatchDir}:
|
|
207
|
+
return t.__name__
|
|
208
|
+
|
|
209
|
+
if get_origin(t) is None:
|
|
210
|
+
return f"{'latch_metadata.' if add_namespace else ''}{t.__name__}"
|
|
211
|
+
|
|
212
|
+
if get_origin(t) is list:
|
|
213
|
+
args = get_args(t)
|
|
214
|
+
if len(args) > 0:
|
|
215
|
+
return f"typing.List[{type_repr(args[0], add_namespace=add_namespace)}]"
|
|
216
|
+
|
|
217
|
+
return "typing.List"
|
|
218
|
+
|
|
219
|
+
if get_origin(t) is Union:
|
|
220
|
+
args = get_args(t)
|
|
221
|
+
|
|
222
|
+
if len(args) != 2 or args[1] is not type(None):
|
|
223
|
+
raise ValueError(
|
|
224
|
+
"Union types other than Optional are not yet supported in Snakemake"
|
|
225
|
+
" workflows."
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
return f"typing.Optional[{type_repr(args[0], add_namespace=add_namespace)}]"
|
|
229
|
+
|
|
230
|
+
if get_origin(t) is Annotated:
|
|
231
|
+
args = get_args(t)
|
|
232
|
+
assert len(args) > 1
|
|
233
|
+
assert isinstance(args[1], FlyteAnnotation)
|
|
234
|
+
return (
|
|
235
|
+
f"typing_extensions.Annotated[{type_repr(args[0], add_namespace=add_namespace)},"
|
|
236
|
+
f" FlyteAnnotation({repr(args[1].data)})]"
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
return t.__name__
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def dataclass_repr(typ: Type) -> str:
|
|
243
|
+
assert is_dataclass(typ)
|
|
244
|
+
|
|
245
|
+
lines = ["@dataclass", f"class {typ.__name__}:"]
|
|
246
|
+
for f in fields(typ):
|
|
247
|
+
lines.append(f" {f.name}: {type_repr(f.type)}")
|
|
248
|
+
|
|
249
|
+
return "\n".join(lines) + "\n\n\n"
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def get_preamble(typ: Type) -> str:
|
|
253
|
+
if get_origin(typ) is Annotated:
|
|
254
|
+
args = get_args(typ)
|
|
255
|
+
assert len(args) > 0
|
|
256
|
+
return get_preamble(args[0])
|
|
257
|
+
|
|
258
|
+
if is_primitive_type(typ) or typ in {LatchFile, LatchDir}:
|
|
259
|
+
return ""
|
|
260
|
+
|
|
261
|
+
if get_origin(typ) in {Union, list}:
|
|
262
|
+
return "".join([get_preamble(t) for t in get_args(typ)])
|
|
263
|
+
|
|
264
|
+
assert is_dataclass(typ), typ
|
|
265
|
+
|
|
266
|
+
preamble = "".join([get_preamble(f.type) for f in fields(typ)])
|
|
267
|
+
|
|
268
|
+
return "".join([preamble, dataclass_repr(typ)])
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/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
|
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/init.cpython-310.pyc
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/init.cpython-311.pyc
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/init.cpython-38.pyc
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/__pycache__/init.cpython-39.pyc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/README.md
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/assemble_and_sort/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/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.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_conda/conda_task.py
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_conda/environment.yaml
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_docker/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nf_integration/Dockerfile
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nf_integration/main.nf
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_nf_integration/workflow.nf
RENAMED
|
File without changes
|
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/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.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/Dockerfile
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/Snakefile
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/latch_cli/services/init/example_snakemake/config.yaml
RENAMED
|
File without changes
|
{latch-2.39.0.dev23 → latch-2.39.0.dev25}/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
|
{latch-2.39.0.dev23/latch_cli/tui → latch-2.39.0.dev25/latch_cli/services/test_data}/__init__.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
|