latch 2.46.1.dev1__tar.gz → 2.46.2.dev1__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.46.1.dev1/latch.egg-info → latch-2.46.2.dev1}/PKG-INFO +1 -1
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/account.py +16 -13
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/project.py +16 -12
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/record.py +9 -1
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/table.py +19 -8
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/utils.py +7 -8
- {latch-2.46.1.dev1 → latch-2.46.2.dev1/latch.egg-info}/PKG-INFO +1 -1
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/nextflow/dependencies.py +1 -1
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/nextflow/workflow.py +10 -10
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/setup.py +1 -1
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/LICENSE +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/MANIFEST.in +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/README.md +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/executions.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/functions/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/functions/messages.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/functions/operators.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/functions/secrets.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/download.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/manager.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/node.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/progress.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/remote_copy.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/throttle.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/upload.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/_transfer/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/path.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/ldata/type.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/types.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/upstream_types/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/upstream_types/types.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/upstream_types/values.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/registry/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/resources/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/resources/conditional.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/resources/dynamic.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/resources/launch_plan.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/resources/map_tasks.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/resources/reference_workflow.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/resources/tasks.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/resources/workflow.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/types/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/types/directory.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/types/file.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/types/glob.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/types/json.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/types/metadata.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/types/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/verified/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/verified/deseq2.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/verified/mafft.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/verified/pathway.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/verified/rnaseq.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch/verified/trim_galore.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch.egg-info/SOURCES.txt +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch.egg-info/dependency_links.txt +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch.egg-info/entry_points.txt +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch.egg-info/requires.txt +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch.egg-info/top_level.txt +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/auth/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/auth/csrf.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/auth/oauth2.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/auth/pkce.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/auth/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/centromere/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/centromere/ctx.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/centromere/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/click_utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/constants.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/docker_utils/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/exceptions/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/exceptions/cache.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/exceptions/errors.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/exceptions/handler.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/exceptions/traceback.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/main.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/menus.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/nextflow/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/nextflow/config.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/nextflow/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/cp/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/cp/autocomplete.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/cp/glob.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/cp/main.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/cp/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/execute/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/execute/main.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/execute/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/get.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/get_executions.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/get_params.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/__pycache__/init.cpython-310.pyc +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/assemble_and_sort/.env +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/assemble_and_sort/LICENSE +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/assemble_and_sort/README.md +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/assemble_and_sort/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/assemble_and_sort/assemble.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/assemble_and_sort/sort.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/assemble_and_sort/system-requirements.txt +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/common/.dockerignore +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_conda/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_conda/conda_task.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_conda/environment.yaml +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_docker/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_docker/task.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_nfcore/Dockerfile +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_nfcore/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_nfcore/task.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_r/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_r/environment.R +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_r/r_task.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/.latch/latch_entrypoint +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/Dockerfile +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/Snakefile +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/config.yaml +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/environment.yaml +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/latch_metadata.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/scripts/plot-quals.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/version +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/init.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/template/LICENSE +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/template/README.md +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/template/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/template/task.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/launch.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/local_dev.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/local_dev_old.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/login.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/ls.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/mkdir.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/move.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/preview.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/register/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/register/constants.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/register/register.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/register/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/rm.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/stop_pod.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/sync.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/test_data/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/test_data/ls.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/test_data/remove.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/test_data/upload.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/test_data/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/workspace.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/config/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/config/parser.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/config/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/serialize.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/serialize_utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/single_task_snakemake.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/utils.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/snakemake/workflow.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/tinyrequests.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/tui/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/utils/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/utils/path.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/workflow_config.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/pyproject.toml +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/setup.cfg +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/tests/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/tests/cp/__init__.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/tests/fixtures.py +0 -0
- {latch-2.46.1.dev1 → latch-2.46.2.dev1}/tests/test_ls.py +0 -0
|
@@ -16,7 +16,10 @@ from typing_extensions import Self, TypeAlias
|
|
|
16
16
|
|
|
17
17
|
from latch.registry.project import Project
|
|
18
18
|
from latch.registry.table import Table
|
|
19
|
-
from latch.utils import current_workspace
|
|
19
|
+
from latch.utils import NotFoundError, current_workspace
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class AccountNotFoundError(NotFoundError): ...
|
|
20
23
|
|
|
21
24
|
|
|
22
25
|
class _CatalogExperiment(TypedDict):
|
|
@@ -121,7 +124,11 @@ class Account:
|
|
|
121
124
|
"""),
|
|
122
125
|
{"ownerId": self.id},
|
|
123
126
|
)["accountInfo"]
|
|
124
|
-
|
|
127
|
+
|
|
128
|
+
if data is None:
|
|
129
|
+
raise AccountNotFoundError(
|
|
130
|
+
f"account does not exist or you lack permissions: id={self.id}"
|
|
131
|
+
)
|
|
125
132
|
|
|
126
133
|
self._cache.catalog_projects = []
|
|
127
134
|
for x in data["catalogProjectsByOwnerId"]["nodes"]:
|
|
@@ -258,12 +265,10 @@ class AccountUpdate:
|
|
|
258
265
|
|
|
259
266
|
args = l.ArgumentNode()
|
|
260
267
|
args.name = _name_node("input")
|
|
261
|
-
args.value = _json_value(
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
)
|
|
268
|
+
args.value = _json_value({
|
|
269
|
+
"argOwnerId": self.account.id,
|
|
270
|
+
"argDisplayNames": display_names,
|
|
271
|
+
})
|
|
267
272
|
|
|
268
273
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
269
274
|
res.arguments = tuple([args])
|
|
@@ -299,11 +304,9 @@ class AccountUpdate:
|
|
|
299
304
|
|
|
300
305
|
args = l.ArgumentNode()
|
|
301
306
|
args.name = _name_node("input")
|
|
302
|
-
args.value = _json_value(
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
}
|
|
306
|
-
)
|
|
307
|
+
args.value = _json_value({
|
|
308
|
+
"argIds": ids,
|
|
309
|
+
})
|
|
307
310
|
|
|
308
311
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
309
312
|
res.arguments = tuple([args])
|
|
@@ -9,6 +9,7 @@ from latch_sdk_gql.utils import _GqlJsonValue, _json_value, _name_node, _parse_s
|
|
|
9
9
|
from typing_extensions import TypeAlias
|
|
10
10
|
|
|
11
11
|
from latch.registry.table import Table
|
|
12
|
+
from latch.utils import NotFoundError, current_workspace
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class _CatalogExperimentNode(TypedDict):
|
|
@@ -22,6 +23,9 @@ class _Cache:
|
|
|
22
23
|
tables: Optional[List[Table]] = None
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
class ProjectNotFoundError(NotFoundError): ...
|
|
27
|
+
|
|
28
|
+
|
|
25
29
|
@dataclass(frozen=True)
|
|
26
30
|
class Project:
|
|
27
31
|
"""Registry project (folder containing :class:`tables <latch.registry.table.Table>`).
|
|
@@ -69,7 +73,11 @@ class Project:
|
|
|
69
73
|
"""),
|
|
70
74
|
variables={"id": self.id},
|
|
71
75
|
)["catalogProject"]
|
|
72
|
-
|
|
76
|
+
|
|
77
|
+
if data is None:
|
|
78
|
+
raise ProjectNotFoundError(
|
|
79
|
+
f"project does not exist or you lack permissions: id={self.id}"
|
|
80
|
+
)
|
|
73
81
|
|
|
74
82
|
self._cache.display_name = data["displayName"]
|
|
75
83
|
|
|
@@ -228,12 +236,10 @@ class ProjectUpdate:
|
|
|
228
236
|
|
|
229
237
|
args = l.ArgumentNode()
|
|
230
238
|
args.name = _name_node("input")
|
|
231
|
-
args.value = _json_value(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
)
|
|
239
|
+
args.value = _json_value({
|
|
240
|
+
"argProjectId": self.project.id,
|
|
241
|
+
"argDisplayNames": display_names,
|
|
242
|
+
})
|
|
237
243
|
|
|
238
244
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
239
245
|
res.arguments = tuple([args])
|
|
@@ -267,11 +273,9 @@ class ProjectUpdate:
|
|
|
267
273
|
|
|
268
274
|
args = l.ArgumentNode()
|
|
269
275
|
args.name = _name_node("input")
|
|
270
|
-
args.value = _json_value(
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
)
|
|
276
|
+
args.value = _json_value({
|
|
277
|
+
"argIds": ids,
|
|
278
|
+
})
|
|
275
279
|
|
|
276
280
|
res.alias = _name_node(f"upd{len(mutations)}")
|
|
277
281
|
res.arguments = tuple([args])
|
|
@@ -17,11 +17,15 @@ from latch_sdk_gql.execute import execute
|
|
|
17
17
|
|
|
18
18
|
from latch.registry.upstream_types.types import DBType
|
|
19
19
|
from latch.registry.upstream_types.values import DBValue
|
|
20
|
+
from latch.utils import NotFoundError, current_workspace
|
|
20
21
|
|
|
21
22
|
if TYPE_CHECKING: # avoid circular type imports
|
|
22
23
|
from latch.registry.types import Column, RecordValue
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
class RecordNotFoundError(NotFoundError): ...
|
|
27
|
+
|
|
28
|
+
|
|
25
29
|
class NoSuchColumnError(KeyError):
|
|
26
30
|
"""Unknown column referenced by Registry method.
|
|
27
31
|
|
|
@@ -133,7 +137,11 @@ class Record:
|
|
|
133
137
|
"""),
|
|
134
138
|
{"id": self.id},
|
|
135
139
|
)["catalogSample"]
|
|
136
|
-
|
|
140
|
+
|
|
141
|
+
if data is None:
|
|
142
|
+
raise RecordNotFoundError(
|
|
143
|
+
f"record does not exist or you lack permissions: id={self.id}"
|
|
144
|
+
)
|
|
137
145
|
|
|
138
146
|
self._cache.table_id = data["experiment"]["id"]
|
|
139
147
|
self._cache.name = data["name"]
|
|
@@ -56,7 +56,7 @@ from latch.registry.utils import (
|
|
|
56
56
|
)
|
|
57
57
|
from latch.types.directory import LatchDir
|
|
58
58
|
from latch.types.file import LatchFile
|
|
59
|
-
from latch.utils import current_workspace
|
|
59
|
+
from latch.utils import NotFoundError, current_workspace
|
|
60
60
|
from latch_cli.utils import human_readable_time
|
|
61
61
|
|
|
62
62
|
from ..types.json import JsonValue
|
|
@@ -81,6 +81,9 @@ class _Cache:
|
|
|
81
81
|
project_id: Optional[str] = None
|
|
82
82
|
|
|
83
83
|
|
|
84
|
+
class TableNotFoundError(NotFoundError): ...
|
|
85
|
+
|
|
86
|
+
|
|
84
87
|
@dataclass(frozen=True)
|
|
85
88
|
class Table:
|
|
86
89
|
"""Registry table. Contains :class:`records <latch.registry.record.Record>`.
|
|
@@ -125,7 +128,11 @@ class Table:
|
|
|
125
128
|
"""),
|
|
126
129
|
variables={"id": self.id},
|
|
127
130
|
)["catalogExperiment"]
|
|
128
|
-
|
|
131
|
+
|
|
132
|
+
if data is None:
|
|
133
|
+
raise TableNotFoundError(
|
|
134
|
+
f"table does not exist or you lack permissions: id={self.id}"
|
|
135
|
+
)
|
|
129
136
|
|
|
130
137
|
self._cache.project_id = data["projectId"]
|
|
131
138
|
self._cache.display_name = data["displayName"]
|
|
@@ -243,7 +250,7 @@ class Table:
|
|
|
243
250
|
|
|
244
251
|
# todo(maximsmol): because allSamples returns each column as its own
|
|
245
252
|
# row, we can't paginate by samples because we don't know when a sample is finished
|
|
246
|
-
|
|
253
|
+
data = execute(
|
|
247
254
|
gql.gql("""
|
|
248
255
|
query TableQuery($id: BigInt!) {
|
|
249
256
|
catalogExperiment(id: $id) {
|
|
@@ -258,11 +265,15 @@ class Table:
|
|
|
258
265
|
}
|
|
259
266
|
}
|
|
260
267
|
"""),
|
|
261
|
-
{
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
268
|
+
{"id": self.id},
|
|
269
|
+
)["catalogExperiment"]
|
|
270
|
+
|
|
271
|
+
if data is None:
|
|
272
|
+
raise TableNotFoundError(
|
|
273
|
+
f"table does not exist or you lack permissions: id={self.id}"
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
nodes: List[_AllRecordsNode] = data["allSamples"]["nodes"]
|
|
266
277
|
|
|
267
278
|
record_names: Dict[str, str] = {}
|
|
268
279
|
record_values: Dict[str, Dict[str, RecordValue]] = {}
|
|
@@ -55,8 +55,7 @@ def get_workspaces() -> Dict[str, WSInfo]:
|
|
|
55
55
|
"""
|
|
56
56
|
account_id = account_id_from_token(retrieve_or_login())
|
|
57
57
|
res = execute(
|
|
58
|
-
gql.gql(
|
|
59
|
-
"""
|
|
58
|
+
gql.gql("""
|
|
60
59
|
query GetWorkspaces($accountId: BigInt!) {
|
|
61
60
|
userInfoByAccountId(accountId: $accountId) {
|
|
62
61
|
id
|
|
@@ -103,8 +102,7 @@ def get_workspaces() -> Dict[str, WSInfo]:
|
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
104
|
}
|
|
106
|
-
"""
|
|
107
|
-
),
|
|
105
|
+
"""),
|
|
108
106
|
{"accountId": account_id},
|
|
109
107
|
)
|
|
110
108
|
|
|
@@ -153,8 +151,7 @@ def current_workspace() -> str:
|
|
|
153
151
|
ws = user_config.workspace_id
|
|
154
152
|
if ws == "":
|
|
155
153
|
res = execute(
|
|
156
|
-
gql.gql(
|
|
157
|
-
"""
|
|
154
|
+
gql.gql("""
|
|
158
155
|
query DefaultAccountQuery {
|
|
159
156
|
accountInfoCurrent {
|
|
160
157
|
id
|
|
@@ -163,8 +160,7 @@ def current_workspace() -> str:
|
|
|
163
160
|
}
|
|
164
161
|
}
|
|
165
162
|
}
|
|
166
|
-
"""
|
|
167
|
-
),
|
|
163
|
+
"""),
|
|
168
164
|
)["accountInfoCurrent"]
|
|
169
165
|
|
|
170
166
|
default_ws = res["id"]
|
|
@@ -177,3 +173,6 @@ def current_workspace() -> str:
|
|
|
177
173
|
ws = default_ws
|
|
178
174
|
|
|
179
175
|
return ws
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class NotFoundError(ValueError): ...
|
|
@@ -127,18 +127,18 @@ def nextflow_runtime(pvc_name: str, {param_signature}) -> None:
|
|
|
127
127
|
check=True,
|
|
128
128
|
cwd=str(shared_dir),
|
|
129
129
|
)
|
|
130
|
-
|
|
130
|
+
finally:
|
|
131
131
|
print()
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
if
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
133
|
+
nextflow_log = shared_dir / ".nextflow.log"
|
|
134
|
+
if nextflow_log.exists():
|
|
135
|
+
name = _get_execution_name()
|
|
136
|
+
if name is None:
|
|
137
|
+
print("Skipping logs upload, failed to get execution name")
|
|
138
|
+
else:
|
|
139
|
+
remote = LPath(urljoins("{log_dir}", name, "nextflow.log"))
|
|
140
|
+
print(f"Uploading .nextflow.log to {{remote.path}}")
|
|
141
|
+
remote.upload_from(nextflow_log)
|
|
142
142
|
|
|
143
143
|
|
|
144
144
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc
RENAMED
|
File without changes
|
{latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/__pycache__/init.cpython-310.pyc
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/assemble_and_sort/__init__.py
RENAMED
|
File without changes
|
{latch-2.46.1.dev1 → latch-2.46.2.dev1}/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.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_conda/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
|
{latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/Dockerfile
RENAMED
|
File without changes
|
|
File without changes
|
{latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/config.yaml
RENAMED
|
File without changes
|
{latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/environment.yaml
RENAMED
|
File without changes
|
{latch-2.46.1.dev1 → latch-2.46.2.dev1}/latch_cli/services/init/example_snakemake/latch_metadata.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|