latch 2.52.1.dev2__tar.gz → 2.52.2__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 (189) hide show
  1. {latch-2.52.1.dev2/latch.egg-info → latch-2.52.2}/PKG-INFO +1 -1
  2. {latch-2.52.1.dev2 → latch-2.52.2/latch.egg-info}/PKG-INFO +1 -1
  3. {latch-2.52.1.dev2 → latch-2.52.2}/latch.egg-info/SOURCES.txt +2 -16
  4. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/constants.py +1 -1
  5. latch-2.52.1.dev2/latch_cli/menus/vt100.py → latch-2.52.2/latch_cli/menus.py +72 -50
  6. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/execute/main.py +11 -4
  7. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/get_executions.py +79 -80
  8. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/get_params.py +8 -1
  9. latch-2.52.2/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
  10. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/__pycache__/init.cpython-310.pyc +0 -0
  11. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/launch.py +0 -1
  12. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/local_dev_old.py +6 -2
  13. latch-2.52.2/latch_cli/services/preview.py +186 -0
  14. {latch-2.52.1.dev2 → latch-2.52.2}/setup.py +1 -1
  15. latch-2.52.2/tests/__init__.py +0 -0
  16. latch-2.52.1.dev2/latch_cli/menus/__init__.py +0 -8
  17. latch-2.52.1.dev2/latch_cli/menus/common.py +0 -37
  18. latch-2.52.1.dev2/latch_cli/menus/win32.py +0 -422
  19. latch-2.52.1.dev2/latch_cli/menus/win32_types.py +0 -232
  20. latch-2.52.1.dev2/latch_cli/services/init/__pycache__/__init__.cpython-310.pyc +0 -0
  21. latch-2.52.1.dev2/latch_cli/services/init/__pycache__/__init__.cpython-311.pyc +0 -0
  22. latch-2.52.1.dev2/latch_cli/services/init/__pycache__/__init__.cpython-38.pyc +0 -0
  23. latch-2.52.1.dev2/latch_cli/services/init/__pycache__/__init__.cpython-39.pyc +0 -0
  24. latch-2.52.1.dev2/latch_cli/services/init/__pycache__/init.cpython-311.pyc +0 -0
  25. latch-2.52.1.dev2/latch_cli/services/init/__pycache__/init.cpython-38.pyc +0 -0
  26. latch-2.52.1.dev2/latch_cli/services/init/__pycache__/init.cpython-39.pyc +0 -0
  27. latch-2.52.1.dev2/latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc +0 -0
  28. latch-2.52.1.dev2/latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc +0 -0
  29. latch-2.52.1.dev2/latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc +0 -0
  30. latch-2.52.1.dev2/latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc +0 -0
  31. latch-2.52.1.dev2/latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc +0 -0
  32. latch-2.52.1.dev2/latch_cli/services/preview.py +0 -70
  33. {latch-2.52.1.dev2 → latch-2.52.2}/LICENSE +0 -0
  34. {latch-2.52.1.dev2 → latch-2.52.2}/MANIFEST.in +0 -0
  35. {latch-2.52.1.dev2 → latch-2.52.2}/README.md +0 -0
  36. {latch-2.52.1.dev2 → latch-2.52.2}/latch/__init__.py +0 -0
  37. {latch-2.52.1.dev2 → latch-2.52.2}/latch/account.py +0 -0
  38. {latch-2.52.1.dev2 → latch-2.52.2}/latch/executions.py +0 -0
  39. {latch-2.52.1.dev2 → latch-2.52.2}/latch/functions/__init__.py +0 -0
  40. {latch-2.52.1.dev2 → latch-2.52.2}/latch/functions/messages.py +0 -0
  41. {latch-2.52.1.dev2 → latch-2.52.2}/latch/functions/operators.py +0 -0
  42. {latch-2.52.1.dev2 → latch-2.52.2}/latch/functions/secrets.py +0 -0
  43. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/__init__.py +0 -0
  44. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/__init__.py +0 -0
  45. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/download.py +0 -0
  46. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/manager.py +0 -0
  47. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/node.py +0 -0
  48. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/progress.py +0 -0
  49. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/remote_copy.py +0 -0
  50. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/throttle.py +0 -0
  51. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/upload.py +0 -0
  52. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/_transfer/utils.py +0 -0
  53. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/path.py +0 -0
  54. {latch-2.52.1.dev2 → latch-2.52.2}/latch/ldata/type.py +0 -0
  55. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/__init__.py +0 -0
  56. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/project.py +0 -0
  57. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/record.py +0 -0
  58. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/table.py +0 -0
  59. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/types.py +0 -0
  60. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/upstream_types/__init__.py +0 -0
  61. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/upstream_types/types.py +0 -0
  62. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/upstream_types/values.py +0 -0
  63. {latch-2.52.1.dev2 → latch-2.52.2}/latch/registry/utils.py +0 -0
  64. {latch-2.52.1.dev2 → latch-2.52.2}/latch/resources/__init__.py +0 -0
  65. {latch-2.52.1.dev2 → latch-2.52.2}/latch/resources/conditional.py +0 -0
  66. {latch-2.52.1.dev2 → latch-2.52.2}/latch/resources/dynamic.py +0 -0
  67. {latch-2.52.1.dev2 → latch-2.52.2}/latch/resources/launch_plan.py +0 -0
  68. {latch-2.52.1.dev2 → latch-2.52.2}/latch/resources/map_tasks.py +0 -0
  69. {latch-2.52.1.dev2 → latch-2.52.2}/latch/resources/reference_workflow.py +0 -0
  70. {latch-2.52.1.dev2 → latch-2.52.2}/latch/resources/tasks.py +0 -0
  71. {latch-2.52.1.dev2 → latch-2.52.2}/latch/resources/workflow.py +0 -0
  72. {latch-2.52.1.dev2 → latch-2.52.2}/latch/types/__init__.py +0 -0
  73. {latch-2.52.1.dev2 → latch-2.52.2}/latch/types/directory.py +0 -0
  74. {latch-2.52.1.dev2 → latch-2.52.2}/latch/types/file.py +0 -0
  75. {latch-2.52.1.dev2 → latch-2.52.2}/latch/types/glob.py +0 -0
  76. {latch-2.52.1.dev2 → latch-2.52.2}/latch/types/json.py +0 -0
  77. {latch-2.52.1.dev2 → latch-2.52.2}/latch/types/metadata.py +0 -0
  78. {latch-2.52.1.dev2 → latch-2.52.2}/latch/types/utils.py +0 -0
  79. {latch-2.52.1.dev2 → latch-2.52.2}/latch/utils.py +0 -0
  80. {latch-2.52.1.dev2 → latch-2.52.2}/latch/verified/__init__.py +0 -0
  81. {latch-2.52.1.dev2 → latch-2.52.2}/latch/verified/deseq2.py +0 -0
  82. {latch-2.52.1.dev2 → latch-2.52.2}/latch/verified/mafft.py +0 -0
  83. {latch-2.52.1.dev2 → latch-2.52.2}/latch/verified/pathway.py +0 -0
  84. {latch-2.52.1.dev2 → latch-2.52.2}/latch/verified/rnaseq.py +0 -0
  85. {latch-2.52.1.dev2 → latch-2.52.2}/latch/verified/trim_galore.py +0 -0
  86. {latch-2.52.1.dev2 → latch-2.52.2}/latch.egg-info/dependency_links.txt +0 -0
  87. {latch-2.52.1.dev2 → latch-2.52.2}/latch.egg-info/entry_points.txt +0 -0
  88. {latch-2.52.1.dev2 → latch-2.52.2}/latch.egg-info/requires.txt +0 -0
  89. {latch-2.52.1.dev2 → latch-2.52.2}/latch.egg-info/top_level.txt +0 -0
  90. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/__init__.py +0 -0
  91. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/auth/__init__.py +0 -0
  92. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/auth/csrf.py +0 -0
  93. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/auth/oauth2.py +0 -0
  94. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/auth/pkce.py +0 -0
  95. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/auth/utils.py +0 -0
  96. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/centromere/__init__.py +0 -0
  97. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/centromere/ctx.py +0 -0
  98. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/centromere/utils.py +0 -0
  99. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/click_utils.py +0 -0
  100. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/docker_utils/__init__.py +0 -0
  101. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/exceptions/__init__.py +0 -0
  102. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/exceptions/cache.py +0 -0
  103. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/exceptions/errors.py +0 -0
  104. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/exceptions/handler.py +0 -0
  105. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/exceptions/traceback.py +0 -0
  106. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/main.py +0 -0
  107. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/nextflow/__init__.py +0 -0
  108. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/nextflow/config.py +0 -0
  109. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/nextflow/utils.py +0 -0
  110. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/nextflow/workflow.py +0 -0
  111. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/__init__.py +0 -0
  112. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/cp/__init__.py +0 -0
  113. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/cp/autocomplete.py +0 -0
  114. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/cp/glob.py +0 -0
  115. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/cp/main.py +0 -0
  116. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/cp/utils.py +0 -0
  117. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/execute/__init__.py +0 -0
  118. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/execute/utils.py +0 -0
  119. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/get.py +0 -0
  120. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/__init__.py +0 -0
  121. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/assemble_and_sort/.env +0 -0
  122. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/assemble_and_sort/LICENSE +0 -0
  123. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/assemble_and_sort/README.md +0 -0
  124. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/assemble_and_sort/__init__.py +0 -0
  125. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/assemble_and_sort/assemble.py +0 -0
  126. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/assemble_and_sort/sort.py +0 -0
  127. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/assemble_and_sort/system-requirements.txt +0 -0
  128. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/common/.dockerignore +0 -0
  129. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_conda/__init__.py +0 -0
  130. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_conda/conda_task.py +0 -0
  131. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_conda/environment.yaml +0 -0
  132. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_docker/__init__.py +0 -0
  133. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_docker/task.py +0 -0
  134. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_nfcore/Dockerfile +0 -0
  135. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_nfcore/__init__.py +0 -0
  136. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_nfcore/task.py +0 -0
  137. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_r/__init__.py +0 -0
  138. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_r/environment.R +0 -0
  139. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_r/r_task.py +0 -0
  140. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_snakemake/.latch/latch_entrypoint +0 -0
  141. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_snakemake/Dockerfile +0 -0
  142. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_snakemake/Snakefile +0 -0
  143. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_snakemake/config.yaml +0 -0
  144. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_snakemake/environment.yaml +0 -0
  145. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_snakemake/latch_metadata.py +0 -0
  146. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_snakemake/scripts/plot-quals.py +0 -0
  147. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/example_snakemake/version +0 -0
  148. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/init.py +0 -0
  149. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/template/LICENSE +0 -0
  150. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/template/README.md +0 -0
  151. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/template/__init__.py +0 -0
  152. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/init/template/task.py +0 -0
  153. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/local_dev.py +0 -0
  154. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/login.py +0 -0
  155. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/ls.py +0 -0
  156. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/mkdir.py +0 -0
  157. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/move.py +0 -0
  158. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/register/__init__.py +0 -0
  159. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/register/constants.py +0 -0
  160. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/register/register.py +0 -0
  161. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/register/utils.py +0 -0
  162. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/rm.py +0 -0
  163. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/stop_pod.py +0 -0
  164. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/sync.py +0 -0
  165. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/test_data/__init__.py +0 -0
  166. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/test_data/ls.py +0 -0
  167. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/test_data/remove.py +0 -0
  168. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/test_data/upload.py +0 -0
  169. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/test_data/utils.py +0 -0
  170. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/services/workspace.py +0 -0
  171. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/__init__.py +0 -0
  172. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/config/__init__.py +0 -0
  173. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/config/parser.py +0 -0
  174. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/config/utils.py +0 -0
  175. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/serialize.py +0 -0
  176. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/serialize_utils.py +0 -0
  177. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/single_task_snakemake.py +0 -0
  178. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/utils.py +0 -0
  179. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/snakemake/workflow.py +0 -0
  180. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/tinyrequests.py +0 -0
  181. {latch-2.52.1.dev2/tests → latch-2.52.2/latch_cli/tui}/__init__.py +0 -0
  182. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/utils/__init__.py +0 -0
  183. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/utils/path.py +0 -0
  184. {latch-2.52.1.dev2 → latch-2.52.2}/latch_cli/workflow_config.py +0 -0
  185. {latch-2.52.1.dev2 → latch-2.52.2}/pyproject.toml +0 -0
  186. {latch-2.52.1.dev2 → latch-2.52.2}/setup.cfg +0 -0
  187. {latch-2.52.1.dev2 → latch-2.52.2}/tests/cp/__init__.py +0 -0
  188. {latch-2.52.1.dev2 → latch-2.52.2}/tests/fixtures.py +0 -0
  189. {latch-2.52.1.dev2 → latch-2.52.2}/tests/test_ls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: latch
3
- Version: 2.52.1.dev2
3
+ Version: 2.52.2
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.52.1.dev2
3
+ Version: 2.52.2
4
4
  Summary: The Latch SDK
5
5
  Author-email: kenny@latch.bio
6
6
  Classifier: Programming Language :: Python :: 3.8
@@ -63,6 +63,7 @@ latch_cli/__init__.py
63
63
  latch_cli/click_utils.py
64
64
  latch_cli/constants.py
65
65
  latch_cli/main.py
66
+ latch_cli/menus.py
66
67
  latch_cli/tinyrequests.py
67
68
  latch_cli/workflow_config.py
68
69
  latch_cli/auth/__init__.py
@@ -79,11 +80,6 @@ latch_cli/exceptions/cache.py
79
80
  latch_cli/exceptions/errors.py
80
81
  latch_cli/exceptions/handler.py
81
82
  latch_cli/exceptions/traceback.py
82
- latch_cli/menus/__init__.py
83
- latch_cli/menus/common.py
84
- latch_cli/menus/vt100.py
85
- latch_cli/menus/win32.py
86
- latch_cli/menus/win32_types.py
87
83
  latch_cli/nextflow/__init__.py
88
84
  latch_cli/nextflow/config.py
89
85
  latch_cli/nextflow/utils.py
@@ -115,13 +111,7 @@ latch_cli/services/execute/utils.py
115
111
  latch_cli/services/init/__init__.py
116
112
  latch_cli/services/init/init.py
117
113
  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
121
114
  latch_cli/services/init/__pycache__/init.cpython-310.pyc
122
- latch_cli/services/init/__pycache__/init.cpython-311.pyc
123
- latch_cli/services/init/__pycache__/init.cpython-38.pyc
124
- latch_cli/services/init/__pycache__/init.cpython-39.pyc
125
115
  latch_cli/services/init/assemble_and_sort/.env
126
116
  latch_cli/services/init/assemble_and_sort/LICENSE
127
117
  latch_cli/services/init/assemble_and_sort/README.md
@@ -129,22 +119,18 @@ latch_cli/services/init/assemble_and_sort/__init__.py
129
119
  latch_cli/services/init/assemble_and_sort/assemble.py
130
120
  latch_cli/services/init/assemble_and_sort/sort.py
131
121
  latch_cli/services/init/assemble_and_sort/system-requirements.txt
132
- latch_cli/services/init/assemble_and_sort/__pycache__/__init__.cpython-310.pyc
133
122
  latch_cli/services/init/common/.dockerignore
134
123
  latch_cli/services/init/example_conda/__init__.py
135
124
  latch_cli/services/init/example_conda/conda_task.py
136
125
  latch_cli/services/init/example_conda/environment.yaml
137
- latch_cli/services/init/example_conda/__pycache__/__init__.cpython-310.pyc
138
126
  latch_cli/services/init/example_docker/__init__.py
139
127
  latch_cli/services/init/example_docker/task.py
140
- latch_cli/services/init/example_nf_integration/latch_metadata/__pycache__/__init__.cpython-311.pyc
141
128
  latch_cli/services/init/example_nfcore/Dockerfile
142
129
  latch_cli/services/init/example_nfcore/__init__.py
143
130
  latch_cli/services/init/example_nfcore/task.py
144
131
  latch_cli/services/init/example_r/__init__.py
145
132
  latch_cli/services/init/example_r/environment.R
146
133
  latch_cli/services/init/example_r/r_task.py
147
- latch_cli/services/init/example_r/__pycache__/__init__.cpython-310.pyc
148
134
  latch_cli/services/init/example_snakemake/Dockerfile
149
135
  latch_cli/services/init/example_snakemake/Snakefile
150
136
  latch_cli/services/init/example_snakemake/config.yaml
@@ -157,7 +143,6 @@ latch_cli/services/init/template/LICENSE
157
143
  latch_cli/services/init/template/README.md
158
144
  latch_cli/services/init/template/__init__.py
159
145
  latch_cli/services/init/template/task.py
160
- latch_cli/services/init/template/__pycache__/__init__.cpython-310.pyc
161
146
  latch_cli/services/register/__init__.py
162
147
  latch_cli/services/register/constants.py
163
148
  latch_cli/services/register/register.py
@@ -176,6 +161,7 @@ latch_cli/snakemake/workflow.py
176
161
  latch_cli/snakemake/config/__init__.py
177
162
  latch_cli/snakemake/config/parser.py
178
163
  latch_cli/snakemake/config/utils.py
164
+ latch_cli/tui/__init__.py
179
165
  latch_cli/utils/__init__.py
180
166
  latch_cli/utils/path.py
181
167
  tests/__init__.py
@@ -22,7 +22,7 @@ class LatchConstants:
22
22
  base_image: str = (
23
23
  "812206152185.dkr.ecr.us-west-2.amazonaws.com/latch-base:fe0b-main"
24
24
  )
25
- nextflow_latest_version: str = "v1.1.7"
25
+ nextflow_latest_version: str = "v1.1.8"
26
26
 
27
27
  file_max_size: int = 4 * Units.MiB
28
28
  file_chunk_size: int = 64 * Units.MiB
@@ -1,25 +1,37 @@
1
1
  import os
2
2
  import sys
3
- import termios
4
- import tty
5
- from functools import wraps
6
- from typing import Callable, List, Optional, Tuple, TypeVar
3
+ from typing import Any, Callable, Generic, List, Optional, Tuple, TypeVar
7
4
 
8
- from typing_extensions import ParamSpec
5
+ from typing_extensions import TypedDict
9
6
 
10
7
  from latch_cli.click_utils import AnsiCodes
11
8
 
12
- from . import common
13
9
 
14
- P = ParamSpec("P")
15
- T = TypeVar("T")
10
+ def buffered_print() -> Tuple[Callable, Callable]:
11
+ buffer = []
12
+
13
+ def __print(*args):
14
+ for arg in args:
15
+ buffer.append(arg)
16
+
17
+ def __show():
18
+ nonlocal buffer
19
+ print("".join(buffer), flush=True, end="")
20
+ buffer = []
21
+
22
+ return __print, __show
23
+
24
+
25
+ # Allows for exactly one print per render, removing any weird flashing
26
+ # behavior and also speeding things up considerably
27
+ _print, _show = buffered_print()
16
28
 
17
29
 
18
30
  def clear(k: int):
19
31
  """
20
- Clear `k` lines below the cursor, returning the cursor to the start of its original line
32
+ Clear `k` lines below the cursor, returning the cursor to its original position
21
33
  """
22
- print(f"\x1b[2K\x1b[1E" * (k) + f"\x1b[{k}F")
34
+ _print(f"\x1b[2K\x1b[1E" * (k) + f"\x1b[{k}F")
23
35
 
24
36
 
25
37
  def draw_box(
@@ -38,15 +50,15 @@ def draw_box(
38
50
 
39
51
 
40
52
  def clear_screen():
41
- print("\x1b[2J")
53
+ _print("\x1b[2J")
42
54
 
43
55
 
44
56
  def remove_cursor():
45
- print("\x1b[?25l")
57
+ _print("\x1b[?25l")
46
58
 
47
59
 
48
60
  def reveal_cursor():
49
- print("\x1b[?25h")
61
+ _print("\x1b[?25h")
50
62
 
51
63
 
52
64
  def move_cursor(pos: Tuple[int, int]):
@@ -56,45 +68,55 @@ def move_cursor(pos: Tuple[int, int]):
56
68
  x, y = pos
57
69
  if x < 0 or y < 0:
58
70
  return
59
- print(f"\x1b[{y};{x}H")
71
+ _print(f"\x1b[{y};{x}H")
60
72
 
61
73
 
62
74
  def move_cursor_up(n: int):
63
75
  if n <= 0:
64
76
  return
65
- print(f"\x1b[{n}A")
77
+ _print(f"\x1b[{n}A")
66
78
 
67
79
 
68
80
  def line_up(n: int):
69
81
  """Moves to the start of the destination line"""
70
82
  if n <= 0:
71
83
  return
72
- print(f"\x1b[{n}F")
84
+ _print(f"\x1b[{n}F")
73
85
 
74
86
 
75
87
  def move_cursor_down(n: int):
76
88
  if n <= 0:
77
89
  return
78
- print(f"\x1b[{n}B")
90
+ _print(f"\x1b[{n}B")
79
91
 
80
92
 
81
93
  def line_down(n: int):
82
94
  """Moves to the start of the destination line"""
83
95
  if n <= 0:
84
96
  return
85
- print(f"\x1b[{n}E")
97
+ _print(f"\x1b[{n}E")
86
98
 
87
99
 
88
100
  def move_cursor_right(n: int):
89
101
  if n <= 0:
90
102
  return
91
- print(f"\x1b[{n}C")
103
+ _print(f"\x1b[{n}C")
92
104
 
93
105
 
94
106
  def move_cursor_left(n: int):
95
107
  if n <= 0:
96
108
  return
97
- print(f"\x1b[{n}D")
109
+ _print(f"\x1b[{n}D")
110
+
111
+
112
+ def current_cursor_position() -> Tuple[int, int]:
113
+ res = b""
114
+ sys.stdout.write("\x1b[6n")
115
+ sys.stdout.flush()
116
+ while not res.endswith(b"R"):
117
+ res += sys.stdin.buffer.read(1)
118
+ y, x = res.strip(b"\x1b[R").split(b";")
119
+ return int(x), int(y)
98
120
 
99
121
 
100
122
  def draw_vertical_line(
@@ -112,16 +134,16 @@ def draw_vertical_line(
112
134
  return
113
135
 
114
136
  if color is not None:
115
- print(color)
137
+ _print(color)
116
138
  sep = "\x1b[1A" if up else "\x1b[1B"
117
139
  for i in range(height):
118
140
  if i == 0 and make_corner:
119
141
  corner = "\u2514" if up else "\u2510"
120
- print(f"{corner}\x1b[1D{sep}")
142
+ _print(f"{corner}\x1b[1D{sep}")
121
143
  else:
122
- print(f"\u2502\x1b[1D{sep}")
144
+ _print(f"\u2502\x1b[1D{sep}")
123
145
  if color is not None:
124
- print("\x1b[0m")
146
+ _print("\x1b[0m")
125
147
 
126
148
 
127
149
  def draw_horizontal_line(
@@ -139,30 +161,16 @@ def draw_horizontal_line(
139
161
  return
140
162
 
141
163
  if color is not None:
142
- print(color)
164
+ _print(color)
143
165
  sep = "\x1b[2D" if left else ""
144
166
  for i in range(width):
145
167
  if i == 0 and make_corner:
146
168
  corner = "\u2518" if left else "\u250c"
147
- print(f"{corner}{sep}")
169
+ _print(f"{corner}{sep}")
148
170
  else:
149
- print(f"\u2500{sep}")
171
+ _print(f"\u2500{sep}")
150
172
  if color is not None:
151
- print("\x1b[0m")
152
-
153
-
154
- def raw_input(f: Callable[P, T]) -> Callable[P, T]:
155
- @wraps(f)
156
- def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
157
- old_settings = termios.tcgetattr(sys.stdin.fileno())
158
- tty.setraw(sys.stdin.fileno())
159
-
160
- try:
161
- return f(*args, **kwargs)
162
- finally:
163
- termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings)
164
-
165
- return wrapper
173
+ _print("\x1b[0m")
166
174
 
167
175
 
168
176
  def read_next_byte() -> bytes:
@@ -186,9 +194,16 @@ def read_bytes(num_bytes: int) -> bytes:
186
194
  return result
187
195
 
188
196
 
189
- @raw_input
197
+ T = TypeVar("T")
198
+
199
+
200
+ class SelectOption(TypedDict, Generic[T]):
201
+ display_name: str
202
+ value: T
203
+
204
+
190
205
  def select_tui(
191
- title: str, options: List[common.SelectOption[T]], clear_terminal: bool = True
206
+ title: str, options: List[SelectOption[T]], clear_terminal: bool = True
192
207
  ) -> Optional[T]:
193
208
  """
194
209
  Renders a terminal UI that allows users to select one of the options
@@ -213,7 +228,7 @@ def select_tui(
213
228
  if curr_selected < 0 or curr_selected >= len(options):
214
229
  curr_selected = 0
215
230
 
216
- print(title)
231
+ _print(title)
217
232
  line_down(2)
218
233
 
219
234
  num_lines_rendered = 4 # 4 "extra" lines for header + footer
@@ -229,21 +244,27 @@ def select_tui(
229
244
 
230
245
  prefix = indent[:-2] + "> "
231
246
 
232
- print(f"{color}{bold}{prefix}{name}{reset}\x1b[1E")
247
+ _print(f"{color}{bold}{prefix}{name}{reset}\x1b[1E")
233
248
  else:
234
- print(f"{indent}{name}\x1b[1E")
249
+ _print(f"{indent}{name}\x1b[1E")
235
250
  num_lines_rendered += 1
236
251
 
237
252
  line_down(1)
238
253
 
239
254
  control_str = "[ARROW-KEYS] Navigate\t[ENTER] Select\t[Q] Quit"
240
- print(control_str)
255
+ _print(control_str)
241
256
  line_up(num_lines_rendered - 1)
242
257
 
243
- common.show()
258
+ _show()
244
259
 
245
260
  return num_lines_rendered
246
261
 
262
+ import termios
263
+ import tty
264
+
265
+ old_settings = termios.tcgetattr(sys.stdin.fileno())
266
+ tty.setraw(sys.stdin.fileno())
267
+
247
268
  curr_selected = 0
248
269
  start_index = 0
249
270
  _, term_height = os.get_terminal_size()
@@ -298,4 +319,5 @@ def select_tui(
298
319
  finally:
299
320
  clear(num_lines_rendered)
300
321
  reveal_cursor()
301
- common.show()
322
+ _show()
323
+ termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings)
@@ -4,14 +4,13 @@ import json
4
4
  import os
5
5
  import signal
6
6
  import sys
7
- from typing import Literal, Optional, TypedDict, Union
7
+ from typing import Generic, Literal, Optional, Tuple, TypedDict, TypeVar, Union
8
8
  from urllib.parse import urljoin, urlparse
9
9
 
10
10
  import websockets.client as websockets
11
11
  from latch_sdk_config.latch import NUCLEUS_URL
12
12
  from typing_extensions import TypeAlias
13
13
 
14
- from latch_cli.menus import raw_input
15
14
  from latch_cli.services.execute.utils import (
16
15
  ContainerNode,
17
16
  EGNNode,
@@ -173,7 +172,6 @@ async def connect(egn_info: EGNNode, container_info: Optional[ContainerNode]):
173
172
  pass
174
173
 
175
174
 
176
- @raw_input
177
175
  def exec(
178
176
  execution_id: Optional[str] = None,
179
177
  egn_id: Optional[str] = None,
@@ -186,4 +184,13 @@ def exec(
186
184
  egn_info = get_egn_info(execution_info, egn_id)
187
185
  container_info = get_container_info(egn_info, container_index)
188
186
 
189
- asyncio.run(connect(egn_info, container_info))
187
+ import termios
188
+ import tty
189
+
190
+ old_settings_stdin = termios.tcgetattr(sys.stdin.fileno())
191
+ tty.setraw(sys.stdin)
192
+
193
+ try:
194
+ asyncio.run(connect(egn_info, container_info))
195
+ finally:
196
+ termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, old_settings_stdin)