latch 2.39.0.dev18__tar.gz → 2.39.0.dev20__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.
Files changed (201) hide show
  1. {latch-2.39.0.dev18/latch.egg-info → latch-2.39.0.dev20}/PKG-INFO +1 -1
  2. {latch-2.39.0.dev18 → latch-2.39.0.dev20/latch.egg-info}/PKG-INFO +1 -1
  3. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/build.py +7 -3
  4. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/channel.py +23 -1
  5. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/file_persistence.py +10 -10
  6. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/conditional.py +1 -1
  7. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/operator.py +0 -1
  8. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/process.py +26 -15
  9. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/main.py +8 -0
  10. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/register/register.py +2 -0
  11. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/setup.py +1 -1
  12. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/LICENSE +0 -0
  13. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/MANIFEST.in +0 -0
  14. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/README.md +0 -0
  15. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/__init__.py +0 -0
  16. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/account.py +0 -0
  17. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/executions.py +0 -0
  18. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/functions/__init__.py +0 -0
  19. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/functions/messages.py +0 -0
  20. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/functions/operators.py +0 -0
  21. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/functions/secrets.py +0 -0
  22. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/__init__.py +0 -0
  23. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/__init__.py +0 -0
  24. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/download.py +0 -0
  25. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/manager.py +0 -0
  26. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/node.py +0 -0
  27. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/progress.py +0 -0
  28. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/remote_copy.py +0 -0
  29. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/throttle.py +0 -0
  30. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/upload.py +0 -0
  31. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/_transfer/utils.py +0 -0
  32. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/path.py +0 -0
  33. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/ldata/type.py +0 -0
  34. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/__init__.py +0 -0
  35. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/project.py +0 -0
  36. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/record.py +0 -0
  37. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/table.py +0 -0
  38. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/types.py +0 -0
  39. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/upstream_types/__init__.py +0 -0
  40. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/upstream_types/types.py +0 -0
  41. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/upstream_types/values.py +0 -0
  42. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/registry/utils.py +0 -0
  43. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/resources/__init__.py +0 -0
  44. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/resources/conditional.py +0 -0
  45. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/resources/launch_plan.py +0 -0
  46. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/resources/map_tasks.py +0 -0
  47. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/resources/reference_workflow.py +0 -0
  48. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/resources/tasks.py +0 -0
  49. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/resources/workflow.py +0 -0
  50. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/types/__init__.py +0 -0
  51. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/types/directory.py +0 -0
  52. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/types/file.py +0 -0
  53. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/types/glob.py +0 -0
  54. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/types/json.py +0 -0
  55. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/types/metadata.py +0 -0
  56. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/types/utils.py +0 -0
  57. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/verified/__init__.py +0 -0
  58. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/verified/deseq2.py +0 -0
  59. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/verified/mafft.py +0 -0
  60. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/verified/pathway.py +0 -0
  61. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/verified/rnaseq.py +0 -0
  62. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch/verified/trim_galore.py +0 -0
  63. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch.egg-info/SOURCES.txt +0 -0
  64. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch.egg-info/dependency_links.txt +0 -0
  65. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch.egg-info/entry_points.txt +0 -0
  66. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch.egg-info/requires.txt +0 -0
  67. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch.egg-info/top_level.txt +0 -0
  68. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/__init__.py +0 -0
  69. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/auth/__init__.py +0 -0
  70. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/auth/csrf.py +0 -0
  71. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/auth/oauth2.py +0 -0
  72. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/auth/pkce.py +0 -0
  73. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/auth/utils.py +0 -0
  74. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/centromere/__init__.py +0 -0
  75. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/centromere/ctx.py +0 -0
  76. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/centromere/utils.py +0 -0
  77. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/click_utils.py +0 -0
  78. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/constants.py +0 -0
  79. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/docker_utils/__init__.py +0 -0
  80. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/exceptions/__init__.py +0 -0
  81. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/exceptions/cache.py +0 -0
  82. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/exceptions/errors.py +0 -0
  83. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/exceptions/handler.py +0 -0
  84. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/exceptions/traceback.py +0 -0
  85. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/__init__.py +0 -0
  86. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/common/__init__.py +0 -0
  87. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/common/serialize.py +0 -0
  88. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/common/utils.py +0 -0
  89. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/__init__.py +0 -0
  90. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/dag.py +0 -0
  91. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/serialize.py +0 -0
  92. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/__init__.py +0 -0
  93. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/adapters.py +0 -0
  94. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/base.py +0 -0
  95. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/input.py +0 -0
  96. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/map.py +0 -0
  97. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/merge.py +0 -0
  98. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/tasks/output.py +0 -0
  99. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/nextflow/workflow.py +0 -0
  100. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/snakemake/__init__.py +0 -0
  101. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/snakemake/config/__init__.py +0 -0
  102. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/snakemake/config/parser.py +0 -0
  103. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/snakemake/config/utils.py +0 -0
  104. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/snakemake/serialize.py +0 -0
  105. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/snakemake/single_task_snakemake.py +0 -0
  106. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/snakemake/utils.py +0 -0
  107. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/extras/snakemake/workflow.py +0 -0
  108. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/menus.py +0 -0
  109. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/__init__.py +0 -0
  110. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/cp/__init__.py +0 -0
  111. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/cp/autocomplete.py +0 -0
  112. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/cp/glob.py +0 -0
  113. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/cp/main.py +0 -0
  114. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/cp/utils.py +0 -0
  115. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/execute/__init__.py +0 -0
  116. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/execute/main.py +0 -0
  117. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/execute/utils.py +0 -0
  118. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/get.py +0 -0
  119. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/get_executions.py +0 -0
  120. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/get_params.py +0 -0
  121. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__init__.py +0 -0
  122. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
  123. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__pycache__/__init__.cpython-311.pyc +0 -0
  124. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__pycache__/__init__.cpython-38.pyc +0 -0
  125. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__pycache__/__init__.cpython-39.pyc +0 -0
  126. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__pycache__/init.cpython-310.pyc +0 -0
  127. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__pycache__/init.cpython-311.pyc +0 -0
  128. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__pycache__/init.cpython-38.pyc +0 -0
  129. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/__pycache__/init.cpython-39.pyc +0 -0
  130. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/assemble_and_sort/.env +0 -0
  131. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/assemble_and_sort/LICENSE +0 -0
  132. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/assemble_and_sort/README.md +0 -0
  133. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/assemble_and_sort/__init__.py +0 -0
  134. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc +0 -0
  135. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/assemble_and_sort/assemble.py +0 -0
  136. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/assemble_and_sort/sort.py +0 -0
  137. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/assemble_and_sort/system-requirements.txt +0 -0
  138. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/common/.dockerignore +0 -0
  139. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_conda/__init__.py +0 -0
  140. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc +0 -0
  141. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_conda/conda_task.py +0 -0
  142. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_conda/environment.yaml +0 -0
  143. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_docker/__init__.py +0 -0
  144. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_docker/task.py +0 -0
  145. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_nf_integration/Dockerfile +0 -0
  146. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_nf_integration/latch_metadata/__init__.py +0 -0
  147. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc +0 -0
  148. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_nf_integration/main.nf +0 -0
  149. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_nf_integration/workflow.nf +0 -0
  150. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_nfcore/Dockerfile +0 -0
  151. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_nfcore/__init__.py +0 -0
  152. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_nfcore/task.py +0 -0
  153. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_r/__init__.py +0 -0
  154. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc +0 -0
  155. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_r/environment.R +0 -0
  156. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_r/r_task.py +0 -0
  157. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_snakemake/.latch/latch_entrypoint +0 -0
  158. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_snakemake/Dockerfile +0 -0
  159. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_snakemake/Snakefile +0 -0
  160. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_snakemake/config.yaml +0 -0
  161. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_snakemake/environment.yaml +0 -0
  162. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_snakemake/latch_metadata.py +0 -0
  163. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_snakemake/scripts/plot-quals.py +0 -0
  164. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/example_snakemake/version +0 -0
  165. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/init.py +0 -0
  166. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/template/LICENSE +0 -0
  167. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/template/README.md +0 -0
  168. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/template/__init__.py +0 -0
  169. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc +0 -0
  170. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/init/template/task.py +0 -0
  171. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/launch.py +0 -0
  172. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/local_dev.py +0 -0
  173. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/local_dev_old.py +0 -0
  174. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/login.py +0 -0
  175. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/ls.py +0 -0
  176. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/mkdir.py +0 -0
  177. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/move.py +0 -0
  178. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/preview.py +0 -0
  179. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/register/__init__.py +0 -0
  180. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/register/constants.py +0 -0
  181. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/register/utils.py +0 -0
  182. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/rm.py +0 -0
  183. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/stop_pod.py +0 -0
  184. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/sync.py +0 -0
  185. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/test_data/__init__.py +0 -0
  186. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/test_data/ls.py +0 -0
  187. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/test_data/remove.py +0 -0
  188. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/test_data/upload.py +0 -0
  189. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/test_data/utils.py +0 -0
  190. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/services/workspace.py +0 -0
  191. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/tinyrequests.py +0 -0
  192. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/tui/__init__.py +0 -0
  193. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/utils/__init__.py +0 -0
  194. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/utils/path.py +0 -0
  195. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/latch_cli/workflow_config.py +0 -0
  196. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/pyproject.toml +0 -0
  197. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/setup.cfg +0 -0
  198. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/tests/__init__.py +0 -0
  199. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/tests/cp/__init__.py +0 -0
  200. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/tests/fixtures.py +0 -0
  201. {latch-2.39.0.dev18 → latch-2.39.0.dev20}/tests/test_ls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: latch
3
- Version: 2.39.0.dev18
3
+ Version: 2.39.0.dev20
4
4
  Summary: The Latch SDK
5
5
  Author-email: kenny@latch.bio
6
6
  Classifier: Programming Language :: Python :: 3.8
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: latch
3
- Version: 2.39.0.dev18
3
+ Version: 2.39.0.dev20
4
4
  Summary: The Latch SDK
5
5
  Author-email: kenny@latch.bio
6
6
  Classifier: Programming Language :: Python :: 3.8
@@ -42,7 +42,9 @@ def get_node_name(vertex_id: str) -> str:
42
42
  return f"n{vertex_id}"
43
43
 
44
44
 
45
- def build_from_nextflow_dag(wf: NextflowWorkflow):
45
+ def build_from_nextflow_dag(
46
+ wf: NextflowWorkflow, *, execution_profile: Optional[str] = None
47
+ ):
46
48
  global_start_node = Node(
47
49
  id=_common_constants.GLOBAL_INPUT_NODE_ID,
48
50
  metadata=None,
@@ -158,6 +160,7 @@ def build_from_nextflow_dag(wf: NextflowWorkflow):
158
160
  import_path=Path(vertex.module),
159
161
  process_name=vertex.label,
160
162
  unaliased=vertex.unaliased,
163
+ execution_profile=execution_profile,
161
164
  wf=wf,
162
165
  )
163
166
 
@@ -391,6 +394,7 @@ def build_nf_wf(
391
394
  nf_script: Path,
392
395
  *,
393
396
  redownload_dependencies: bool = False,
397
+ execution_profile: Optional[str] = None,
394
398
  ) -> NextflowWorkflow:
395
399
  ensure_nf_dependencies(pkg_root, force_redownload=redownload_dependencies)
396
400
 
@@ -469,7 +473,7 @@ def build_nf_wf(
469
473
 
470
474
  wf = NextflowWorkflow(nf_script, main_dag)
471
475
 
472
- build_from_nextflow_dag(wf)
476
+ build_from_nextflow_dag(wf, execution_profile=execution_profile)
473
477
 
474
478
  return wf
475
479
 
@@ -501,7 +505,7 @@ def generate_nf_entrypoint(
501
505
 
502
506
  from flytekit.extras.persistence import LatchPersistence
503
507
  from latch_cli.extras.nextflow.file_persistence import download_files, stage_for_output, upload_files
504
- from latch_cli.extras.nextflow.channel import get_mapper_inputs
508
+ from latch_cli.extras.nextflow.channel import get_mapper_inputs, get_boolean_value
505
509
  from latch_cli.utils import check_exists_and_rename, get_parameter_json_value, urljoins
506
510
 
507
511
  from latch.resources.tasks import custom_task
@@ -1,11 +1,33 @@
1
1
  import json
2
- from typing import Dict, List, Type, TypeVar
2
+ from typing import Dict, List, Optional, Type, TypeVar
3
3
 
4
4
  from latch.types.metadata import _IsDataclass
5
5
 
6
6
  T = TypeVar("T", bound=_IsDataclass)
7
7
 
8
8
 
9
+ def get_boolean_value(channel_value: str) -> bool:
10
+ og_error: Optional[Exception] = None
11
+
12
+ try:
13
+ payload = json.loads(channel_value)
14
+
15
+ if type(payload) is list:
16
+ return payload[0]["boolean"]
17
+ elif type(payload) is dict:
18
+ return payload["value"]["boolean"]
19
+ except Exception as e:
20
+ og_error = e
21
+
22
+ error = ValueError(
23
+ f"Unable to extract boolean value for conditional: {channel_value}"
24
+ )
25
+ if og_error is not None:
26
+ raise error from og_error
27
+
28
+ raise error
29
+
30
+
9
31
  def get_mapper_inputs(
10
32
  cls: Type[T],
11
33
  wf_inputs: Dict[str, object],
@@ -104,11 +104,11 @@ def download_files(
104
104
  ):
105
105
  paths: List[Path] = []
106
106
  for channel in channels:
107
- if type(channel) != list:
108
- continue
109
-
110
- for param in channel:
111
- _extract_paths(param, paths)
107
+ if type(channel) == dict and "value" in channel:
108
+ _extract_paths(channel["value"], paths)
109
+ elif type(channel) == list:
110
+ for param in channel:
111
+ _extract_paths(param, paths)
112
112
 
113
113
  remote = _get_remote(outdir)
114
114
 
@@ -178,11 +178,11 @@ def _upload(local: Path, remote: str):
178
178
  def upload_files(channels: Dict[str, List[JSONValue]], outdir: LatchDir):
179
179
  paths: List[Path] = []
180
180
  for channel in channels.values():
181
- if type(channel) != list:
182
- continue
183
-
184
- for param in channel:
185
- _extract_paths(param, paths)
181
+ if type(channel) == dict and "value" in channel:
182
+ _extract_paths(channel["value"], paths)
183
+ elif type(channel) == list:
184
+ for param in channel:
185
+ _extract_paths(param, paths)
186
186
 
187
187
  remote = _get_remote(outdir)
188
188
 
@@ -48,7 +48,7 @@ class NextflowConditionalTask(NextflowOperatorTask):
48
48
  res = out_channels.get({repr(out_name)})
49
49
 
50
50
  if res is not None:
51
- res = json.loads(res)[0]["boolean"]
51
+ res = get_boolean_value(res)
52
52
 
53
53
  return Res{self.name}(condition=res)
54
54
  """,
@@ -135,7 +135,6 @@ class NextflowOperatorTask(NextflowBaseTask):
135
135
  """,
136
136
  2,
137
137
  )
138
-
139
138
  elif is_blob_type(typ):
140
139
  code_block += reindent(
141
140
  f"""
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  from dataclasses import fields, is_dataclass
3
3
  from pathlib import Path
4
- from typing import List, Mapping, Type
4
+ from typing import List, Mapping, Optional, Type
5
5
 
6
6
  from latch.types.directory import LatchDir
7
7
  from latch.types.file import LatchFile
@@ -24,6 +24,7 @@ class NextflowProcessTask(NextflowBaseTask):
24
24
  import_path: Path,
25
25
  process_name: str,
26
26
  unaliased: str,
27
+ execution_profile: Optional[str],
27
28
  wf: NextflowWorkflow,
28
29
  ):
29
30
  super().__init__(inputs, outputs, id, name, {}, wf, cpu=16, memory=32)
@@ -50,6 +51,7 @@ class NextflowProcessTask(NextflowBaseTask):
50
51
  self.import_path = import_path
51
52
  self.process_name = process_name
52
53
  self.unaliased = unaliased
54
+ self.execution_profile = execution_profile
53
55
 
54
56
  def get_fn_interface(self):
55
57
  input_name, input_t = list(self._python_inputs.items())[0]
@@ -112,6 +114,9 @@ class NextflowProcessTask(NextflowBaseTask):
112
114
  str(nf_script_path_in_container),
113
115
  ]
114
116
 
117
+ if self.execution_profile is not None:
118
+ run_task_entrypoint.extend(["-profile", self.execution_profile])
119
+
115
120
  for flag, val in self.wf.flags_to_params.items():
116
121
  run_task_entrypoint.extend([flag, str(val)])
117
122
 
@@ -138,9 +143,8 @@ class NextflowProcessTask(NextflowBaseTask):
138
143
  code_block += reindent(
139
144
  f"""
140
145
  if {k} is not None:
141
- {k}_p = {k}._create_imposters()
142
- check_exists_and_rename({k}_p, Path("/root") / {k}_p.name)
143
- wf_paths[{k}] = Path("/root") / {k}_p.name
146
+ {k}_p = Path("/root/").resolve() # superhack
147
+ wf_paths[{k}] = {k}_p
144
148
 
145
149
  """,
146
150
  1,
@@ -167,17 +171,24 @@ class NextflowProcessTask(NextflowBaseTask):
167
171
 
168
172
  download_files(channel_vals, LatchDir({repr(self.wf.output_directory.remote_path)}))
169
173
 
170
- subprocess.run(
171
- [{','.join([f"str({x})" if x.startswith("wf_") else repr(x) for x in run_task_entrypoint])}],
172
- env={{
173
- **os.environ,
174
- "LATCH_INCLUDE_META": {repr(include_str)},
175
- "LATCH_EXPRESSION": {repr(self.statement)},
176
- "LATCH_RETURN": {repr(json.dumps(self.ret))},
177
- "LATCH_PARAM_VALS": json.dumps(channel_vals),
178
- }},
179
- check=True,
180
- )
174
+ try:
175
+ subprocess.run(
176
+ [{','.join([f"str({x})" if x.startswith("wf_") else repr(x) for x in run_task_entrypoint])}],
177
+ env={{
178
+ **os.environ,
179
+ "LATCH_INCLUDE_META": {repr(include_str)},
180
+ "LATCH_EXPRESSION": {repr(self.statement)},
181
+ "LATCH_RETURN": {repr(json.dumps(self.ret))},
182
+ "LATCH_PARAM_VALS": json.dumps(channel_vals),
183
+ }},
184
+ check=True,
185
+ )
186
+ except subprocess.CalledProcessError:
187
+ log = Path("/root/.nextflow.log").read_text()
188
+ print("\n\n\n\n\n" + log)
189
+
190
+ import time
191
+ time.sleep(10000)
181
192
 
182
193
  out_channels = {{}}
183
194
  files = [Path(f) for f in glob.glob(".latch/task-outputs/*.json")]
@@ -405,6 +405,12 @@ def execute(
405
405
  default=False,
406
406
  help="Redownload external Nextflow dependencies",
407
407
  )
408
+ @click.option(
409
+ "--execution-profile",
410
+ type=str,
411
+ default=None,
412
+ help="Set execution profile for Nextflow workflow",
413
+ )
408
414
  def register(
409
415
  pkg_root: str,
410
416
  disable_auto_version: bool,
@@ -416,6 +422,7 @@ def register(
416
422
  cache_tasks: bool,
417
423
  nf_script: Optional[Path],
418
424
  redownload_dependencies: bool,
425
+ execution_profile: Optional[str],
419
426
  ):
420
427
  """Register local workflow code to Latch.
421
428
 
@@ -438,6 +445,7 @@ def register(
438
445
  snakefile=snakefile,
439
446
  nf_script=nf_script,
440
447
  nf_redownload_dependencies=redownload_dependencies,
448
+ nf_execution_profile=execution_profile,
441
449
  progress_plain=(docker_progress == "auto" and not sys.stdout.isatty())
442
450
  or docker_progress == "plain",
443
451
  use_new_centromere=use_new_centromere,
@@ -275,6 +275,7 @@ def register(
275
275
  snakefile: Optional[Path] = None,
276
276
  nf_script: Optional[Path] = None,
277
277
  nf_redownload_dependencies: bool = False,
278
+ nf_execution_profile: Optional[str] = None,
278
279
  progress_plain: bool = False,
279
280
  cache_tasks: bool = False,
280
281
  use_new_centromere: bool = False,
@@ -420,6 +421,7 @@ def register(
420
421
  ctx.pkg_root,
421
422
  ctx.nf_script,
422
423
  redownload_dependencies=nf_redownload_dependencies,
424
+ execution_profile=nf_execution_profile,
423
425
  )
424
426
  generate_nf_entrypoint(nf_wf, ctx.pkg_root, ctx.nf_script)
425
427
 
@@ -13,7 +13,7 @@ if cur_ver < (3, 8) or cur_ver > (3, 11):
13
13
 
14
14
  setup(
15
15
  name="latch",
16
- version="v2.39.0.dev18",
16
+ version="v2.39.0.dev20",
17
17
  author_email="kenny@latch.bio",
18
18
  description="The Latch SDK",
19
19
  packages=find_packages(),
File without changes
File without changes
File without changes
File without changes