fal 1.36.0__tar.gz → 1.37.0__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.

Potentially problematic release.


This version of fal might be problematic. Click here for more details.

Files changed (187) hide show
  1. {fal-1.36.0/fal.egg-info → fal-1.37.0}/PKG-INFO +1 -1
  2. {fal-1.36.0 → fal-1.37.0/fal.egg-info}/PKG-INFO +1 -1
  3. {fal-1.36.0 → fal-1.37.0}/src/fal/_fal_version.py +2 -2
  4. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/apps.py +24 -20
  5. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/auth.py +5 -3
  6. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/runners.py +11 -4
  7. {fal-1.36.0 → fal-1.37.0}/.gitignore +0 -0
  8. {fal-1.36.0 → fal-1.37.0}/Makefile +0 -0
  9. {fal-1.36.0 → fal-1.37.0}/README.md +0 -0
  10. {fal-1.36.0 → fal-1.37.0}/docs/conf.py +0 -0
  11. {fal-1.36.0 → fal-1.37.0}/docs/index.rst +0 -0
  12. {fal-1.36.0 → fal-1.37.0}/fal.egg-info/SOURCES.txt +0 -0
  13. {fal-1.36.0 → fal-1.37.0}/fal.egg-info/dependency_links.txt +0 -0
  14. {fal-1.36.0 → fal-1.37.0}/fal.egg-info/entry_points.txt +0 -0
  15. {fal-1.36.0 → fal-1.37.0}/fal.egg-info/requires.txt +0 -0
  16. {fal-1.36.0 → fal-1.37.0}/fal.egg-info/top_level.txt +0 -0
  17. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/README.md +0 -0
  18. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
  19. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
  20. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
  21. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
  22. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
  23. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
  24. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
  25. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
  26. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
  27. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
  28. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
  29. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
  30. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
  31. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
  32. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
  33. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
  34. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
  35. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
  36. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
  37. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
  38. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
  39. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
  40. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
  41. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
  42. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
  43. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
  44. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
  45. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
  46. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
  47. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
  48. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
  49. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
  50. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
  51. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
  52. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
  53. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
  54. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
  55. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
  56. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
  57. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
  58. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
  59. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
  60. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
  61. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
  62. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
  63. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
  64. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
  65. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
  66. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
  67. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
  68. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
  69. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
  70. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
  71. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
  72. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
  73. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
  74. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
  75. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
  76. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
  77. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
  78. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
  79. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
  80. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
  81. {fal-1.36.0 → fal-1.37.0}/openapi-fal-rest/pyproject.toml +0 -0
  82. {fal-1.36.0 → fal-1.37.0}/openapi_rest.config.yaml +0 -0
  83. {fal-1.36.0 → fal-1.37.0}/pyproject.toml +0 -0
  84. {fal-1.36.0 → fal-1.37.0}/setup.cfg +0 -0
  85. {fal-1.36.0 → fal-1.37.0}/src/fal/__init__.py +0 -0
  86. {fal-1.36.0 → fal-1.37.0}/src/fal/__main__.py +0 -0
  87. {fal-1.36.0 → fal-1.37.0}/src/fal/_serialization.py +0 -0
  88. {fal-1.36.0 → fal-1.37.0}/src/fal/_version.py +0 -0
  89. {fal-1.36.0 → fal-1.37.0}/src/fal/api.py +0 -0
  90. {fal-1.36.0 → fal-1.37.0}/src/fal/app.py +0 -0
  91. {fal-1.36.0 → fal-1.37.0}/src/fal/apps.py +0 -0
  92. {fal-1.36.0 → fal-1.37.0}/src/fal/auth/__init__.py +0 -0
  93. {fal-1.36.0 → fal-1.37.0}/src/fal/auth/auth0.py +0 -0
  94. {fal-1.36.0 → fal-1.37.0}/src/fal/auth/local.py +0 -0
  95. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/__init__.py +0 -0
  96. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/_utils.py +0 -0
  97. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/api.py +0 -0
  98. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/cli_nested_json.py +0 -0
  99. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/create.py +0 -0
  100. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/debug.py +0 -0
  101. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/deploy.py +0 -0
  102. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/doctor.py +0 -0
  103. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/files.py +0 -0
  104. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/keys.py +0 -0
  105. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/main.py +0 -0
  106. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/parser.py +0 -0
  107. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/profile.py +0 -0
  108. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/run.py +0 -0
  109. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/secrets.py +0 -0
  110. {fal-1.36.0 → fal-1.37.0}/src/fal/cli/teams.py +0 -0
  111. {fal-1.36.0 → fal-1.37.0}/src/fal/config.py +0 -0
  112. {fal-1.36.0 → fal-1.37.0}/src/fal/console/__init__.py +0 -0
  113. {fal-1.36.0 → fal-1.37.0}/src/fal/console/icons.py +0 -0
  114. {fal-1.36.0 → fal-1.37.0}/src/fal/console/ux.py +0 -0
  115. {fal-1.36.0 → fal-1.37.0}/src/fal/container.py +0 -0
  116. {fal-1.36.0 → fal-1.37.0}/src/fal/exceptions/__init__.py +0 -0
  117. {fal-1.36.0 → fal-1.37.0}/src/fal/exceptions/_base.py +0 -0
  118. {fal-1.36.0 → fal-1.37.0}/src/fal/exceptions/_cuda.py +0 -0
  119. {fal-1.36.0 → fal-1.37.0}/src/fal/exceptions/auth.py +0 -0
  120. {fal-1.36.0 → fal-1.37.0}/src/fal/files.py +0 -0
  121. {fal-1.36.0 → fal-1.37.0}/src/fal/flags.py +0 -0
  122. {fal-1.36.0 → fal-1.37.0}/src/fal/logging/__init__.py +0 -0
  123. {fal-1.36.0 → fal-1.37.0}/src/fal/logging/isolate.py +0 -0
  124. {fal-1.36.0 → fal-1.37.0}/src/fal/logging/style.py +0 -0
  125. {fal-1.36.0 → fal-1.37.0}/src/fal/logging/trace.py +0 -0
  126. {fal-1.36.0 → fal-1.37.0}/src/fal/logging/user.py +0 -0
  127. {fal-1.36.0 → fal-1.37.0}/src/fal/project.py +0 -0
  128. {fal-1.36.0 → fal-1.37.0}/src/fal/py.typed +0 -0
  129. {fal-1.36.0 → fal-1.37.0}/src/fal/rest_client.py +0 -0
  130. {fal-1.36.0 → fal-1.37.0}/src/fal/sdk.py +0 -0
  131. {fal-1.36.0 → fal-1.37.0}/src/fal/sync.py +0 -0
  132. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/__init__.py +0 -0
  133. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/audio/__init__.py +0 -0
  134. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/audio/audio.py +0 -0
  135. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/exceptions.py +0 -0
  136. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/file/__init__.py +0 -0
  137. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/file/file.py +0 -0
  138. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/file/providers/fal.py +0 -0
  139. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/file/providers/gcp.py +0 -0
  140. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/file/providers/r2.py +0 -0
  141. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/file/providers/s3.py +0 -0
  142. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/file/types.py +0 -0
  143. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/image/__init__.py +0 -0
  144. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/image/image.py +0 -0
  145. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
  146. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
  147. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
  148. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
  149. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
  150. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/image/safety_checker.py +0 -0
  151. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/kv.py +0 -0
  152. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/optimize.py +0 -0
  153. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/types.py +0 -0
  154. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/utils/__init__.py +0 -0
  155. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/utils/download_utils.py +0 -0
  156. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/utils/endpoint.py +0 -0
  157. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/utils/retry.py +0 -0
  158. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/utils/setup_utils.py +0 -0
  159. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/video/__init__.py +0 -0
  160. {fal-1.36.0 → fal-1.37.0}/src/fal/toolkit/video/video.py +0 -0
  161. {fal-1.36.0 → fal-1.37.0}/src/fal/utils.py +0 -0
  162. {fal-1.36.0 → fal-1.37.0}/src/fal/workflows.py +0 -0
  163. {fal-1.36.0 → fal-1.37.0}/tests/__init__.py +0 -0
  164. {fal-1.36.0 → fal-1.37.0}/tests/assets/cat.png +0 -0
  165. {fal-1.36.0 → fal-1.37.0}/tests/cli/__init__.py +0 -0
  166. {fal-1.36.0 → fal-1.37.0}/tests/cli/test_apps.py +0 -0
  167. {fal-1.36.0 → fal-1.37.0}/tests/cli/test_auth.py +0 -0
  168. {fal-1.36.0 → fal-1.37.0}/tests/cli/test_deploy.py +0 -0
  169. {fal-1.36.0 → fal-1.37.0}/tests/cli/test_keys.py +0 -0
  170. {fal-1.36.0 → fal-1.37.0}/tests/cli/test_run.py +0 -0
  171. {fal-1.36.0 → fal-1.37.0}/tests/cli/test_secrets.py +0 -0
  172. {fal-1.36.0 → fal-1.37.0}/tests/conftest.py +0 -0
  173. {fal-1.36.0 → fal-1.37.0}/tests/integration_test.py +0 -0
  174. {fal-1.36.0 → fal-1.37.0}/tests/mainify_package/__init__.py +0 -0
  175. {fal-1.36.0 → fal-1.37.0}/tests/mainify_package/impl.py +0 -0
  176. {fal-1.36.0 → fal-1.37.0}/tests/mainify_package/utils.py +0 -0
  177. {fal-1.36.0 → fal-1.37.0}/tests/mainify_target.py +0 -0
  178. {fal-1.36.0 → fal-1.37.0}/tests/test_apps.py +0 -0
  179. {fal-1.36.0 → fal-1.37.0}/tests/test_files.py +0 -0
  180. {fal-1.36.0 → fal-1.37.0}/tests/test_kv.py +0 -0
  181. {fal-1.36.0 → fal-1.37.0}/tests/test_stability.py +0 -0
  182. {fal-1.36.0 → fal-1.37.0}/tests/toolkit/file/providers/test_fal_retry.py +0 -0
  183. {fal-1.36.0 → fal-1.37.0}/tests/toolkit/file_test.py +0 -0
  184. {fal-1.36.0 → fal-1.37.0}/tests/toolkit/image_test.py +0 -0
  185. {fal-1.36.0 → fal-1.37.0}/tests/toolkit/test_types.py +0 -0
  186. {fal-1.36.0 → fal-1.37.0}/tests/toolkit/utils/retry.py +0 -0
  187. {fal-1.36.0 → fal-1.37.0}/tools/demo_script.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.36.0
3
+ Version: 1.37.0
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fal
3
- Version: 1.36.0
3
+ Version: 1.37.0
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.36.0'
32
- __version_tuple__ = version_tuple = (1, 36, 0)
31
+ __version__ = version = '1.37.0'
32
+ __version_tuple__ = version_tuple = (1, 37, 0)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -292,26 +292,30 @@ def _runners(args):
292
292
  client = get_client(args.host, args.team)
293
293
  with client.connect() as connection:
294
294
  alias_runners = connection.list_alias_runners(alias=args.app_name)
295
+ if args.output == "pretty":
296
+ runners_table = runners.runners_table(alias_runners)
297
+ pending_runners = [
298
+ runner for runner in alias_runners if runner.state == RunnerState.PENDING
299
+ ]
300
+ setup_runners = [
301
+ runner for runner in alias_runners if runner.state == RunnerState.SETUP
302
+ ]
303
+ args.console.print(
304
+ f"Runners: {len(alias_runners) - len(pending_runners) - len(setup_runners)}"
305
+ )
306
+ args.console.print(f"Runners Pending: {len(pending_runners)}")
307
+ args.console.print(f"Runners Setting Up: {len(setup_runners)}")
308
+ # Drop the alias column, which is the first column
309
+ runners_table.columns.pop(0)
310
+ args.console.print(runners_table)
295
311
 
296
- runners_table = runners.runners_table(alias_runners)
297
- pending_runners = [
298
- runner for runner in alias_runners if runner.state == RunnerState.PENDING
299
- ]
300
- setup_runners = [
301
- runner for runner in alias_runners if runner.state == RunnerState.SETUP
302
- ]
303
- args.console.print(
304
- f"Runners: {len(alias_runners) - len(pending_runners) - len(setup_runners)}"
305
- )
306
- args.console.print(f"Runners Pending: {len(pending_runners)}")
307
- args.console.print(f"Runners Setting Up: {len(setup_runners)}")
308
- # Drop the alias column, which is the first column
309
- runners_table.columns.pop(0)
310
- args.console.print(runners_table)
311
-
312
- requests_table = runners.runners_requests_table(alias_runners)
313
- args.console.print(f"Requests: {len(requests_table.rows)}")
314
- args.console.print(requests_table)
312
+ requests_table = runners.runners_requests_table(alias_runners)
313
+ args.console.print(f"Requests: {len(requests_table.rows)}")
314
+ args.console.print(requests_table)
315
+ elif args.output == "json":
316
+ runners._list_json(args, alias_runners)
317
+ else:
318
+ raise AssertionError(f"Invalid output format: {args.output}")
315
319
 
316
320
 
317
321
  def _add_runners_parser(subparsers, parents):
@@ -320,7 +324,7 @@ def _add_runners_parser(subparsers, parents):
320
324
  "runners",
321
325
  description=runners_help,
322
326
  help=runners_help,
323
- parents=parents,
327
+ parents=[*parents, get_output_parser()],
324
328
  )
325
329
  parser.add_argument(
326
330
  "app_name",
@@ -44,7 +44,9 @@ def _list_accounts(args):
44
44
  config = Config()
45
45
  current_account_name = config.get_internal("team") or user_access.info["nickname"]
46
46
 
47
- if args.output == "json":
47
+ # NOTE: might be used by other commands that don't have the --output/--json flag
48
+ output = getattr(args, "output", "pretty")
49
+ if output == "json":
48
50
  json_accounts = []
49
51
  for account in user_access.accounts:
50
52
  selected = account["nickname"] == current_account_name
@@ -56,7 +58,7 @@ def _list_accounts(args):
56
58
  }
57
59
  )
58
60
  args.console.print(json.dumps({"teams": json_accounts}))
59
- elif args.output == "pretty":
61
+ elif output == "pretty":
60
62
  from rich.style import Style
61
63
  from rich.table import Table
62
64
 
@@ -78,7 +80,7 @@ def _list_accounts(args):
78
80
 
79
81
  args.console.print(table)
80
82
  else:
81
- raise AssertionError(f"Invalid output format: {args.output}")
83
+ raise AssertionError(f"Invalid output format: {output}")
82
84
 
83
85
 
84
86
  def _unset_account(args):
@@ -15,8 +15,7 @@ def runners_table(runners: List[RunnerInfo]):
15
15
  table = Table()
16
16
  table.add_column("Alias")
17
17
  table.add_column("Runner ID")
18
- table.add_column("In Flight Requests")
19
- table.add_column("Missing Leases")
18
+ table.add_column("In Flight\nRequests")
20
19
  table.add_column("Expires In")
21
20
  table.add_column("Uptime")
22
21
  table.add_column("Revision")
@@ -34,12 +33,20 @@ def runners_table(runners: List[RunnerInfo]):
34
33
  ]
35
34
  )
36
35
 
36
+ in_flight = str(runner.in_flight_requests)
37
+ missing_leases = runner.in_flight_requests - num_leases_with_request
38
+ if missing_leases > 0:
39
+ # Show a small indicator of in flight requests that are not visible in the
40
+ # leases lists
41
+ # This can be due to race conditions, so only important to report if it's
42
+ # consistent
43
+ in_flight = f"{in_flight} [dim]({missing_leases})[/]"
44
+
37
45
  table.add_row(
38
46
  runner.alias,
39
47
  # Mark lost runners in red
40
48
  runner.runner_id if present else f"[red]{runner.runner_id}[/]",
41
- str(runner.in_flight_requests),
42
- str(runner.in_flight_requests - num_leases_with_request),
49
+ in_flight,
43
50
  (
44
51
  "N/A (active)"
45
52
  if runner.expiration_countdown is None
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes