labtasker 0.2.1__tar.gz → 0.2.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 (187) hide show
  1. labtasker-0.2.2/.gitattributes +217 -0
  2. {labtasker-0.2.1 → labtasker-0.2.2}/.pre-commit-config.yaml +1 -7
  3. labtasker-0.2.2/PKG-INFO +156 -0
  4. labtasker-0.2.2/README.md +90 -0
  5. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/__init__.py +4 -3
  6. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/api_models.py +49 -1
  7. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/cli/__init__.py +2 -1
  8. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/cli/cli.py +7 -4
  9. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/cli/config.py +1 -3
  10. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/cli/event.py +18 -5
  11. labtasker-0.2.2/labtasker/client/cli/init.py +284 -0
  12. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/cli/loop.py +14 -10
  13. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/cli/queue.py +55 -23
  14. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/cli/task.py +90 -26
  15. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/cli/worker.py +17 -10
  16. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/client_api.py +3 -1
  17. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/api.py +41 -18
  18. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cli_utils.py +124 -25
  19. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/config.py +5 -4
  20. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/events.py +45 -23
  21. labtasker-0.2.2/labtasker/client/core/exceptions.py +77 -0
  22. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/job_runner.py +93 -12
  23. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/paths.py +5 -2
  24. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/utils.py +17 -6
  25. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/version_checker.py +7 -5
  26. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/database.py +21 -4
  27. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/endpoints.py +6 -0
  28. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker.egg-info/SOURCES.txt +3 -0
  29. {labtasker-0.2.1 → labtasker-0.2.2}/pyproject.toml +4 -1
  30. labtasker-0.2.2/scripts/asciinema_adjust_timestamp.py +38 -0
  31. {labtasker-0.2.1 → labtasker-0.2.2}/tests/conftest.py +6 -0
  32. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/conftest.py +19 -0
  33. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/test_event.py +8 -9
  34. labtasker-0.2.2/tests/test_client/test_cli/test_init.py +250 -0
  35. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/test_task.py +172 -5
  36. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_heartbeat.py +3 -1
  37. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_timeout/conftest.py +11 -0
  38. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_filtering/exception_utils.py +2 -0
  39. labtasker-0.2.1/.gitattributes +0 -1
  40. labtasker-0.2.1/PKG-INFO +0 -101
  41. labtasker-0.2.1/README.md +0 -39
  42. labtasker-0.2.1/labtasker/client/core/exceptions.py +0 -73
  43. {labtasker-0.2.1 → labtasker-0.2.2}/.coveragerc +0 -0
  44. {labtasker-0.2.1 → labtasker-0.2.2}/.dockerignore +0 -0
  45. {labtasker-0.2.1 → labtasker-0.2.2}/.flake8 +0 -0
  46. {labtasker-0.2.1 → labtasker-0.2.2}/.gitignore +0 -0
  47. {labtasker-0.2.1 → labtasker-0.2.2}/.gitmodules +0 -0
  48. {labtasker-0.2.1 → labtasker-0.2.2}/.pytest.ini +0 -0
  49. {labtasker-0.2.1 → labtasker-0.2.2}/.python-version +0 -0
  50. {labtasker-0.2.1 → labtasker-0.2.2}/Dockerfile +0 -0
  51. {labtasker-0.2.1 → labtasker-0.2.2}/LICENSE +0 -0
  52. {labtasker-0.2.1 → labtasker-0.2.2}/MANIFEST.in +0 -0
  53. {labtasker-0.2.1 → labtasker-0.2.2}/PRIVACY.md +0 -0
  54. {labtasker-0.2.1 → labtasker-0.2.2}/demo/advanced/custom_resolver/submit_job.py +0 -0
  55. {labtasker-0.2.1 → labtasker-0.2.2}/demo/advanced/custom_resolver/w.py +0 -0
  56. {labtasker-0.2.1 → labtasker-0.2.2}/demo/advanced/custom_resolver/wo.py +0 -0
  57. {labtasker-0.2.1 → labtasker-0.2.2}/demo/advanced/event_system/email_on_task_failure.py +0 -0
  58. {labtasker-0.2.1 → labtasker-0.2.2}/demo/advanced/event_system/send_email.py +0 -0
  59. {labtasker-0.2.1 → labtasker-0.2.2}/demo/advanced/event_system/sim_unstable_job.py +0 -0
  60. {labtasker-0.2.1 → labtasker-0.2.2}/demo/advanced/event_system/submit.sh +0 -0
  61. {labtasker-0.2.1 → labtasker-0.2.2}/demo/basic/bash_demo/job_main.py +0 -0
  62. {labtasker-0.2.1 → labtasker-0.2.2}/demo/basic/bash_demo/run_job.sh +0 -0
  63. {labtasker-0.2.1 → labtasker-0.2.2}/demo/basic/bash_demo/submit_job.sh +0 -0
  64. {labtasker-0.2.1 → labtasker-0.2.2}/demo/basic/python_demo/run_job.py +0 -0
  65. {labtasker-0.2.1 → labtasker-0.2.2}/demo/basic/python_demo/submit_job.py +0 -0
  66. {labtasker-0.2.1 → labtasker-0.2.2}/docker/mongodb/init.d/init-keyfile.sh +0 -0
  67. {labtasker-0.2.1 → labtasker-0.2.2}/docker/mongodb/post-init.d/init-mongo.sh +0 -0
  68. {labtasker-0.2.1 → labtasker-0.2.2}/docker-compose.yml +0 -0
  69. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/__main__.py +0 -0
  70. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/__init__.py +0 -0
  71. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/__init__.py +0 -0
  72. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cmd_parser/LabCmd.g4 +0 -0
  73. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cmd_parser/LabCmdLexer.g4 +0 -0
  74. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cmd_parser/__init__.py +0 -0
  75. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cmd_parser/generated/LabCmd.py +0 -0
  76. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cmd_parser/generated/LabCmdLexer.py +0 -0
  77. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cmd_parser/generated/LabCmdListener.py +0 -0
  78. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cmd_parser/generated/__init__.py +0 -0
  79. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/cmd_parser/parser.py +0 -0
  80. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/context.py +0 -0
  81. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/heartbeat.py +0 -0
  82. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/logging.py +0 -0
  83. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/plugin_utils.py +0 -0
  84. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/query_transpiler.py +0 -0
  85. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/resolver/__init__.py +0 -0
  86. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/resolver/models.py +0 -0
  87. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/core/resolver/utils.py +0 -0
  88. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/templates/labtasker_root/.gitignore +0 -0
  89. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/templates/labtasker_root/client.toml +0 -0
  90. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/client/templates/labtasker_root/logs/.gitkeep +0 -0
  91. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/constants.py +0 -0
  92. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/filtering.py +0 -0
  93. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/security.py +0 -0
  94. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/__init__.py +0 -0
  95. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/config.py +0 -0
  96. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/db_utils.py +0 -0
  97. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/dependencies.py +0 -0
  98. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/event_manager.py +0 -0
  99. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/fsm.py +0 -0
  100. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/logging.py +0 -0
  101. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/server/run.py +0 -0
  102. {labtasker-0.2.1 → labtasker-0.2.2}/labtasker/utils.py +0 -0
  103. {labtasker-0.2.1 → labtasker-0.2.2}/script_tests/test_ban_datetime_now/allowed.py +0 -0
  104. {labtasker-0.2.1 → labtasker-0.2.2}/script_tests/test_ban_datetime_now/disallowed.py +0 -0
  105. {labtasker-0.2.1 → labtasker-0.2.2}/script_tests/test_ban_datetime_now/test_ban.py +0 -0
  106. {labtasker-0.2.1 → labtasker-0.2.2}/scripts/check_version.py +0 -0
  107. {labtasker-0.2.1 → labtasker-0.2.2}/scripts/datetime_now_checker.py +0 -0
  108. {labtasker-0.2.1 → labtasker-0.2.2}/server.example.env +0 -0
  109. {labtasker-0.2.1 → labtasker-0.2.2}/setup.cfg +0 -0
  110. {labtasker-0.2.1 → labtasker-0.2.2}/tests/__init__.py +0 -0
  111. {labtasker-0.2.1 → labtasker-0.2.2}/tests/demo_pager_iterator.py +0 -0
  112. {labtasker-0.2.1 → labtasker-0.2.2}/tests/dummy_jobs/job_1.py +0 -0
  113. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/__init__.py +0 -0
  114. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/database/__init__.py +0 -0
  115. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/database/mock.py +0 -0
  116. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/database/real.py +0 -0
  117. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/logging.py +0 -0
  118. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/mock_datetime_now.py +0 -0
  119. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/server/__init__.py +0 -0
  120. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/server/async_app.py +0 -0
  121. {labtasker-0.2.1 → labtasker-0.2.2}/tests/fixtures/server/sync_app.py +0 -0
  122. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_api_models.py +0 -0
  123. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/__init__.py +0 -0
  124. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/__init__.py +0 -0
  125. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/conftest.py +0 -0
  126. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/test_basic.py +0 -0
  127. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/test_config.py +0 -0
  128. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/test_loop.py +0 -0
  129. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/test_queue.py +0 -0
  130. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_cli/test_worker.py +0 -0
  131. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/__init__.py +0 -0
  132. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_cli_utils.py +0 -0
  133. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_event/__init__.py +0 -0
  134. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_event/test_concurrency_job_flow_event.py +0 -0
  135. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_event/test_event_listener_basic.py +0 -0
  136. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_event/test_various_actions.py +0 -0
  137. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_event/utils.py +0 -0
  138. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_job_runner.py +0 -0
  139. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_logging.py +0 -0
  140. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_loop_internal_error_handler.py +0 -0
  141. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_pager_iterator.py +0 -0
  142. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_parser.py +0 -0
  143. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_query_transpiler/__init__.py +0 -0
  144. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_query_transpiler/conftest.py +0 -0
  145. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_query_transpiler/test_behavior.py +0 -0
  146. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_query_transpiler/test_matching.py +0 -0
  147. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_query_transpiler/test_utils.py +0 -0
  148. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_query_transpiler/utils.py +0 -0
  149. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_resolver.py +0 -0
  150. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_concurrency/__init__.py +0 -0
  151. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_concurrency/run_concurrent.py +0 -0
  152. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_concurrency/test_runner_concurrency_success_failure.py +0 -0
  153. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_concurrency/test_runner_high_concurrency.py +0 -0
  154. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_timeout/__init__.py +0 -0
  155. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_timeout/test_job_runner_timeout.py +0 -0
  156. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_timeout/test_job_runner_with_resolver_timeout.py +0 -0
  157. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_runner_with_resolver.py +0 -0
  158. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_server_notification_and_client_version.py +0 -0
  159. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_client/test_core/test_version_checker.py +0 -0
  160. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_filtering/__init__.py +0 -0
  161. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_filtering/test_exception_filtering.py +0 -0
  162. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_mock_time.py +0 -0
  163. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_security.py +0 -0
  164. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/__init__.py +0 -0
  165. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/conftest.py +0 -0
  166. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_database/__init__.py +0 -0
  167. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_database/conftest.py +0 -0
  168. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_database/test_database_basic.py +0 -0
  169. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_database/test_fetch_extra_filter.py +0 -0
  170. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_database/test_query_dict_to_mongo_filter.py +0 -0
  171. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_database/test_required_field_fetching.py +0 -0
  172. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_db_utils/__init__.py +0 -0
  173. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_db_utils/test_arg_match.py +0 -0
  174. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_db_utils/test_keys_to_query_dict.py +0 -0
  175. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_db_utils/test_keys_to_query_dict_deepest.py +0 -0
  176. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_db_utils/test_keys_to_query_dict_topmost.py +0 -0
  177. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_endpoint/__init__.py +0 -0
  178. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_endpoint/test_event_basic.py +0 -0
  179. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_endpoint/test_server.py +0 -0
  180. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_endpoint/test_server_async.py +0 -0
  181. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_endpoint/test_server_async_ping.py +0 -0
  182. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_fsm.py +0 -0
  183. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_server/test_get_verified_queue_dependency.py +0 -0
  184. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_utils/__init__.py +0 -0
  185. {labtasker-0.2.1 → labtasker-0.2.2}/tests/test_utils/test_utils.py +0 -0
  186. {labtasker-0.2.1 → labtasker-0.2.2}/tests/utils.py +0 -0
  187. {labtasker-0.2.1 → labtasker-0.2.2}/tox.ini +0 -0
@@ -0,0 +1,217 @@
1
+ ## GITATTRIBUTES FOR WEB PROJECTS
2
+ #
3
+ # These settings are for any web project.
4
+ #
5
+ # Details per file setting:
6
+ # text These files should be normalized (i.e. convert CRLF to LF).
7
+ # binary These files are binary and should be left untouched.
8
+ #
9
+ # Note that binary is a macro for -text -diff.
10
+ ######################################################################
11
+
12
+ # Auto detect
13
+ ## Handle line endings automatically for files detected as
14
+ ## text and leave all files detected as binary untouched.
15
+ ## This will handle all files NOT defined below.
16
+ * text=auto
17
+
18
+ # Source code
19
+ *.bash text eol=lf
20
+ *.bat text eol=crlf
21
+ *.cmd text eol=crlf
22
+ *.coffee text
23
+ *.css text diff=css
24
+ *.htm text diff=html
25
+ *.html text diff=html
26
+ *.inc text
27
+ *.ini text
28
+ *.js text
29
+ *.mjs text
30
+ *.cjs text
31
+ *.json text
32
+ *.jsx text
33
+ *.less text
34
+ *.ls text
35
+ *.map text -diff
36
+ *.od text
37
+ *.onlydata text
38
+ *.php text diff=php
39
+ *.pl text
40
+ *.ps1 text eol=crlf
41
+ *.py text diff=python
42
+ *.rb text diff=ruby
43
+ *.sass text
44
+ *.scm text
45
+ *.scss text diff=css
46
+ *.sh text eol=lf
47
+ .husky/* text eol=lf
48
+ *.sql text
49
+ *.styl text
50
+ *.tag text
51
+ *.ts text
52
+ *.tsx text
53
+ *.xml text
54
+ *.xhtml text diff=html
55
+
56
+ # Docker
57
+ Dockerfile text
58
+
59
+ # Documentation
60
+ *.ipynb text eol=lf
61
+ *.markdown text diff=markdown
62
+ *.md text diff=markdown
63
+ *.mdwn text diff=markdown
64
+ *.mdown text diff=markdown
65
+ *.mkd text diff=markdown
66
+ *.mkdn text diff=markdown
67
+ *.mdtxt text
68
+ *.mdtext text
69
+ *.txt text
70
+ AUTHORS text
71
+ CHANGELOG text
72
+ CHANGES text
73
+ CONTRIBUTING text
74
+ COPYING text
75
+ copyright text
76
+ *COPYRIGHT* text
77
+ INSTALL text
78
+ license text
79
+ LICENSE text
80
+ NEWS text
81
+ readme text
82
+ *README* text
83
+ TODO text
84
+
85
+ # Templates
86
+ *.dot text
87
+ *.ejs text
88
+ *.erb text
89
+ *.haml text
90
+ *.handlebars text
91
+ *.hbs text
92
+ *.hbt text
93
+ *.jade text
94
+ *.latte text
95
+ *.mustache text
96
+ *.njk text
97
+ *.phtml text
98
+ *.svelte text
99
+ *.tmpl text
100
+ *.tpl text
101
+ *.twig text
102
+ *.vue text
103
+
104
+ # Configs
105
+ *.cnf text
106
+ *.conf text
107
+ *.config text
108
+ .editorconfig text
109
+ .env text
110
+ .gitattributes text
111
+ .gitconfig text
112
+ .htaccess text
113
+ *.lock text -diff
114
+ package.json text eol=lf
115
+ package-lock.json text eol=lf -diff
116
+ pnpm-lock.yaml text eol=lf -diff
117
+ .prettierrc text
118
+ yarn.lock text -diff
119
+ *.toml text
120
+ *.yaml text
121
+ *.yml text
122
+ browserslist text
123
+ Makefile text
124
+ makefile text
125
+ # Fixes syntax highlighting on GitHub to allow comments
126
+ tsconfig.json linguist-language=JSON-with-Comments
127
+
128
+ # Heroku
129
+ Procfile text
130
+
131
+ # Graphics
132
+ *.ai binary
133
+ *.bmp binary
134
+ *.eps binary
135
+ *.gif binary
136
+ *.gifv binary
137
+ *.ico binary
138
+ *.jng binary
139
+ *.jp2 binary
140
+ *.jpg binary
141
+ *.jpeg binary
142
+ *.jpx binary
143
+ *.jxr binary
144
+ *.pdf binary
145
+ *.png binary
146
+ *.psb binary
147
+ *.psd binary
148
+ # SVG treated as an asset (binary) by default.
149
+ *.svg text
150
+ # If you want to treat it as binary,
151
+ # use the following line instead.
152
+ # *.svg binary
153
+ *.svgz binary
154
+ *.tif binary
155
+ *.tiff binary
156
+ *.wbmp binary
157
+ *.webp binary
158
+
159
+ # Audio
160
+ *.kar binary
161
+ *.m4a binary
162
+ *.mid binary
163
+ *.midi binary
164
+ *.mp3 binary
165
+ *.ogg binary
166
+ *.ra binary
167
+
168
+ # Video
169
+ *.3gpp binary
170
+ *.3gp binary
171
+ *.as binary
172
+ *.asf binary
173
+ *.asx binary
174
+ *.avi binary
175
+ *.fla binary
176
+ *.flv binary
177
+ *.m4v binary
178
+ *.mng binary
179
+ *.mov binary
180
+ *.mp4 binary
181
+ *.mpeg binary
182
+ *.mpg binary
183
+ *.ogv binary
184
+ *.swc binary
185
+ *.swf binary
186
+ *.webm binary
187
+
188
+ # Archives
189
+ *.7z binary
190
+ *.gz binary
191
+ *.jar binary
192
+ *.rar binary
193
+ *.tar binary
194
+ *.zip binary
195
+
196
+ # Fonts
197
+ *.ttf binary
198
+ *.eot binary
199
+ *.otf binary
200
+ *.woff binary
201
+ *.woff2 binary
202
+
203
+ # Executables
204
+ *.exe binary
205
+ *.pyc binary
206
+ # Prevents massive diffs caused by vendored, minified files
207
+ **/.yarn/releases/** binary
208
+ **/.yarn/plugins/** binary
209
+
210
+ # RC files (like .babelrc or .eslintrc)
211
+ *.*rc text
212
+
213
+ # Ignore files (like .npmignore or .gitignore)
214
+ *.*ignore text
215
+
216
+ # Prevents massive diffs from built files
217
+ dist/* binary
@@ -7,7 +7,7 @@ repos:
7
7
  - id: check-yaml
8
8
  exclude: ^docs/mkdocs.yml
9
9
  - id: check-added-large-files
10
- exclude: ^docs/docs/assets/
10
+ exclude: ^docs/docs/assets/|^assets/
11
11
  - id: mixed-line-ending
12
12
  args: [ --fix=lf ]
13
13
 
@@ -20,9 +20,3 @@ repos:
20
20
  rev: 5.13.2
21
21
  hooks:
22
22
  - id: isort
23
-
24
- - repo: https://github.com/pycqa/flake8
25
- rev: 6.0.0
26
- hooks:
27
- - id: flake8
28
- exclude: ^labtasker/client/core/cmd_parser/generated/
@@ -0,0 +1,156 @@
1
+ Metadata-Version: 2.4
2
+ Name: labtasker
3
+ Version: 0.2.2
4
+ Summary: A task queue system for lab experiments
5
+ Author-email: Your Name <your.email@example.com>
6
+ License: Apache License 2.0
7
+ Project-URL: Homepage, https://github.com/fkcptlst/labtasker
8
+ Project-URL: Documentation, https://fkcptlst.github.io/labtasker
9
+ Project-URL: Repository, https://github.com/fkcptlst/labtasker.git
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: License :: OSI Approved :: Apache Software License
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.8
15
+ Classifier: Programming Language :: Python :: 3.9
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Requires-Python: <4.0,>=3.8.1
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: python-dotenv<2.0.0,>=1.0.1
24
+ Requires-Dist: pymongo<5.0.0,>=4.0.0
25
+ Requires-Dist: fastapi<0.116.0,>=0.115.0
26
+ Requires-Dist: uvicorn[standard]<0.35.0,>=0.15.0
27
+ Requires-Dist: click<9.0.0,>=8.1.0
28
+ Requires-Dist: passlib<2.0.0,>=1.7.0
29
+ Requires-Dist: antlr4-python3-runtime<5.0.0,>=4.13.0
30
+ Requires-Dist: pydantic-settings<3.0.0,>=2.8.0
31
+ Requires-Dist: httpx[socks]<0.29.0,>=0.28.0
32
+ Requires-Dist: typer<0.16.0,>=0.15.0
33
+ Requires-Dist: loguru<0.8.0,>=0.7.0
34
+ Requires-Dist: ruamel-yaml<0.19.0,>=0.18.10
35
+ Requires-Dist: pyyaml<7.0.0,>=6.0.0
36
+ Requires-Dist: tomlkit<0.14.0,>=0.13.2
37
+ Requires-Dist: importlib-metadata<9.0.0,>=8.5.0
38
+ Requires-Dist: packaging<25.0,>=24.2
39
+ Requires-Dist: sse-starlette<3.0.0,>=2.1.3
40
+ Requires-Dist: httpx-sse<0.5.0,>=0.4.0
41
+ Requires-Dist: stamina<26.0.0,>=25.1.0
42
+ Requires-Dist: noneprompt<0.2.0,>=0.1.9
43
+ Requires-Dist: pytest-sugar<2.0.0,>=1.0.0
44
+ Provides-Extra: dev
45
+ Requires-Dist: pytest<9.0.0,>=8.0.0; extra == "dev"
46
+ Requires-Dist: pytest-cov<7.0.0,>=5.0.0; extra == "dev"
47
+ Requires-Dist: mongomock<4.4.0,>=4.3.0; extra == "dev"
48
+ Requires-Dist: black<26.0.0,>=24.0.0; extra == "dev"
49
+ Requires-Dist: isort<7.0.0,>=5.13.0; extra == "dev"
50
+ Requires-Dist: mypy<2.0.0,>=1.14.0; extra == "dev"
51
+ Requires-Dist: flake8<8.0.0,>=7.0.0; extra == "dev"
52
+ Requires-Dist: pre-commit<5.0.0,>=3.0.0; extra == "dev"
53
+ Requires-Dist: freezegun<2.0.0,>=1.5.0; extra == "dev"
54
+ Requires-Dist: pytest-docker<4.0.0,>=3.0.0; extra == "dev"
55
+ Requires-Dist: pytest-asyncio<0.26.0,>=0.24.0; extra == "dev"
56
+ Requires-Dist: asgi-lifespan<3.0.0,>=2.1.0; extra == "dev"
57
+ Requires-Dist: tox<4.25.0,>=4.24.0; extra == "dev"
58
+ Requires-Dist: pytest-dependency<0.7.0,>=0.6.0; extra == "dev"
59
+ Provides-Extra: doc
60
+ Requires-Dist: mkdocs-material<9.7.0,>=9.6.5; extra == "doc"
61
+ Requires-Dist: mkdocs-glightbox<0.5.0,>=0.4.0; extra == "doc"
62
+ Requires-Dist: mike<2.2.0,>=2.1.3; extra == "doc"
63
+ Provides-Extra: plugins
64
+ Requires-Dist: labtasker-plugin-task-count; extra == "plugins"
65
+ Dynamic: license-file
66
+
67
+ <p align="center"><em>Make your ML experiment wrapper scripts smarter with...</em></p>
68
+ <h1 align="center" style="font-size: 40px;"> <a href="">Labtasker</a></h1>
69
+ <p align="center"><a href="https://fkcptlst.github.io/labtasker/latest/install/install/">Install</a> • <a href="https://fkcptlst.github.io/labtasker/latest/guide/basic/">Tutorial / Demo</a> • <a href="https://fkcptlst.github.io/labtasker/latest/">Documentation</a> • <a href="https://fkcptlst.github.io/labtasker/dev/faq/">FAQs</a> • <a href="https://github.com/fkcptlst/labtasker/releases">Releases</a></p>
70
+
71
+ <p align="center">
72
+ <img src="https://github.com/fkcptlst/labtasker/actions/workflows/unit-test-matrix.yml/badge.svg" alt="unit-test-matrix" />
73
+ <a href="https://codecov.io/gh/fkcptlst/labtasker"><img src="https://codecov.io/gh/fkcptlst/labtasker/graph/badge.svg?token=KQFBV3QRPY" alt="codecov" /></a>
74
+ <img src="https://img.shields.io/badge/Python-3.8%20|%203.9%20|%203.10%20|%203.11%20|%203.12%20|%203.13-blue" alt="Python version" />
75
+ <a href="https://pypi.org/project/labtasker/"><img src="https://img.shields.io/pypi/v/labtasker" alt="PyPI" /></a>
76
+ </p>
77
+
78
+
79
+ **<span style="font-size: 20px;"> 🌟 Labtasker makes ML experiment wrapper scripts smarter with task prioritization,
80
+ failure handling, halfway resume and more: just change 1 line of code.</span>**
81
+
82
+ If you like our project, please give us a star ⭐ on GitHub for latest update.
83
+
84
+ ## ✨ When and Where to Use
85
+
86
+ **TLDR**: Replace `for` loops in your experiment *wrapper script* with labtasker to enable features like experiment
87
+ parallelization, dynamic task prioritization, failure handling, halfway resume, and more.
88
+
89
+ ![comparison](docs/docs/assets/comparison.png)
90
+
91
+ 🐳 For detailed examples and concepts, check out the [documentation](https://fkcptlst.github.io/labtasker/).
92
+
93
+ ## 🧪️ A Quick Demo
94
+
95
+ This demo shows how to easily submit task arguments and run jobs in parallel.
96
+
97
+ It also features an event listener to monitor task execution in real-time and automate workflows,
98
+ such as sending emails on task failure.
99
+
100
+ ![demo](docs/docs/assets/gifs/demo.gif)
101
+
102
+ For more detailed steps, please refer to the content in the [Tutorial / Demo](https://fkcptlst.github.io/labtasker/latest/guide/basic/).
103
+
104
+ ## ⚡️ Features
105
+
106
+ - ⚙️ Easy configuration and setup.
107
+ - 🧩 Versatile and minimalistic design.
108
+ - 🔄 Supports both CLI and Python API for task scheduling.
109
+ - 🔌 Customizable plugin system.
110
+
111
+ ## 🔮 Supercharge Your ML Experiments with Labtasker
112
+
113
+ - ⚡️ **Effortless Parallelization:** Distribute tasks across multiple GPU workers with just a few lines of code.
114
+ - 🛡️ **Intelligent Failure Management:** Automatically capture exceptions, retry failed tasks, and maintain detailed error logs.
115
+ - 🔄 **Seamless Recovery:** Resume failed experiments with a single command - no more scavenging through logs or directories.
116
+ - 🎯 **Real-time Prioritization:** Changed your mind about experiment settings? Instantly cancel, add, or reschedule tasks without disrupting existing ones.
117
+ - 🤖 **Workflow Automation:** Set up smart event triggers for email notifications or task workflow based on FSM transition events.
118
+ - 📊 **Streamlined Logging:** All stdout/stderr automatically organized in `.labtasker/logs` - zero configuration required.
119
+ - 🧩 **Extensible Plugin System:** Create custom command combinations or leverage community plugins to extend functionality.
120
+
121
+ ## 🛠️ Installation
122
+
123
+ > [!NOTE]
124
+ > You need a running Labtasker server to use the client tools.
125
+ > See [deployment instructions](https://fkcptlst.github.io/labtasker/latest/install/deployment/).
126
+
127
+ ### 1. Install Client Tools via PyPI
128
+
129
+ ```bash
130
+ pip install labtasker
131
+ ```
132
+
133
+ ### 2. Install the Latest Version from GitHub
134
+
135
+ ```bash
136
+ pip install git+https://github.com/fkcptlst/labtasker.git
137
+ ```
138
+
139
+ ## 🚀 Quick Start
140
+
141
+ Use the following command to quickly setup a labtasker queue for your project:
142
+
143
+ ```bash
144
+ labtasker init
145
+ ```
146
+
147
+ Then, use `labtasker submit` to submit tasks and use `labtasker loop` to run tasks across any number of workers.
148
+
149
+ ## 📚 Documentation
150
+
151
+ For detailed information on demo, tutorial, deployment, usage, please refer to
152
+ the [documentation](https://fkcptlst.github.io/labtasker/).
153
+
154
+ ## 🔒 License
155
+
156
+ See [LICENSE](LICENSE) for details.
@@ -0,0 +1,90 @@
1
+ <p align="center"><em>Make your ML experiment wrapper scripts smarter with...</em></p>
2
+ <h1 align="center" style="font-size: 40px;"> <a href="">Labtasker</a></h1>
3
+ <p align="center"><a href="https://fkcptlst.github.io/labtasker/latest/install/install/">Install</a> • <a href="https://fkcptlst.github.io/labtasker/latest/guide/basic/">Tutorial / Demo</a> • <a href="https://fkcptlst.github.io/labtasker/latest/">Documentation</a> • <a href="https://fkcptlst.github.io/labtasker/dev/faq/">FAQs</a> • <a href="https://github.com/fkcptlst/labtasker/releases">Releases</a></p>
4
+
5
+ <p align="center">
6
+ <img src="https://github.com/fkcptlst/labtasker/actions/workflows/unit-test-matrix.yml/badge.svg" alt="unit-test-matrix" />
7
+ <a href="https://codecov.io/gh/fkcptlst/labtasker"><img src="https://codecov.io/gh/fkcptlst/labtasker/graph/badge.svg?token=KQFBV3QRPY" alt="codecov" /></a>
8
+ <img src="https://img.shields.io/badge/Python-3.8%20|%203.9%20|%203.10%20|%203.11%20|%203.12%20|%203.13-blue" alt="Python version" />
9
+ <a href="https://pypi.org/project/labtasker/"><img src="https://img.shields.io/pypi/v/labtasker" alt="PyPI" /></a>
10
+ </p>
11
+
12
+
13
+ **<span style="font-size: 20px;"> 🌟 Labtasker makes ML experiment wrapper scripts smarter with task prioritization,
14
+ failure handling, halfway resume and more: just change 1 line of code.</span>**
15
+
16
+ If you like our project, please give us a star ⭐ on GitHub for latest update.
17
+
18
+ ## ✨ When and Where to Use
19
+
20
+ **TLDR**: Replace `for` loops in your experiment *wrapper script* with labtasker to enable features like experiment
21
+ parallelization, dynamic task prioritization, failure handling, halfway resume, and more.
22
+
23
+ ![comparison](docs/docs/assets/comparison.png)
24
+
25
+ 🐳 For detailed examples and concepts, check out the [documentation](https://fkcptlst.github.io/labtasker/).
26
+
27
+ ## 🧪️ A Quick Demo
28
+
29
+ This demo shows how to easily submit task arguments and run jobs in parallel.
30
+
31
+ It also features an event listener to monitor task execution in real-time and automate workflows,
32
+ such as sending emails on task failure.
33
+
34
+ ![demo](docs/docs/assets/gifs/demo.gif)
35
+
36
+ For more detailed steps, please refer to the content in the [Tutorial / Demo](https://fkcptlst.github.io/labtasker/latest/guide/basic/).
37
+
38
+ ## ⚡️ Features
39
+
40
+ - ⚙️ Easy configuration and setup.
41
+ - 🧩 Versatile and minimalistic design.
42
+ - 🔄 Supports both CLI and Python API for task scheduling.
43
+ - 🔌 Customizable plugin system.
44
+
45
+ ## 🔮 Supercharge Your ML Experiments with Labtasker
46
+
47
+ - ⚡️ **Effortless Parallelization:** Distribute tasks across multiple GPU workers with just a few lines of code.
48
+ - 🛡️ **Intelligent Failure Management:** Automatically capture exceptions, retry failed tasks, and maintain detailed error logs.
49
+ - 🔄 **Seamless Recovery:** Resume failed experiments with a single command - no more scavenging through logs or directories.
50
+ - 🎯 **Real-time Prioritization:** Changed your mind about experiment settings? Instantly cancel, add, or reschedule tasks without disrupting existing ones.
51
+ - 🤖 **Workflow Automation:** Set up smart event triggers for email notifications or task workflow based on FSM transition events.
52
+ - 📊 **Streamlined Logging:** All stdout/stderr automatically organized in `.labtasker/logs` - zero configuration required.
53
+ - 🧩 **Extensible Plugin System:** Create custom command combinations or leverage community plugins to extend functionality.
54
+
55
+ ## 🛠️ Installation
56
+
57
+ > [!NOTE]
58
+ > You need a running Labtasker server to use the client tools.
59
+ > See [deployment instructions](https://fkcptlst.github.io/labtasker/latest/install/deployment/).
60
+
61
+ ### 1. Install Client Tools via PyPI
62
+
63
+ ```bash
64
+ pip install labtasker
65
+ ```
66
+
67
+ ### 2. Install the Latest Version from GitHub
68
+
69
+ ```bash
70
+ pip install git+https://github.com/fkcptlst/labtasker.git
71
+ ```
72
+
73
+ ## 🚀 Quick Start
74
+
75
+ Use the following command to quickly setup a labtasker queue for your project:
76
+
77
+ ```bash
78
+ labtasker init
79
+ ```
80
+
81
+ Then, use `labtasker submit` to submit tasks and use `labtasker loop` to run tasks across any number of workers.
82
+
83
+ ## 📚 Documentation
84
+
85
+ For detailed information on demo, tutorial, deployment, usage, please refer to
86
+ the [documentation](https://fkcptlst.github.io/labtasker/).
87
+
88
+ ## 🔒 License
89
+
90
+ See [LICENSE](LICENSE) for details.
@@ -1,4 +1,4 @@
1
- __version__ = "0.2.1"
1
+ __version__ = "0.2.2"
2
2
 
3
3
  from labtasker.client.client_api import *
4
4
  from labtasker.client.core.config import get_client_config
@@ -7,10 +7,11 @@ from labtasker.client.core.paths import get_labtasker_client_config_path
7
7
  from labtasker.client.core.version_checker import check_pypi_status
8
8
  from labtasker.filtering import install_traceback_filter, set_traceback_filter_hook
9
9
 
10
- install_traceback_filter()
11
10
  check_pypi_status()
12
11
 
13
12
  # by default, traceback filter is enabled.
14
13
  # you may disable it via client config
15
14
  if get_labtasker_client_config_path().exists():
16
- set_traceback_filter_hook(enabled=get_client_config().enable_traceback_filter)
15
+ if get_client_config().enable_traceback_filter:
16
+ install_traceback_filter()
17
+ set_traceback_filter_hook(enabled=True)
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import Any, Dict, List, Literal, Optional, Union
2
+ from typing import Any, Dict, List, Literal, Optional, Tuple, Union
3
3
 
4
4
  from packaging.version import Version
5
5
  from pydantic import BaseModel, ConfigDict, Field, SecretStr, field_validator
@@ -209,7 +209,32 @@ class TaskLsRequest(BaseRequestModel):
209
209
  limit: int = Field(100, ge=0, le=1000)
210
210
  task_id: Optional[str] = None
211
211
  task_name: Optional[str] = None
212
+ status: Optional[str] = Field(
213
+ None, pattern=r"^(pending|running|success|failed|cancelled)$"
214
+ )
212
215
  extra_filter: Optional[Dict[str, Any]] = None
216
+ sort: Optional[List[Tuple[str, int]]] = None # validate that int must be -1/1
217
+
218
+ @field_validator("sort")
219
+ def validate_sort(cls, value):
220
+ if value is not None:
221
+ if not isinstance(value, list):
222
+ raise ValueError("Sort must be a list of tuples.")
223
+ for item in value:
224
+ if not isinstance(item, tuple) or len(item) != 2:
225
+ raise ValueError(
226
+ f"Invalid sort format: {item}. Expected (field, order)."
227
+ )
228
+ field, order = item
229
+ if not isinstance(field, str):
230
+ raise ValueError(
231
+ f"Sort field must be a string, got {type(field).__name__}."
232
+ )
233
+ if order not in (-1, 1):
234
+ raise ValueError(
235
+ f"Sort order must be 1 (ascending) or -1 (descending), got {order}."
236
+ )
237
+ return value
213
238
 
214
239
 
215
240
  class TaskLsResponse(BaseResponseModel):
@@ -246,7 +271,30 @@ class WorkerLsRequest(BaseRequestModel):
246
271
  limit: int = Field(100, ge=0, le=1000)
247
272
  worker_id: Optional[str] = None
248
273
  worker_name: Optional[str] = None
274
+ status: Optional[str] = Field(None, pattern=r"^(active|suspended|crashed)$")
249
275
  extra_filter: Optional[Dict[str, Any]] = None
276
+ sort: Optional[List[Tuple[str, int]]] = None # validate that int must be -1/1
277
+
278
+ @field_validator("sort")
279
+ def validate_sort(cls, value):
280
+ if value is not None:
281
+ if not isinstance(value, list):
282
+ raise ValueError("Sort must be a list of tuples.")
283
+ for item in value:
284
+ if not isinstance(item, tuple) or len(item) != 2:
285
+ raise ValueError(
286
+ f"Invalid sort format: {item}. Expected (field, order)."
287
+ )
288
+ field, order = item
289
+ if not isinstance(field, str):
290
+ raise ValueError(
291
+ f"Sort field must be a string, got {type(field).__name__}."
292
+ )
293
+ if order not in (-1, 1):
294
+ raise ValueError(
295
+ f"Sort order must be 1 (ascending) or -1 (descending), got {order}."
296
+ )
297
+ return value
250
298
 
251
299
 
252
300
  class Worker(BaseApiModel, MetadataKeyValidateMixin):
@@ -1,5 +1,6 @@
1
1
  import labtasker.client.cli.config
2
2
  import labtasker.client.cli.event as event
3
+ import labtasker.client.cli.init
3
4
  import labtasker.client.cli.loop
4
5
  import labtasker.client.cli.queue as queue
5
6
  import labtasker.client.cli.task as task
@@ -21,5 +22,5 @@ else:
21
22
  stderr_console.print(
22
23
  f"[bold orange1]Warning:[/bold orange1] config file not found at {get_labtasker_client_config_path()}. "
23
24
  f"[orange1]Skipped plugin loading.[/orange1] "
24
- f"It is recommended to initialize config via running [orange1]`labtasker config`[/orange1] first."
25
+ "If you are running [dodger_blue1]`labtasker init`[/dodger_blue1] or [dodger_blue1]`labtasker config`[/dodger_blue1], ignore this warning."
25
26
  )
@@ -4,13 +4,13 @@ Implements top level cli (mainly callbacks and setup)
4
4
 
5
5
  from typing import Optional
6
6
 
7
- import httpx
8
7
  import typer
9
8
  from typing_extensions import Annotated
10
9
 
11
10
  from labtasker import __version__
12
11
  from labtasker.client.core.api import health_check
13
12
  from labtasker.client.core.config import requires_client_config
13
+ from labtasker.client.core.exceptions import LabtaskerNetworkError
14
14
  from labtasker.client.core.logging import stderr_console, stdout_console
15
15
  from labtasker.client.core.version_checker import check_pypi_status
16
16
 
@@ -49,9 +49,12 @@ def help_(ctx: typer.Context):
49
49
  @app.command()
50
50
  @requires_client_config
51
51
  def health():
52
- """Check server connection and server health."""
52
+ """Check server status and connectivity."""
53
53
  try:
54
54
  stdout_console.print(health_check())
55
- except (httpx.ConnectError, httpx.HTTPStatusError) as e:
56
- stderr_console.print(e)
55
+ except LabtaskerNetworkError as e:
56
+ stderr_console.print(
57
+ "[bold red]Error:[/bold red] Server connection is not healthy.\n"
58
+ f"Detail: {e}"
59
+ )
57
60
  raise typer.Exit(-1)
@@ -28,9 +28,7 @@ def config(
28
28
  None, help="Editor to use for editing the configuration file."
29
29
  ),
30
30
  ):
31
- """
32
- Configure the local client. Opens the configuration file for editing using the specified or system-configured editor.
33
- """
31
+ """Edit local client configuration."""
34
32
  # 0. Check if Labtasker root exists, if not, initialize it
35
33
  if not get_labtasker_root().exists():
36
34
  typer.confirm(