latch 2.51.2__tar.gz → 2.51.2.dev2__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 (184) hide show
  1. {latch-2.51.2/latch.egg-info → latch-2.51.2.dev2}/PKG-INFO +1 -1
  2. {latch-2.51.2 → latch-2.51.2.dev2/latch.egg-info}/PKG-INFO +1 -1
  3. {latch-2.51.2 → latch-2.51.2.dev2}/latch.egg-info/SOURCES.txt +11 -0
  4. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/menus.py +57 -10
  5. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/execute/main.py +4 -10
  6. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/get_executions.py +13 -17
  7. latch-2.51.2.dev2/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
  8. latch-2.51.2.dev2/latch_cli/services/init/__pycache__/__init__.cpython-311.pyc +0 -0
  9. latch-2.51.2.dev2/latch_cli/services/init/__pycache__/__init__.cpython-38.pyc +0 -0
  10. latch-2.51.2.dev2/latch_cli/services/init/__pycache__/__init__.cpython-39.pyc +0 -0
  11. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/__pycache__/init.cpython-310.pyc +0 -0
  12. latch-2.51.2.dev2/latch_cli/services/init/__pycache__/init.cpython-311.pyc +0 -0
  13. latch-2.51.2.dev2/latch_cli/services/init/__pycache__/init.cpython-38.pyc +0 -0
  14. latch-2.51.2.dev2/latch_cli/services/init/__pycache__/init.cpython-39.pyc +0 -0
  15. latch-2.51.2.dev2/latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc +0 -0
  16. latch-2.51.2.dev2/latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc +0 -0
  17. latch-2.51.2.dev2/latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc +0 -0
  18. latch-2.51.2.dev2/latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc +0 -0
  19. latch-2.51.2.dev2/latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc +0 -0
  20. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/local_dev_old.py +2 -5
  21. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/preview.py +4 -9
  22. {latch-2.51.2 → latch-2.51.2.dev2}/setup.py +1 -1
  23. latch-2.51.2/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
  24. {latch-2.51.2 → latch-2.51.2.dev2}/LICENSE +0 -0
  25. {latch-2.51.2 → latch-2.51.2.dev2}/MANIFEST.in +0 -0
  26. {latch-2.51.2 → latch-2.51.2.dev2}/README.md +0 -0
  27. {latch-2.51.2 → latch-2.51.2.dev2}/latch/__init__.py +0 -0
  28. {latch-2.51.2 → latch-2.51.2.dev2}/latch/account.py +0 -0
  29. {latch-2.51.2 → latch-2.51.2.dev2}/latch/executions.py +0 -0
  30. {latch-2.51.2 → latch-2.51.2.dev2}/latch/functions/__init__.py +0 -0
  31. {latch-2.51.2 → latch-2.51.2.dev2}/latch/functions/messages.py +0 -0
  32. {latch-2.51.2 → latch-2.51.2.dev2}/latch/functions/operators.py +0 -0
  33. {latch-2.51.2 → latch-2.51.2.dev2}/latch/functions/secrets.py +0 -0
  34. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/__init__.py +0 -0
  35. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/__init__.py +0 -0
  36. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/download.py +0 -0
  37. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/manager.py +0 -0
  38. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/node.py +0 -0
  39. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/progress.py +0 -0
  40. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/remote_copy.py +0 -0
  41. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/throttle.py +0 -0
  42. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/upload.py +0 -0
  43. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/_transfer/utils.py +0 -0
  44. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/path.py +0 -0
  45. {latch-2.51.2 → latch-2.51.2.dev2}/latch/ldata/type.py +0 -0
  46. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/__init__.py +0 -0
  47. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/project.py +0 -0
  48. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/record.py +0 -0
  49. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/table.py +0 -0
  50. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/types.py +0 -0
  51. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/upstream_types/__init__.py +0 -0
  52. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/upstream_types/types.py +0 -0
  53. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/upstream_types/values.py +0 -0
  54. {latch-2.51.2 → latch-2.51.2.dev2}/latch/registry/utils.py +0 -0
  55. {latch-2.51.2 → latch-2.51.2.dev2}/latch/resources/__init__.py +0 -0
  56. {latch-2.51.2 → latch-2.51.2.dev2}/latch/resources/conditional.py +0 -0
  57. {latch-2.51.2 → latch-2.51.2.dev2}/latch/resources/dynamic.py +0 -0
  58. {latch-2.51.2 → latch-2.51.2.dev2}/latch/resources/launch_plan.py +0 -0
  59. {latch-2.51.2 → latch-2.51.2.dev2}/latch/resources/map_tasks.py +0 -0
  60. {latch-2.51.2 → latch-2.51.2.dev2}/latch/resources/reference_workflow.py +0 -0
  61. {latch-2.51.2 → latch-2.51.2.dev2}/latch/resources/tasks.py +0 -0
  62. {latch-2.51.2 → latch-2.51.2.dev2}/latch/resources/workflow.py +0 -0
  63. {latch-2.51.2 → latch-2.51.2.dev2}/latch/types/__init__.py +0 -0
  64. {latch-2.51.2 → latch-2.51.2.dev2}/latch/types/directory.py +0 -0
  65. {latch-2.51.2 → latch-2.51.2.dev2}/latch/types/file.py +0 -0
  66. {latch-2.51.2 → latch-2.51.2.dev2}/latch/types/glob.py +0 -0
  67. {latch-2.51.2 → latch-2.51.2.dev2}/latch/types/json.py +0 -0
  68. {latch-2.51.2 → latch-2.51.2.dev2}/latch/types/metadata.py +0 -0
  69. {latch-2.51.2 → latch-2.51.2.dev2}/latch/types/utils.py +0 -0
  70. {latch-2.51.2 → latch-2.51.2.dev2}/latch/utils.py +0 -0
  71. {latch-2.51.2 → latch-2.51.2.dev2}/latch/verified/__init__.py +0 -0
  72. {latch-2.51.2 → latch-2.51.2.dev2}/latch/verified/deseq2.py +0 -0
  73. {latch-2.51.2 → latch-2.51.2.dev2}/latch/verified/mafft.py +0 -0
  74. {latch-2.51.2 → latch-2.51.2.dev2}/latch/verified/pathway.py +0 -0
  75. {latch-2.51.2 → latch-2.51.2.dev2}/latch/verified/rnaseq.py +0 -0
  76. {latch-2.51.2 → latch-2.51.2.dev2}/latch/verified/trim_galore.py +0 -0
  77. {latch-2.51.2 → latch-2.51.2.dev2}/latch.egg-info/dependency_links.txt +0 -0
  78. {latch-2.51.2 → latch-2.51.2.dev2}/latch.egg-info/entry_points.txt +0 -0
  79. {latch-2.51.2 → latch-2.51.2.dev2}/latch.egg-info/requires.txt +0 -0
  80. {latch-2.51.2 → latch-2.51.2.dev2}/latch.egg-info/top_level.txt +0 -0
  81. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/__init__.py +0 -0
  82. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/auth/__init__.py +0 -0
  83. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/auth/csrf.py +0 -0
  84. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/auth/oauth2.py +0 -0
  85. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/auth/pkce.py +0 -0
  86. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/auth/utils.py +0 -0
  87. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/centromere/__init__.py +0 -0
  88. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/centromere/ctx.py +0 -0
  89. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/centromere/utils.py +0 -0
  90. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/click_utils.py +0 -0
  91. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/constants.py +0 -0
  92. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/docker_utils/__init__.py +0 -0
  93. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/exceptions/__init__.py +0 -0
  94. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/exceptions/cache.py +0 -0
  95. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/exceptions/errors.py +0 -0
  96. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/exceptions/handler.py +0 -0
  97. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/exceptions/traceback.py +0 -0
  98. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/main.py +0 -0
  99. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/nextflow/__init__.py +0 -0
  100. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/nextflow/config.py +0 -0
  101. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/nextflow/utils.py +0 -0
  102. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/nextflow/workflow.py +0 -0
  103. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/__init__.py +0 -0
  104. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/cp/__init__.py +0 -0
  105. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/cp/autocomplete.py +0 -0
  106. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/cp/glob.py +0 -0
  107. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/cp/main.py +0 -0
  108. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/cp/utils.py +0 -0
  109. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/execute/__init__.py +0 -0
  110. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/execute/utils.py +0 -0
  111. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/get.py +0 -0
  112. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/get_params.py +0 -0
  113. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/__init__.py +0 -0
  114. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/assemble_and_sort/.env +0 -0
  115. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/assemble_and_sort/LICENSE +0 -0
  116. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/assemble_and_sort/README.md +0 -0
  117. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/assemble_and_sort/__init__.py +0 -0
  118. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/assemble_and_sort/assemble.py +0 -0
  119. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/assemble_and_sort/sort.py +0 -0
  120. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/assemble_and_sort/system-requirements.txt +0 -0
  121. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/common/.dockerignore +0 -0
  122. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_conda/__init__.py +0 -0
  123. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_conda/conda_task.py +0 -0
  124. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_conda/environment.yaml +0 -0
  125. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_docker/__init__.py +0 -0
  126. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_docker/task.py +0 -0
  127. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_nfcore/Dockerfile +0 -0
  128. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_nfcore/__init__.py +0 -0
  129. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_nfcore/task.py +0 -0
  130. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_r/__init__.py +0 -0
  131. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_r/environment.R +0 -0
  132. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_r/r_task.py +0 -0
  133. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_snakemake/.latch/latch_entrypoint +0 -0
  134. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_snakemake/Dockerfile +0 -0
  135. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_snakemake/Snakefile +0 -0
  136. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_snakemake/config.yaml +0 -0
  137. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_snakemake/environment.yaml +0 -0
  138. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_snakemake/latch_metadata.py +0 -0
  139. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_snakemake/scripts/plot-quals.py +0 -0
  140. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/example_snakemake/version +0 -0
  141. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/init.py +0 -0
  142. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/template/LICENSE +0 -0
  143. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/template/README.md +0 -0
  144. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/template/__init__.py +0 -0
  145. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/init/template/task.py +0 -0
  146. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/launch.py +0 -0
  147. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/local_dev.py +0 -0
  148. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/login.py +0 -0
  149. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/ls.py +0 -0
  150. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/mkdir.py +0 -0
  151. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/move.py +0 -0
  152. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/register/__init__.py +0 -0
  153. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/register/constants.py +0 -0
  154. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/register/register.py +0 -0
  155. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/register/utils.py +0 -0
  156. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/rm.py +0 -0
  157. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/stop_pod.py +0 -0
  158. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/sync.py +0 -0
  159. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/test_data/__init__.py +0 -0
  160. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/test_data/ls.py +0 -0
  161. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/test_data/remove.py +0 -0
  162. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/test_data/upload.py +0 -0
  163. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/test_data/utils.py +0 -0
  164. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/services/workspace.py +0 -0
  165. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/__init__.py +0 -0
  166. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/config/__init__.py +0 -0
  167. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/config/parser.py +0 -0
  168. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/config/utils.py +0 -0
  169. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/serialize.py +0 -0
  170. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/serialize_utils.py +0 -0
  171. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/single_task_snakemake.py +0 -0
  172. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/utils.py +0 -0
  173. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/snakemake/workflow.py +0 -0
  174. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/tinyrequests.py +0 -0
  175. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/tui/__init__.py +0 -0
  176. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/utils/__init__.py +0 -0
  177. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/utils/path.py +0 -0
  178. {latch-2.51.2 → latch-2.51.2.dev2}/latch_cli/workflow_config.py +0 -0
  179. {latch-2.51.2 → latch-2.51.2.dev2}/pyproject.toml +0 -0
  180. {latch-2.51.2 → latch-2.51.2.dev2}/setup.cfg +0 -0
  181. {latch-2.51.2 → latch-2.51.2.dev2}/tests/__init__.py +0 -0
  182. {latch-2.51.2 → latch-2.51.2.dev2}/tests/cp/__init__.py +0 -0
  183. {latch-2.51.2 → latch-2.51.2.dev2}/tests/fixtures.py +0 -0
  184. {latch-2.51.2 → latch-2.51.2.dev2}/tests/test_ls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: latch
3
- Version: 2.51.2
3
+ Version: 2.51.2.dev2
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.51.2
3
+ Version: 2.51.2.dev2
4
4
  Summary: The Latch SDK
5
5
  Author-email: kenny@latch.bio
6
6
  Classifier: Programming Language :: Python :: 3.8
@@ -111,7 +111,13 @@ latch_cli/services/execute/utils.py
111
111
  latch_cli/services/init/__init__.py
112
112
  latch_cli/services/init/init.py
113
113
  latch_cli/services/init/__pycache__/__init__.cpython-310.pyc
114
+ latch_cli/services/init/__pycache__/__init__.cpython-311.pyc
115
+ latch_cli/services/init/__pycache__/__init__.cpython-38.pyc
116
+ latch_cli/services/init/__pycache__/__init__.cpython-39.pyc
114
117
  latch_cli/services/init/__pycache__/init.cpython-310.pyc
118
+ latch_cli/services/init/__pycache__/init.cpython-311.pyc
119
+ latch_cli/services/init/__pycache__/init.cpython-38.pyc
120
+ latch_cli/services/init/__pycache__/init.cpython-39.pyc
115
121
  latch_cli/services/init/assemble_and_sort/.env
116
122
  latch_cli/services/init/assemble_and_sort/LICENSE
117
123
  latch_cli/services/init/assemble_and_sort/README.md
@@ -119,18 +125,22 @@ latch_cli/services/init/assemble_and_sort/__init__.py
119
125
  latch_cli/services/init/assemble_and_sort/assemble.py
120
126
  latch_cli/services/init/assemble_and_sort/sort.py
121
127
  latch_cli/services/init/assemble_and_sort/system-requirements.txt
128
+ latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc
122
129
  latch_cli/services/init/common/.dockerignore
123
130
  latch_cli/services/init/example_conda/__init__.py
124
131
  latch_cli/services/init/example_conda/conda_task.py
125
132
  latch_cli/services/init/example_conda/environment.yaml
133
+ latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc
126
134
  latch_cli/services/init/example_docker/__init__.py
127
135
  latch_cli/services/init/example_docker/task.py
136
+ latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc
128
137
  latch_cli/services/init/example_nfcore/Dockerfile
129
138
  latch_cli/services/init/example_nfcore/__init__.py
130
139
  latch_cli/services/init/example_nfcore/task.py
131
140
  latch_cli/services/init/example_r/__init__.py
132
141
  latch_cli/services/init/example_r/environment.R
133
142
  latch_cli/services/init/example_r/r_task.py
143
+ latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc
134
144
  latch_cli/services/init/example_snakemake/Dockerfile
135
145
  latch_cli/services/init/example_snakemake/Snakefile
136
146
  latch_cli/services/init/example_snakemake/config.yaml
@@ -143,6 +153,7 @@ latch_cli/services/init/template/LICENSE
143
153
  latch_cli/services/init/template/README.md
144
154
  latch_cli/services/init/template/__init__.py
145
155
  latch_cli/services/init/template/task.py
156
+ latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc
146
157
  latch_cli/services/register/__init__.py
147
158
  latch_cli/services/register/constants.py
148
159
  latch_cli/services/register/register.py
@@ -1,13 +1,66 @@
1
1
  import os
2
2
  import sys
3
- import termios
4
- import tty
3
+ from functools import wraps
5
4
  from typing import Any, Callable, Generic, List, Optional, Tuple, TypeVar
6
5
 
7
- from typing_extensions import TypedDict
6
+ from typing_extensions import ParamSpec, TypedDict
8
7
 
9
8
  from latch_cli.click_utils import AnsiCodes
10
9
 
10
+ P = ParamSpec("P")
11
+ T = TypeVar("T")
12
+
13
+
14
+ def raw_input_if_available(f: Callable[P, T]) -> Callable[P, T]:
15
+ if sys.platform == "win32":
16
+
17
+ @wraps(f)
18
+ def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
19
+ try:
20
+ from ctypes import pointer, windll
21
+ from ctypes.wintypes import DWORD, HANDLE
22
+ except ImportError:
23
+ return f(*args, **kwargs)
24
+
25
+ original_mode = DWORD()
26
+ handle = HANDLE(windll.kernel32.GetStdHandle(STD_INPUT_HANDLE))
27
+ windll.kernel32.GetConsoleMode(handle, pointer(original_mode))
28
+
29
+ ENABLE_ECHO_INPUT = 0x0004
30
+ ENABLE_LINE_INPUT = 0x0002
31
+ ENABLE_PROCESSED_INPUT = 0x0001
32
+
33
+ windll.kernel32.SetConsoleMode(
34
+ handle,
35
+ original_mode.value
36
+ & ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT),
37
+ )
38
+
39
+ try:
40
+ return f(*args, **kwargs)
41
+ finally:
42
+ windll.kernel32.SetConsoleMode(handle, original_mode)
43
+
44
+ else:
45
+
46
+ @wraps(f)
47
+ def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
48
+ try:
49
+ import termios
50
+ import tty
51
+ except ImportError:
52
+ return f(*args, **kwargs)
53
+
54
+ old_settings = termios.tcgetattr(sys.stdin.fileno())
55
+ tty.setraw(sys.stdin.fileno())
56
+
57
+ try:
58
+ return f(*args, **kwargs)
59
+ finally:
60
+ termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings)
61
+
62
+ return wrapper
63
+
11
64
 
12
65
  def buffered_print() -> Tuple[Callable, Callable]:
13
66
  buffer = []
@@ -196,14 +249,12 @@ def read_bytes(num_bytes: int) -> bytes:
196
249
  return result
197
250
 
198
251
 
199
- T = TypeVar("T")
200
-
201
-
202
252
  class SelectOption(TypedDict, Generic[T]):
203
253
  display_name: str
204
254
  value: T
205
255
 
206
256
 
257
+ @raw_input_if_available
207
258
  def select_tui(
208
259
  title: str, options: List[SelectOption[T]], clear_terminal: bool = True
209
260
  ) -> Optional[T]:
@@ -261,9 +312,6 @@ def select_tui(
261
312
 
262
313
  return num_lines_rendered
263
314
 
264
- old_settings = termios.tcgetattr(sys.stdin.fileno())
265
- tty.setraw(sys.stdin.fileno())
266
-
267
315
  curr_selected = 0
268
316
  start_index = 0
269
317
  _, term_height = os.get_terminal_size()
@@ -319,4 +367,3 @@ def select_tui(
319
367
  clear(num_lines_rendered)
320
368
  reveal_cursor()
321
369
  _show()
322
- termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings)
@@ -4,15 +4,14 @@ import json
4
4
  import os
5
5
  import signal
6
6
  import sys
7
- import termios
8
- import tty
9
- from typing import Generic, Literal, Optional, Tuple, TypedDict, TypeVar, Union
7
+ from typing import Literal, Optional, TypedDict, Union
10
8
  from urllib.parse import urljoin, urlparse
11
9
 
12
10
  import websockets.client as websockets
13
11
  from latch_sdk_config.latch import NUCLEUS_URL
14
12
  from typing_extensions import TypeAlias
15
13
 
14
+ from latch_cli.menus import raw_input_if_available
16
15
  from latch_cli.services.execute.utils import (
17
16
  ContainerNode,
18
17
  EGNNode,
@@ -174,6 +173,7 @@ async def connect(egn_info: EGNNode, container_info: Optional[ContainerNode]):
174
173
  pass
175
174
 
176
175
 
176
+ @raw_input_if_available
177
177
  def exec(
178
178
  execution_id: Optional[str] = None,
179
179
  egn_id: Optional[str] = None,
@@ -186,10 +186,4 @@ def exec(
186
186
  egn_info = get_egn_info(execution_info, egn_id)
187
187
  container_info = get_container_info(egn_info, container_index)
188
188
 
189
- old_settings_stdin = termios.tcgetattr(sys.stdin.fileno())
190
- tty.setraw(sys.stdin)
191
-
192
- try:
193
- asyncio.run(connect(egn_info, container_info))
194
- finally:
195
- termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings_stdin)
189
+ asyncio.run(connect(egn_info, container_info))
@@ -1,8 +1,5 @@
1
1
  import os
2
- import sys
3
- import termios
4
2
  import textwrap
5
- import tty
6
3
  from pathlib import Path
7
4
  from typing import Dict, List
8
5
 
@@ -50,12 +47,10 @@ def get_executions():
50
47
  ]
51
48
 
52
49
  for execution_data in sorted(data.values(), key=lambda x: -int(x["id"])):
53
- options.append(
54
- {
55
- **execution_data,
56
- "workflow_tagged": f'{execution_data["workflow_name"]}/{execution_data["workflow_version"]}',
57
- }
58
- )
50
+ options.append({
51
+ **execution_data,
52
+ "workflow_tagged": f'{execution_data["workflow_name"]}/{execution_data["workflow_version"]}',
53
+ })
59
54
 
60
55
  _all_executions(
61
56
  title="All Executions",
@@ -64,6 +59,7 @@ def get_executions():
64
59
  )
65
60
 
66
61
 
62
+ @menus.raw_input_if_available
67
63
  def _all_executions(
68
64
  title: str,
69
65
  column_names: List[str],
@@ -142,9 +138,6 @@ def _all_executions(
142
138
  menus._show()
143
139
  return max_row_len
144
140
 
145
- old_settings = termios.tcgetattr(sys.stdin.fileno())
146
- tty.setraw(sys.stdin.fileno())
147
-
148
141
  curr_selected = hor_index = 0
149
142
 
150
143
  menus.remove_cursor()
@@ -223,13 +216,13 @@ def _all_executions(
223
216
  prev = (curr_selected, hor_index, term_width, term_height)
224
217
  menus.clear_screen()
225
218
  max_row_len = render(curr_selected, hor_index, term_width, term_height)
226
- except KeyboardInterrupt: ...
219
+ except KeyboardInterrupt:
220
+ ...
227
221
  finally:
228
222
  menus.clear_screen()
229
223
  menus.reveal_cursor()
230
224
  menus.move_cursor((0, 0))
231
225
  menus._show()
232
- termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings)
233
226
 
234
227
 
235
228
  def _execution_dashboard(execution_data: Dict[str, str], workflow_graph: Dict):
@@ -316,7 +309,8 @@ def _execution_dashboard(execution_data: Dict[str, str], workflow_graph: Dict):
316
309
  menus.clear_screen()
317
310
  prev = (curr_selected, term_width, term_height)
318
311
  render(curr_selected, term_width, term_height)
319
- except KeyboardInterrupt: ...
312
+ except KeyboardInterrupt:
313
+ ...
320
314
  finally:
321
315
  menus.clear_screen()
322
316
  menus.move_cursor((0, 0))
@@ -452,7 +446,8 @@ def _log_window(execution_data, fixed_workflow_graph: list, selected: int):
452
446
  menus.clear_screen()
453
447
  prev_term_dims = (vert_index, hor_index, term_width, term_height)
454
448
  render(vert_index, hor_index, term_width, term_height)
455
- except KeyboardInterrupt: ...
449
+ except KeyboardInterrupt:
450
+ ...
456
451
  finally:
457
452
  log_sched.shutdown()
458
453
  log_file.unlink(missing_ok=True)
@@ -513,7 +508,8 @@ def _abort_modal(execution_data):
513
508
  if prev_term_dims != (term_width, term_height):
514
509
  prev_term_dims = (term_width, term_height)
515
510
  render(term_width, term_height)
516
- except KeyboardInterrupt: ...
511
+ except KeyboardInterrupt:
512
+ ...
517
513
  finally:
518
514
  menus.clear_screen()
519
515
  menus.move_cursor((0, 0))
@@ -4,10 +4,8 @@ import os
4
4
  import signal
5
5
  import subprocess
6
6
  import sys
7
- import termios
8
7
  import time
9
8
  import traceback
10
- import tty
11
9
  from enum import Enum
12
10
  from http.client import HTTPException
13
11
  from pathlib import Path
@@ -25,6 +23,7 @@ from watchfiles import awatch
25
23
 
26
24
  from latch.utils import current_workspace, retrieve_or_login
27
25
  from latch_cli.constants import docker_image_name_illegal_pat
26
+ from latch_cli.menus import raw_input_if_available
28
27
  from latch_cli.tinyrequests import post
29
28
  from latch_cli.utils import TemporarySSHCredentials, identifier_suffix_from_str
30
29
 
@@ -253,11 +252,10 @@ async def _send_resize_message(
253
252
  )
254
253
 
255
254
 
255
+ @raw_input_if_available
256
256
  async def _shell_session(
257
257
  ws: client.WebSocketClientProtocol,
258
258
  ):
259
- old_settings_stdin = termios.tcgetattr(sys.stdin.fileno())
260
- tty.setraw(sys.stdin)
261
259
 
262
260
  loop = asyncio.get_event_loop()
263
261
  reader = asyncio.StreamReader(loop=loop)
@@ -332,7 +330,6 @@ async def _shell_session(
332
330
  except asyncio.CancelledError:
333
331
  ...
334
332
  finally:
335
- termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings_stdin)
336
333
  signal.signal(signal.SIGWINCH, old_sigwinch_handler)
337
334
 
338
335
 
@@ -1,7 +1,4 @@
1
1
  import os
2
- import sys
3
- import termios
4
- import tty
5
2
  import webbrowser
6
3
  from pathlib import Path
7
4
  from typing import List
@@ -72,7 +69,8 @@ def preview(pkg_root: Path):
72
69
  webbrowser.open(url)
73
70
 
74
71
 
75
- # TODO(ayush): abstract this logic in a unified interface that all tui commands use
72
+ # todo(ayush): abstract this logic in a unified interface that all tui commands use
73
+ @menus.raw_input_if_available
76
74
  def _select_workflow_tui(title: str, options: List[str], clear_terminal: bool = True):
77
75
  """
78
76
  Renders a terminal UI that allows users to select one of the options
@@ -125,9 +123,6 @@ def _select_workflow_tui(title: str, options: List[str], clear_terminal: bool =
125
123
 
126
124
  return num_lines_rendered
127
125
 
128
- old_settings = termios.tcgetattr(sys.stdin.fileno())
129
- tty.setraw(sys.stdin.fileno())
130
-
131
126
  curr_selected = 0
132
127
  start_index = 0
133
128
  _, term_height = os.get_terminal_size()
@@ -176,9 +171,9 @@ def _select_workflow_tui(title: str, options: List[str], clear_terminal: bool =
176
171
  start_index=start_index,
177
172
  max_per_page=max_per_page,
178
173
  )
179
- except KeyboardInterrupt: ...
174
+ except KeyboardInterrupt:
175
+ ...
180
176
  finally:
181
177
  menus.clear(num_lines_rendered)
182
178
  menus.reveal_cursor()
183
179
  menus._show()
184
- termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings)
@@ -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.51.2",
16
+ version="v2.51.2.dev2",
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes