ellf-cli 18.0.3__tar.gz → 18.0.6__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 (319) hide show
  1. {ellf_cli-18.0.3/ellf_cli.egg-info → ellf_cli-18.0.6}/PKG-INFO +1 -1
  2. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/README.md +4 -4
  3. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/users.py +22 -4
  4. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf.json +9 -9
  5. ellf_cli-18.0.6/ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec +3 -0
  6. ellf_cli-18.0.6/ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c +3 -0
  7. ellf_cli-18.0.6/ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97 +3 -0
  8. {ellf_cli-18.0.3 → ellf_cli-18.0.6/ellf_cli.egg-info}/PKG-INFO +1 -1
  9. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli.egg-info/SOURCES.txt +4 -0
  10. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_users_assign.py +10 -3
  11. ellf_cli-18.0.6/tests/test_users_list.py +77 -0
  12. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/LICENSE +0 -0
  13. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/MANIFEST.in +0 -0
  14. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/__init__.py +0 -0
  15. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/__main__.py +0 -0
  16. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/about.json +0 -0
  17. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/about.py +0 -0
  18. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/appdirs.py +0 -0
  19. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/auth.py +0 -0
  20. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/cli.py +0 -0
  21. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/cloud/__init__.py +0 -0
  22. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/cloud/gcp.py +0 -0
  23. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/cluster_config.py +0 -0
  24. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/__init__.py +0 -0
  25. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/_cluster_select.py +0 -0
  26. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/_org_select.py +0 -0
  27. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/_project_scope.py +0 -0
  28. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/_recipe_file.py +0 -0
  29. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/_recipe_subcommand.py +0 -0
  30. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/_state.py +0 -0
  31. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/_usage.py +0 -0
  32. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/actions.py +0 -0
  33. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/agents.py +0 -0
  34. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/assets.py +0 -0
  35. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/auth.py +0 -0
  36. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/clusters.py +0 -0
  37. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/config.py +0 -0
  38. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/datasets.py +0 -0
  39. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/files/__init__.py +0 -0
  40. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/files/cp.py +0 -0
  41. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/files/ls.py +0 -0
  42. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/files/rm.py +0 -0
  43. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/files/rsync.py +0 -0
  44. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/files/stats.py +0 -0
  45. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/general.py +0 -0
  46. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/import_export.py +0 -0
  47. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/__init__.py +0 -0
  48. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/_config_io.py +0 -0
  49. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/_helpers.py +0 -0
  50. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/configure.py +0 -0
  51. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/deploy.py +0 -0
  52. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/init.py +0 -0
  53. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/init_values.py +0 -0
  54. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/provision.py +0 -0
  55. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/register.py +0 -0
  56. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/setup.py +0 -0
  57. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/start.py +0 -0
  58. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/terraform.py +0 -0
  59. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/infra/tls.py +0 -0
  60. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/jobs.py +0 -0
  61. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/packages.py +0 -0
  62. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/paths.py +0 -0
  63. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/plans.py +0 -0
  64. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/projects.py +0 -0
  65. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/publish_code.py +0 -0
  66. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/publish_data.py +0 -0
  67. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/recipes.py +0 -0
  68. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/secrets.py +0 -0
  69. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/services.py +0 -0
  70. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/support.py +0 -0
  71. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/tasks.py +0 -0
  72. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/commands/todos.py +0 -0
  73. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/config.py +0 -0
  74. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
  75. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/.gitignore +0 -0
  76. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skill_variants.json +0 -0
  77. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +0 -0
  78. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/annotation_audit.md +0 -0
  79. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +0 -0
  80. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +0 -0
  81. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/annotation_audit.md +0 -0
  82. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +0 -0
  83. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +0 -0
  84. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
  85. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +0 -0
  86. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +0 -0
  87. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -0
  88. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
  89. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +0 -0
  90. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
  91. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +0 -0
  92. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +0 -0
  93. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +0 -0
  94. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +0 -0
  95. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +0 -0
  96. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
  97. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -0
  98. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
  99. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +0 -0
  100. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
  101. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
  102. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
  103. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
  104. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
  105. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
  106. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
  107. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
  108. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
  109. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
  110. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
  111. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
  112. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
  113. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
  114. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
  115. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +0 -0
  116. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
  117. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/explosion_strategy.md +0 -0
  118. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +0 -0
  119. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +0 -0
  120. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
  121. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/explosion_strategy.md +0 -0
  122. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +0 -0
  123. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
  124. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +0 -0
  125. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +0 -0
  126. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +0 -0
  127. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +0 -0
  128. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
  129. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/model_selection.md +0 -0
  130. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +0 -0
  131. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +0 -0
  132. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +0 -0
  133. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
  134. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
  135. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
  136. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +0 -0
  137. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
  138. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
  139. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/model_selection.md +0 -0
  140. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +0 -0
  141. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
  142. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +0 -0
  143. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
  144. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/errors.py +0 -0
  145. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/helm.py +0 -0
  146. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/interactivity.py +0 -0
  147. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/key_pair.py +0 -0
  148. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/main.py +0 -0
  149. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/messages.py +0 -0
  150. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/pypi_auth.py +0 -0
  151. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/query.py +0 -0
  152. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
  153. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
  154. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
  155. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
  156. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
  157. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
  158. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
  159. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
  160. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
  161. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
  162. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/testing/__init__.py +0 -0
  163. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ty.py +0 -0
  164. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/ui.py +0 -0
  165. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/url.py +0 -0
  166. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/util.py +0 -0
  167. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
  168. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.114_2026-08-19-09-25-21_patch_33ff1e26-0e5e-46d8-8052-ab1d032e8b6c +0 -0
  169. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.115_2026-08-19-09-27-13_patch_4ac728c3-0342-4a36-adbc-e28d2d99b1ba +0 -0
  170. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.116_2026-08-19-09-30-47_patch_c706fef6-6813-4183-b268-12e7b00d7d0b +0 -0
  171. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.117_2026-08-19-09-39-14_patch_c6b0495f-2f88-4aa8-9ebf-0a235b4c407e +0 -0
  172. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.118_2026-08-19-09-52-00_patch_b395655a-8d78-4344-9266-6901c20f6517 +0 -0
  173. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.119_2026-08-19-10-22-38_patch_8f95c49d-aedc-41b8-816d-ccb95f048831 +0 -0
  174. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.120_2026-08-19-10-26-58_patch_7fbf35e6-cc01-4b75-8c9a-f5d054bcaf93 +0 -0
  175. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.121_2026-08-19-10-42-02_patch_31a81b02-a886-4dea-84e0-67cc6ca412d5 +0 -0
  176. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.122_2026-08-19-11-16-49_patch_1c4d7307-48d4-493e-936d-80af799d644b +0 -0
  177. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.123_2026-08-19-11-47-32_patch_d3d78d04-9989-45b1-91b1-93b571d8814a +0 -0
  178. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.124_2026-08-20-08-03-17_patch_57f4c389-2d19-41ce-aca4-13b61c62f387 +0 -0
  179. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.125_2026-08-20-08-25-05_patch_7f368148-0d1c-4525-bbdf-c6d257ad861a +0 -0
  180. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.126_2026-08-20-14-51-36_patch_a99abcc8-3371-4c63-a759-bb7ea5b32432 +0 -0
  181. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.127_2026-08-21-05-48-58_patch_34b4ccee-7596-4f57-93e9-774973cca58e +0 -0
  182. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.128_2026-08-21-10-47-20_patch_693112b9-927c-4a8f-8553-b06eef86079d +0 -0
  183. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.129_2026-08-21-11-16-54_patch_7a981666-01d9-4d1b-9ba3-2129744e3bd5 +0 -0
  184. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.130_2026-08-21-13-09-36_patch_b7ad1a76-ce70-4d70-9d1a-7c414eba5bb4 +0 -0
  185. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.131_2026-08-21-14-31-10_patch_9128ef66-193e-4caf-8710-afd86128e638 +0 -0
  186. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.132_2026-08-24-08-59-34_patch_c600fc14-86a5-460f-9c4e-f0177056f756 +0 -0
  187. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.133_2026-08-24-10-28-29_patch_b6ce3e32-9d7b-48ac-981a-270c22c180dd +0 -0
  188. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.134_2026-08-24-11-00-51_patch_a4fc0484-4a64-46a2-94f8-aa805254c7b0 +0 -0
  189. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.135_2026-08-24-12-12-41_patch_a870a56f-9a65-49eb-92da-f572b26667d8 +0 -0
  190. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.136_2026-08-24-12-42-46_patch_9b399356-6482-4291-8da7-e748a99c4b53 +0 -0
  191. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.137_2026-08-24-12-53-57_patch_f7979348-1910-40cd-a535-90299eca84ee +0 -0
  192. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.138_2026-08-24-14-36-30_patch_ed0f8750-f663-498b-85e7-0d3f2213fcfe +0 -0
  193. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.139_2026-08-25-08-37-26_patch_3ba87e19-902b-4f76-b64c-90e5c0ca1fc6 +0 -0
  194. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.140_2026-08-25-09-52-45_patch_abc830f2-df15-4385-b797-cdaf72c10752 +0 -0
  195. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.141_2026-08-25-11-37-20_patch_1d9ec01e-06f6-4c8e-b095-af17d5b62b00 +0 -0
  196. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.142_2026-08-26-07-38-49_patch_3dd23e36-e7df-494c-986f-a412861a8d40 +0 -0
  197. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.143_2026-08-26-09-32-32_patch_7b7ebd34-de27-4b73-98a7-3e1501e16cd5 +0 -0
  198. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.144_2026-08-26-10-56-43_patch_166064f2-2208-4c9b-9e25-25dc4cd32084 +0 -0
  199. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.145_2026-08-26-11-37-29_patch_b997f3ee-d7d3-4408-9f2f-c8b6d08bdb3b +0 -0
  200. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.146_2026-08-26-12-15-20_patch_afbbb893-25db-468c-81db-2663ca373068 +0 -0
  201. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.147_2026-08-26-14-10-50_patch_fd753b1f-2fa1-4ddb-a9e7-de690da85254 +0 -0
  202. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.148_2026-08-27-09-08-35_patch_23814c0b-7f77-489c-b4a8-ceadd18146e3 +0 -0
  203. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.149_2026-08-27-09-40-17_patch_8879d72e-a3d8-4abc-a16a-d9dcf75f0fa1 +0 -0
  204. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.150_2026-08-27-10-57-25_patch_afbe60ed-3e23-4d88-be3c-f800d7002a7d +0 -0
  205. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.151_2026-08-28-09-02-46_patch_1d4ca23b-aeae-4ea8-96b1-8cf57371f29d +0 -0
  206. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.152_2026-08-28-15-37-24_patch_c9d0bdc1-a7e1-432b-92b9-92dc76fe0c78 +0 -0
  207. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.153_2026-08-29-09-03-27_patch_7531573a-1b33-4092-aa9c-0e65f47b201f +0 -0
  208. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.154_2026-08-29-11-56-35_patch_919f5787-39c8-4dc1-ae6a-f27c28380f21 +0 -0
  209. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.155_2026-08-29-15-15-59_patch_822f9ed8-c366-4e5f-9791-dee8467cf3ce +0 -0
  210. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.156_2026-08-29-16-19-01_patch_3ac2bf36-20f7-4c9f-9fdb-295d4466d59e +0 -0
  211. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.157_2026-08-30-17-32-17_patch_4302354c-c9c5-4be7-acd3-542872a748d8 +0 -0
  212. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.158_2026-08-31-09-28-33_patch_3523774f-c25d-4102-8c1a-92fff046a48d +0 -0
  213. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.159_2026-08-31-10-31-01_patch_fe3e6290-2553-4154-a0a0-8b8a418280ed +0 -0
  214. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.160_2026-08-31-11-23-39_patch_e701a085-3d23-4212-b0af-73b1d419a4c1 +0 -0
  215. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.161_2026-08-31-12-41-01_patch_074d7bde-c493-44db-bc15-e81fd91e2921 +0 -0
  216. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.162_2026-08-31-13-58-06_patch_84db1d60-4280-433b-bd3a-22e5611cd315 +0 -0
  217. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.163_2026-08-31-15-25-54_patch_1931c5ba-73df-48cb-8dcb-555ace0af267 +0 -0
  218. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.163_2026-08-31-15-44-37_patch_3962e805-2a92-494a-a87b-b6e6d66c40a0 +0 -0
  219. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.165_2026-08-31-19-48-59_patch_86e5b923-2b99-4b86-b542-469b197614be +0 -0
  220. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.166_2026-09-01-07-39-57_patch_c344892f-d542-4e7b-8f27-02365a411e15 +0 -0
  221. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.167_2026-09-01-08-21-53_patch_e199d419-282a-4dbb-8756-cf98b7037e2b +0 -0
  222. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.168_2026-09-01-09-12-31_patch_235c9fe0-da15-431d-bb56-01e2b9b15f4b +0 -0
  223. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.169_2026-09-01-11-54-19_patch_98b617ab-d130-42b5-93f2-19cae56d4c4c +0 -0
  224. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.170_2026-09-02-09-27-28_patch_e448d2e6-b7ec-4235-96bf-0173b3623c87 +0 -0
  225. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.171_2026-09-02-12-52-44_patch_e6a241c2-1d62-482c-a9eb-9e3373395c50 +0 -0
  226. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.172_2026-09-04-08-47-04_patch_daae079f-c104-4fcd-bb57-7bff68e80ad9 +0 -0
  227. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.173_2026-09-04-12-34-42_patch_399c4cbd-0c28-4dfd-a4ec-e569420a36e4 +0 -0
  228. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.174_2026-09-04-13-08-48_patch_f5cfe3d5-808e-45e4-bafc-00d0554838ee +0 -0
  229. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.175_2026-09-04-17-20-46_patch_1ef542fa-5d8e-4d90-aa15-9fc4cea3dfec +0 -0
  230. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.176_2026-09-05-08-25-05_patch_ced5521f-f9da-4640-a921-95fcb5cd2e6d +0 -0
  231. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.177_2026-09-05-09-00-16_patch_803c1ad4-a9af-4953-92c5-d882dec03ea2 +0 -0
  232. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.178_2026-09-05-09-30-34_patch_012f6259-2e3f-4591-9806-1920fd06cb1f +0 -0
  233. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.179_2026-09-05-09-33-43_patch_f4bdf28c-d584-47a5-b699-8c883330162c +0 -0
  234. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.180_2026-09-05-12-02-21_patch_34a14b01-d22d-44a8-ac63-be0370a61422 +0 -0
  235. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.181_2026-09-05-12-47-46_patch_56b18867-99f6-4d5c-8215-7b9d60d34010 +0 -0
  236. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.182_2026-09-05-13-35-18_patch_61b7d4d1-73c8-4603-9b0c-593e7405587f +0 -0
  237. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.183_2026-09-06-07-27-09_patch_d76331b2-e3a3-4c0b-8412-ecd131b6ac02 +0 -0
  238. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.184_2026-09-06-10-21-47_patch_7680b7a1-49f0-4eef-b12e-4c854407448c +0 -0
  239. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.185_2026-09-06-10-30-40_patch_e56c2183-77f8-44ef-a92e-7377ea6ce8c1 +0 -0
  240. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.186_2026-09-07-10-00-51_patch_67de5683-d208-4bc0-8fb6-7677377908e7 +0 -0
  241. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.187_2026-09-07-10-18-13_patch_2086cee2-276b-48f7-80ce-6a17397b9541 +0 -0
  242. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.188_2026-09-07-12-51-28_patch_d6590822-068f-4a19-814d-34bbf204ba6e +0 -0
  243. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.189_2026-09-07-12-55-23_patch_7e0fb04b-4d40-4490-974f-c74ba2ae55a1 +0 -0
  244. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.190_2026-09-08-08-58-03_patch_15e3ac1e-4475-4272-bdd8-d00bb0db8f17 +0 -0
  245. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.191_2026-09-08-09-55-58_patch_3d350e50-ee53-4282-bc75-d2251142c46e +0 -0
  246. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.192_2026-09-08-11-12-21_patch_0733223b-1ae2-4b5b-897f-dfc57574ff83 +0 -0
  247. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.193_2026-09-08-21-48-17_patch_8d07d4e6-3555-4720-85c9-9452570fae2d +0 -0
  248. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.194_2026-09-09-07-53-43_patch_69559429-aa42-4b62-9bd7-cdfded1c00d0 +0 -0
  249. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.195_2026-09-09-09-55-40_patch_bbf67f1d-3b9a-43a2-b1bc-22df3fed8a34 +0 -0
  250. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.196_2026-09-09-09-59-47_patch_70d76812-7b3c-4192-ad49-fcaccc29b0da +0 -0
  251. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.197_2026-09-09-13-06-06_patch_d455be0b-5421-492a-b952-fab0fd8110f8 +0 -0
  252. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.198_2026-09-09-13-14-34_patch_267f54e5-311e-435e-882f-8e19191325ea +0 -0
  253. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.199_2026-09-09-22-24-18_patch_81e3e453-ca0e-42fa-9c21-8f94d43c05f2 +0 -0
  254. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.200_2026-09-10-07-19-50_patch_911714fa-1fa3-4165-bfe6-d10c650bf5bf +0 -0
  255. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.201_2026-09-10-10-14-19_patch_864015f2-b0b0-4563-a1c8-155629cb9126 +0 -0
  256. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.202_2026-09-10-11-00-05_patch_18270ecf-e770-4e69-8bcf-e5143c39929b +0 -0
  257. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.203_2026-09-10-11-10-41_patch_ff273ab1-44f3-4bc0-b184-3396e943df04 +0 -0
  258. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.204_2026-09-10-13-02-02_patch_d4ee41e2-d13c-4941-8605-3f1a42b56b22 +0 -0
  259. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.205_2026-09-10-13-57-50_patch_284df67e-5957-4b0c-bc64-5581db6ddecc +0 -0
  260. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.206_2026-09-11-10-18-50_patch_1ac7e410-0e62-4eef-bbe4-ebf93c9d0869 +0 -0
  261. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3331595d9 +0 -0
  262. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb +0 -0
  263. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d +0 -0
  264. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0 +0 -0
  265. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/__init__.py +0 -0
  266. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli/version/read_version.py +0 -0
  267. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli.egg-info/dependency_links.txt +0 -0
  268. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli.egg-info/entry_points.txt +0 -0
  269. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli.egg-info/not-zip-safe +0 -0
  270. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli.egg-info/requires.txt +0 -0
  271. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/ellf_cli.egg-info/top_level.txt +0 -0
  272. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/pyproject.toml +0 -0
  273. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/setup.cfg +0 -0
  274. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/setup.py +0 -0
  275. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_appdirs.py +0 -0
  276. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_auth.py +0 -0
  277. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_config.py +0 -0
  278. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_errors.py +0 -0
  279. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_files_cp.py +0 -0
  280. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_files_cp_helpers.py +0 -0
  281. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_helm.py +0 -0
  282. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_import_export.py +0 -0
  283. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_info.py +0 -0
  284. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_config_io.py +0 -0
  285. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_configure.py +0 -0
  286. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_deploy_node_labels.py +0 -0
  287. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_get_terraform.py +0 -0
  288. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_init.py +0 -0
  289. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_provision.py +0 -0
  290. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_start_fixes.py +0 -0
  291. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_start_validation.py +0 -0
  292. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_state_bucket.py +0 -0
  293. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_infra_terraform_init.py +0 -0
  294. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_invalid_secrets.py +0 -0
  295. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_job_list_project_filter.py +0 -0
  296. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_jobs_list_unmatched.py +0 -0
  297. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_key_pair.py +0 -0
  298. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_login.py +0 -0
  299. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_logout.py +0 -0
  300. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_main.py +0 -0
  301. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_org_select.py +0 -0
  302. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_plans.py +0 -0
  303. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_projects.py +0 -0
  304. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_publish_build_poll.py +0 -0
  305. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_publish_data.py +0 -0
  306. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_publish_import_root.py +0 -0
  307. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_publish_requirements.py +0 -0
  308. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_pypi_auth.py +0 -0
  309. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_query.py +0 -0
  310. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_recipe_file.py +0 -0
  311. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_recipes.py +0 -0
  312. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_state.py +0 -0
  313. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_support.py +0 -0
  314. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_todos.py +0 -0
  315. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_ty.py +0 -0
  316. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_ui.py +0 -0
  317. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_ui_extras.py +0 -0
  318. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_usage_counts.py +0 -0
  319. {ellf_cli-18.0.3 → ellf_cli-18.0.6}/tests/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ellf-cli
3
- Version: 18.0.3
3
+ Version: 18.0.6
4
4
  Summary: Ellf Command Line Interface
5
5
  Home-page: https://prodi.gy
6
6
  Author: ExplosionAI GmbH
@@ -215,7 +215,7 @@ List the agents in a project. Uses your default project unless --project is give
215
215
  | Argument | Type | Description | Default |
216
216
  | --- | --- | --- | --- |
217
217
  | `--project` | `str` | Name, slug, or ID of agent's project or the last project if not set | `None` |
218
- | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'state'] | `['id', 'name', 'state']` |
218
+ | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'icon', 'state'] | `['id', 'name', 'state']` |
219
219
  | `--json` | `bool` | Output the result as JSON | `False` |
220
220
 
221
221
  #### `ellf agents info`
@@ -227,7 +227,7 @@ Print information about an agent on the cluster
227
227
  | `name_or_id` | `Union[str, UUID]` | Name or ID of the agent | |
228
228
  | `--project` | `str` | Name, slug, or ID of agent's project or the last project if not set | `None` |
229
229
  | `--cluster` | `str` | Name, slug, or ID of the cluster to search for agent name (or the last cluster if not set) | `None` |
230
- | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'recipe_name', 'recipe_title', 'project_name', 'error', 'last_execution_id', 'related_tasks', 'created_by_user'] | `None` |
230
+ | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'icon', 'recipe_name', 'recipe_title', 'project_name', 'error', 'last_execution_id', 'related_tasks', 'created_by_user'] | `None` |
231
231
  | `--json` | `bool` | Output the result as JSON | `False` |
232
232
 
233
233
  #### `ellf agents logs`
@@ -1431,7 +1431,7 @@ List all users in the organization
1431
1431
 
1432
1432
  | Argument | Type | Description | Default |
1433
1433
  | --- | --- | --- | --- |
1434
- | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'org_id', 'org_name', 'person_id', 'email', 'avatar_url', 'locale', 'is_org_admin', 'is_org_developer', 'last_cluster_id', 'last_project_id', 'deactivated_at', 'role'] | `['id', 'name', 'email', 'role']` |
1434
+ | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'org_id', 'org_name', 'person_id', 'email', 'avatar_url', 'locale', 'is_org_admin', 'is_org_developer', 'last_cluster_id', 'last_project_id', 'deactivated_at', 'role', 'status'] | `['id', 'name', 'email', 'role']` |
1435
1435
  | `--role` | `str` | Filter by role | `None` |
1436
1436
  | `--include-deactivated` | `bool` | Include deactivated users | `False` |
1437
1437
  | `--json` | `bool` | Output the result as JSON | `False` |
@@ -1505,7 +1505,7 @@ List pending invitations
1505
1505
 
1506
1506
  | Argument | Type | Description | Default |
1507
1507
  | --- | --- | --- | --- |
1508
- | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'email', 'claimed', 'vars', 'role'] | `['id', 'email', 'role', 'claimed']` |
1508
+ | `--select` | `list[str]` | Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'email', 'claimed', 'vars', 'created_by_id', 'role'] | `['id', 'email', 'role', 'claimed']` |
1509
1509
  | `--all` | `bool` | Also include invitations that have already been claimed | `False` |
1510
1510
  | `--json` | `bool` | Output the result as JSON | `False` |
1511
1511
 
@@ -10,6 +10,7 @@ from wasabi import msg
10
10
  from ellf_pam_sdk import Client as PamClient
11
11
  from ellf_pam_sdk.errors import EllfError
12
12
  from ellf_pam_sdk.models import (
13
+ AnnotatorType,
13
14
  InvitationDetail,
14
15
  InvitationReading,
15
16
  InvitationSummary,
@@ -34,6 +35,16 @@ from ._state import get_auth_state
34
35
  UserRoleName = Literal["admin", "developer", "annotator"]
35
36
 
36
37
 
38
+ # What `users list` shows when nothing is asked for. Named because the command
39
+ # adds to it when deactivated users are in the table, and can only tell that
40
+ # the caller wants the default by comparing against it.
41
+ DEFAULT_SELECT = ["id", "name", "email", "role"]
42
+
43
+
44
+ def _status_of(user: Union[UserSummary, UserDetail]) -> str:
45
+ return "deactivated" if user.deactivated_at else "active"
46
+
47
+
37
48
  def _role_of(user: Union[UserSummary, UserDetail]) -> str:
38
49
  if user.is_org_admin:
39
50
  return "admin"
@@ -104,7 +115,7 @@ def _is_assigned(client: PamClient, task_id: UUID, user_id: UUID) -> bool:
104
115
  so ``is_added`` on a user row is what actually answers this.
105
116
  """
106
117
  return any(
107
- a.id == user_id and a.is_added and a.annotator_type != "agent"
118
+ a.id == user_id and a.is_added and a.annotator_type != AnnotatorType.agent
108
119
  for a in client.task.users(task_id)
109
120
  )
110
121
 
@@ -116,7 +127,7 @@ def _is_assigned(client: PamClient, task_id: UUID, user_id: UUID) -> bool:
116
127
  select=Arg(
117
128
  "--select",
118
129
  help=Messages.select.format(
119
- opts=builtins.list(UserSummary.model_fields) + ["role"]
130
+ opts=builtins.list(UserSummary.model_fields) + ["role", "status"]
120
131
  ),
121
132
  ),
122
133
  role=Arg("--role", help=Messages.filter_by.format(filter="role")),
@@ -127,7 +138,7 @@ def _is_assigned(client: PamClient, task_id: UUID, user_id: UUID) -> bool:
127
138
  # fmt: on
128
139
  )
129
140
  def list(
130
- select: builtins.list[str] = ["id", "name", "email", "role"],
141
+ select: builtins.list[str] = DEFAULT_SELECT,
131
142
  role: Optional[UserRoleName] = None,
132
143
  include_deactivated: bool = False,
133
144
  as_json: bool = False,
@@ -137,7 +148,14 @@ def list(
137
148
  query = _role_query(role) if role is not None else UserReading()
138
149
  query.include_deactivated = include_deactivated
139
150
  items = builtins.list(client.user.all(query))
140
- rows = [{**u.model_dump(), "role": _role_of(u)} for u in items]
151
+ rows = [
152
+ {**u.model_dump(), "role": _role_of(u), "status": _status_of(u)} for u in items
153
+ ]
154
+ # The status column earns its place only where the table can hold both
155
+ # kinds: without the flag every row reads "active", which is a column
156
+ # saying nothing. A caller who named their own columns keeps them.
157
+ if include_deactivated and select == DEFAULT_SELECT:
158
+ select = [*select, "status"]
141
159
  print_table_with_select(rows, select=select, as_json=as_json)
142
160
  return items
143
161
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "prog": "ellf",
3
3
  "help": "Ellf Command Line Interface.",
4
- "version": "18.0.2",
4
+ "version": "18.0.5",
5
5
  "extra_key": "_extra",
6
6
  "commands": {
7
7
  "actions": {
@@ -1255,9 +1255,9 @@
1255
1255
  "id": "select",
1256
1256
  "option": "--select",
1257
1257
  "short": null,
1258
- "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'state']",
1258
+ "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'icon', 'state']",
1259
1259
  "default": "['id', 'name', 'state']",
1260
- "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'state'] (list[str])",
1260
+ "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'icon', 'state'] (list[str])",
1261
1261
  "action": null,
1262
1262
  "choices": null,
1263
1263
  "has_converter": true,
@@ -1329,9 +1329,9 @@
1329
1329
  "id": "select",
1330
1330
  "option": "--select",
1331
1331
  "short": null,
1332
- "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'recipe_name', 'recipe_title', 'project_name', 'error', 'last_execution_id', 'related_tasks', 'created_by_user']",
1332
+ "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'icon', 'recipe_name', 'recipe_title', 'project_name', 'error', 'last_execution_id', 'related_tasks', 'created_by_user']",
1333
1333
  "default": null,
1334
- "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'recipe_name', 'recipe_title', 'project_name', 'error', 'last_execution_id', 'related_tasks', 'created_by_user'] (list[str])",
1334
+ "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'cluster_id', 'name', 'project_id', 'job_type', 'plan', 'cli_command', 'last_execution_started', 'icon', 'recipe_name', 'recipe_title', 'project_name', 'error', 'last_execution_id', 'related_tasks', 'created_by_user'] (list[str])",
1335
1335
  "action": null,
1336
1336
  "choices": null,
1337
1337
  "has_converter": true,
@@ -8401,9 +8401,9 @@
8401
8401
  "id": "select",
8402
8402
  "option": "--select",
8403
8403
  "short": null,
8404
- "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'org_id', 'org_name', 'person_id', 'email', 'avatar_url', 'locale', 'is_org_admin', 'is_org_developer', 'last_cluster_id', 'last_project_id', 'deactivated_at', 'role']",
8404
+ "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'org_id', 'org_name', 'person_id', 'email', 'avatar_url', 'locale', 'is_org_admin', 'is_org_developer', 'last_cluster_id', 'last_project_id', 'deactivated_at', 'role', 'status']",
8405
8405
  "default": "['id', 'name', 'email', 'role']",
8406
- "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'org_id', 'org_name', 'person_id', 'email', 'avatar_url', 'locale', 'is_org_admin', 'is_org_developer', 'last_cluster_id', 'last_project_id', 'deactivated_at', 'role'] (list[str])",
8406
+ "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'name', 'org_id', 'org_name', 'person_id', 'email', 'avatar_url', 'locale', 'is_org_admin', 'is_org_developer', 'last_cluster_id', 'last_project_id', 'deactivated_at', 'role', 'status'] (list[str])",
8407
8407
  "action": null,
8408
8408
  "choices": null,
8409
8409
  "has_converter": true,
@@ -8801,9 +8801,9 @@
8801
8801
  "id": "select",
8802
8802
  "option": "--select",
8803
8803
  "short": null,
8804
- "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'email', 'claimed', 'vars', 'role']",
8804
+ "orig_help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'email', 'claimed', 'vars', 'created_by_id', 'role']",
8805
8805
  "default": "['id', 'email', 'role', 'claimed']",
8806
- "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'email', 'claimed', 'vars', 'role'] (list[str])",
8806
+ "help": "Comma-separated fields to select and show in output. Available: ['id', 'created', 'updated', 'org_id', 'email', 'claimed', 'vars', 'created_by_id', 'role'] (list[str])",
8807
8807
  "action": null,
8808
8808
  "choices": null,
8809
8809
  "has_converter": true,
@@ -0,0 +1,3 @@
1
+ 18.0.3
2
+ patch
3
+ 58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec
@@ -0,0 +1,3 @@
1
+ 18.0.4
2
+ patch
3
+ b6c79d55-8f85-4f47-a304-df52b122c38c
@@ -0,0 +1,3 @@
1
+ 18.0.5
2
+ patch
3
+ 9b111116-5e62-472a-b72c-d1bbafa22c97
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ellf-cli
3
- Version: 18.0.3
3
+ Version: 18.0.6
4
4
  Summary: Ellf Command Line Interface
5
5
  Home-page: https://prodi.gy
6
6
  Author: ExplosionAI GmbH
@@ -264,6 +264,9 @@ ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3
264
264
  ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb
265
265
  ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d
266
266
  ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0
267
+ ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec
268
+ ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c
269
+ ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97
267
270
  ellf_cli/version/__init__.py
268
271
  ellf_cli/version/read_version.py
269
272
  tests/test_appdirs.py
@@ -311,4 +314,5 @@ tests/test_ui.py
311
314
  tests/test_ui_extras.py
312
315
  tests/test_usage_counts.py
313
316
  tests/test_users_assign.py
317
+ tests/test_users_list.py
314
318
  tests/test_util.py
@@ -8,7 +8,12 @@ import pytest
8
8
 
9
9
  from ellf_cli.commands import users as users_cmd
10
10
  from ellf_cli.errors import CLIError
11
- from ellf_pam_sdk.models import EmailReturning, TaskAnnotator, UserDetail
11
+ from ellf_pam_sdk.models import (
12
+ AnnotatorType,
13
+ EmailReturning,
14
+ TaskAnnotator,
15
+ UserDetail,
16
+ )
12
17
 
13
18
 
14
19
  def _user(*, admin: bool = False, developer: bool = False) -> UserDetail:
@@ -35,7 +40,7 @@ def _annotator(
35
40
  user_id: UUID,
36
41
  *,
37
42
  is_added: bool = True,
38
- annotator_type: str = "user",
43
+ annotator_type: AnnotatorType = AnnotatorType.user,
39
44
  ) -> TaskAnnotator:
40
45
  return TaskAnnotator(
41
46
  id=user_id,
@@ -205,7 +210,9 @@ def test_unassign_does_not_match_an_agent_row(env):
205
210
  `ellf agents unassign`, so a same-id agent row must not stand in for a
206
211
  user assignment."""
207
212
  user = _user()
208
- task_client, _ = env(user, [_annotator(user.id, annotator_type="agent")])
213
+ task_client, _ = env(
214
+ user, [_annotator(user.id, annotator_type=AnnotatorType.agent)]
215
+ )
209
216
 
210
217
  with pytest.raises(CLIError):
211
218
  users_cmd.unassign(user.email, task="ner-task")
@@ -0,0 +1,77 @@
1
+ from datetime import datetime, timezone
2
+ from types import SimpleNamespace
3
+ from typing import Any
4
+ from uuid import uuid4
5
+
6
+ import pytest
7
+
8
+ from ellf_cli.commands import users as users_cmd
9
+ from ellf_pam_sdk.models import UserSummary
10
+
11
+
12
+ def _user(name: str, *, deactivated: bool = False) -> UserSummary:
13
+ now = datetime.now(timezone.utc)
14
+ return UserSummary(
15
+ id=uuid4(),
16
+ created=now,
17
+ updated=now,
18
+ name=name,
19
+ org_id=uuid4(),
20
+ org_name="Explosion",
21
+ person_id=uuid4(),
22
+ email=f"{name.lower()}@example.com",
23
+ avatar_url="",
24
+ locale="en",
25
+ is_org_admin=False,
26
+ is_org_developer=False,
27
+ deactivated_at=now if deactivated else None,
28
+ )
29
+
30
+
31
+ @pytest.fixture
32
+ def listed(monkeypatch):
33
+ """Run `users list` against a fixed set of people, and capture the table."""
34
+ printed: dict[str, Any] = {}
35
+
36
+ def _run(users: list[UserSummary], **kwargs: Any) -> dict[str, Any]:
37
+ auth = SimpleNamespace(
38
+ client=SimpleNamespace(user=SimpleNamespace(all=lambda _query: users))
39
+ )
40
+ monkeypatch.setattr(users_cmd, "get_auth_state", lambda: auth)
41
+ monkeypatch.setattr(
42
+ users_cmd,
43
+ "print_table_with_select",
44
+ lambda rows, select, as_json: printed.update(rows=rows, select=select),
45
+ )
46
+ users_cmd.list(**kwargs)
47
+ return printed
48
+
49
+ return _run
50
+
51
+
52
+ def test_listing_deactivated_users_says_which_they_are(listed):
53
+ """Both kinds are in the table, so a column has to tell them apart."""
54
+ printed = listed(
55
+ [_user("Ann"), _user("Bo", deactivated=True)], include_deactivated=True
56
+ )
57
+
58
+ assert printed["select"] == ["id", "name", "email", "role", "status"]
59
+ assert [row["status"] for row in printed["rows"]] == ["active", "deactivated"]
60
+
61
+
62
+ def test_the_default_listing_spends_no_column_on_status(listed):
63
+ """Without the flag every row is active, and the column says nothing."""
64
+ printed = listed([_user("Ann")])
65
+
66
+ assert printed["select"] == ["id", "name", "email", "role"]
67
+
68
+
69
+ def test_chosen_columns_are_left_alone(listed):
70
+ """Asking for columns is asking for those columns."""
71
+ printed = listed(
72
+ [_user("Ann", deactivated=True)],
73
+ include_deactivated=True,
74
+ select=["name", "email"],
75
+ )
76
+
77
+ assert printed["select"] == ["name", "email"]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes