hap-cli 0.8.7__tar.gz → 0.8.8__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 (215) hide show
  1. {hap_cli-0.8.7 → hap_cli-0.8.8}/PKG-INFO +1 -1
  2. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/__init__.py +1 -1
  3. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/icon_cmd.py +17 -11
  4. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/worksheet_templates.py +7 -1
  5. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_core.py +47 -0
  6. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli.egg-info/PKG-INFO +1 -1
  7. {hap_cli-0.8.7 → hap_cli-0.8.8}/MANIFEST.in +0 -0
  8. {hap_cli-0.8.7 → hap_cli-0.8.8}/README.md +0 -0
  9. {hap_cli-0.8.7 → hap_cli-0.8.8}/app_live_tests/__init__.py +0 -0
  10. {hap_cli-0.8.7 → hap_cli-0.8.8}/app_live_tests/__main__.py +0 -0
  11. {hap_cli-0.8.7 → hap_cli-0.8.8}/app_live_tests/config.py +0 -0
  12. {hap_cli-0.8.7 → hap_cli-0.8.8}/app_live_tests/harness.py +0 -0
  13. {hap_cli-0.8.7 → hap_cli-0.8.8}/app_live_tests/smoke.py +0 -0
  14. {hap_cli-0.8.7 → hap_cli-0.8.8}/app_live_tests/state.py +0 -0
  15. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/README.md +0 -0
  16. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/README_CN.md +0 -0
  17. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/__main__.py +0 -0
  18. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/__init__.py +0 -0
  19. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/app_cmd.py +0 -0
  20. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/app_editor_cmd.py +0 -0
  21. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/auth_cmd.py +0 -0
  22. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/calendar_cmd.py +0 -0
  23. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/chart_cmd.py +0 -0
  24. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/chat_cmd.py +0 -0
  25. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/chatbot_cmd.py +0 -0
  26. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/config_cmd.py +0 -0
  27. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/contact_cmd.py +0 -0
  28. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/department_cmd.py +0 -0
  29. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/group_cmd.py +0 -0
  30. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/instance_cmd.py +0 -0
  31. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/node_cmd.py +0 -0
  32. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/optionset_cmd.py +0 -0
  33. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/page_cmd.py +0 -0
  34. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/post_cmd.py +0 -0
  35. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/record_cmd.py +0 -0
  36. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/region_cmd.py +0 -0
  37. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/role_cmd.py +0 -0
  38. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/update_cmd.py +0 -0
  39. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/upload_cmd.py +0 -0
  40. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/v3_registry.py +0 -0
  41. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/workflow_cmd.py +0 -0
  42. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/commands/worksheet_cmd.py +0 -0
  43. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/context.py +0 -0
  44. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/__init__.py +0 -0
  45. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/action_spec_adapter.py +0 -0
  46. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/app.py +0 -0
  47. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/auth.py +0 -0
  48. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/calendar_mod.py +0 -0
  49. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/chart.py +0 -0
  50. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/chat.py +0 -0
  51. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/chatbot.py +0 -0
  52. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/cli_access.py +0 -0
  53. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/contact.py +0 -0
  54. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/control_type_codes.py +0 -0
  55. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/department.py +0 -0
  56. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/__init__.py +0 -0
  57. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/_hapmeta/__init__.py +0 -0
  58. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/_hapmeta/control_type_codes.py +0 -0
  59. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/apply.py +0 -0
  60. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/componentlower.py +0 -0
  61. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/editspec.py +0 -0
  62. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/errors.py +0 -0
  63. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/fieldlower.py +0 -0
  64. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/jsonschema_mini.py +0 -0
  65. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/models.py +0 -0
  66. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/ops.py +0 -0
  67. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/planner.py +0 -0
  68. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/editor/reader.py +0 -0
  69. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/field_normalizer.py +0 -0
  70. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/field_spec_adapter.py +0 -0
  71. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/filter_translator.py +0 -0
  72. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/flow_node.py +0 -0
  73. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/global_meta.py +0 -0
  74. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/group.py +0 -0
  75. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/icon_index.py +0 -0
  76. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/instance.py +0 -0
  77. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/logger.py +0 -0
  78. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/optionset.py +0 -0
  79. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/page.py +0 -0
  80. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/post.py +0 -0
  81. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/record.py +0 -0
  82. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/response_crypto.py +0 -0
  83. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/role.py +0 -0
  84. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/role_perm_builder.py +0 -0
  85. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/session.py +0 -0
  86. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/token_crypto.py +0 -0
  87. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/update.py +0 -0
  88. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/upload.py +0 -0
  89. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/v3/__init__.py +0 -0
  90. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/v3/dispatcher.py +0 -0
  91. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/v3/render.py +0 -0
  92. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/v3/schema.py +0 -0
  93. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/view_spec_adapter.py +0 -0
  94. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/workflow.py +0 -0
  95. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/workflow_node_dsl.py +0 -0
  96. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/core/worksheet.py +0 -0
  97. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/hap_cli.py +0 -0
  98. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/i18n.py +0 -0
  99. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/locale/__init__.py +0 -0
  100. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/locale/messages.json +0 -0
  101. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/locale/messages.schema.json +0 -0
  102. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/__init__.py +0 -0
  103. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/conftest.py +0 -0
  104. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_app_editor.py +0 -0
  105. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_app_export_usage.py +0 -0
  106. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_auth_prerelease.py +0 -0
  107. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_bug_036430.py +0 -0
  108. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_chart.py +0 -0
  109. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_cli_access.py +0 -0
  110. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_config_cmd.py +0 -0
  111. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_destructive_confirm_cli.py +0 -0
  112. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_full_e2e.py +0 -0
  113. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_global_meta.py +0 -0
  114. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_i18n.py +0 -0
  115. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_instance_history_cli.py +0 -0
  116. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration.py +0 -0
  117. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_approval.py +0 -0
  118. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_approval_actions.py +0 -0
  119. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_calendar.py +0 -0
  120. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_destructive.py +0 -0
  121. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_misc.py +0 -0
  122. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_post.py +0 -0
  123. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_social.py +0 -0
  124. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_v3.py +0 -0
  125. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_workflow.py +0 -0
  126. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_integration_worksheet_extra.py +0 -0
  127. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_multi_profile.py +0 -0
  128. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_org_approval_v3_semantic_cli.py +0 -0
  129. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_org_id_cli.py +0 -0
  130. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_org_id_docs.py +0 -0
  131. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_parameter_conventions.py +0 -0
  132. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_parameter_mapping_registry.py +0 -0
  133. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_record_batch_v3_semantic_cli.py +0 -0
  134. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_record_field_alias.py +0 -0
  135. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_record_v3_semantic_cli.py +0 -0
  136. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_semantic_types_registry.py +0 -0
  137. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_update.py +0 -0
  138. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_v3_api_schema_loader.py +0 -0
  139. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_v3_dispatcher.py +0 -0
  140. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_v3_registry_coverage.py +0 -0
  141. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_v3_session.py +0 -0
  142. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_v3_yaml_translation.py +0 -0
  143. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_workflow_list_cli.py +0 -0
  144. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_workflow_v3_semantic_cli.py +0 -0
  145. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_worksheet_crud_cli.py +0 -0
  146. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/tests/test_worksheet_v3_semantic_cli.py +0 -0
  147. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/utils/__init__.py +0 -0
  148. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/utils/formatting.py +0 -0
  149. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/utils/options.py +0 -0
  150. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli/utils/parameter_mapping.py +0 -0
  151. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli.egg-info/SOURCES.txt +0 -0
  152. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli.egg-info/dependency_links.txt +0 -0
  153. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli.egg-info/entry_points.txt +0 -0
  154. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli.egg-info/requires.txt +0 -0
  155. {hap_cli-0.8.7 → hap_cli-0.8.8}/hap_cli.egg-info/top_level.txt +0 -0
  156. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/__init__.py +0 -0
  157. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/__main__.py +0 -0
  158. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/_wftest.py +0 -0
  159. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/charts.py +0 -0
  160. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/cleanup.py +0 -0
  161. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/compiler.py +0 -0
  162. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/config.py +0 -0
  163. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/errors.py +0 -0
  164. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/executor.py +0 -0
  165. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/fields.py +0 -0
  166. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/hap.py +0 -0
  167. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/recording/__init__.py +0 -0
  168. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/recording/console.py +0 -0
  169. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/recording/jsonl.py +0 -0
  170. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/recording/mirror.py +0 -0
  171. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/recording/report.py +0 -0
  172. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/schema.py +0 -0
  173. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/seed/__init__.py +0 -0
  174. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/seed/cli.py +0 -0
  175. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/seed/executor.py +0 -0
  176. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/seed/template.py +0 -0
  177. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/selftest.py +0 -0
  178. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/smoke.py +0 -0
  179. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/step.py +0 -0
  180. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/steps.py +0 -0
  181. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/store.py +0 -0
  182. {hap_cli-0.8.7 → hap_cli-0.8.8}/live_tests/workflow_dsl.py +0 -0
  183. {hap_cli-0.8.7 → hap_cli-0.8.8}/setup.cfg +0 -0
  184. {hap_cli-0.8.7 → hap_cli-0.8.8}/setup.py +0 -0
  185. {hap_cli-0.8.7 → hap_cli-0.8.8}/skills/hap-cli-app-editor/scripts/editspec/component.schema.json +0 -0
  186. {hap_cli-0.8.7 → hap_cli-0.8.8}/skills/hap-cli-app-editor/scripts/editspec/custom-action.schema.json +0 -0
  187. {hap_cli-0.8.7 → hap_cli-0.8.8}/skills/hap-cli-app-editor/scripts/editspec/envelope.schema.json +0 -0
  188. {hap_cli-0.8.7 → hap_cli-0.8.8}/skills/hap-cli-app-editor/scripts/editspec/field.schema.json +0 -0
  189. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/INDEX.json +0 -0
  190. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/add_member_to_role.yaml +0 -0
  191. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/batch_delete_records.yaml +0 -0
  192. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/create_optionset.yaml +0 -0
  193. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/create_role.yaml +0 -0
  194. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/delete_optionset.yaml +0 -0
  195. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/delete_record.yaml +0 -0
  196. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/delete_role.yaml +0 -0
  197. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/delete_worksheet.yaml +0 -0
  198. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_app_info.yaml +0 -0
  199. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_app_knowledge_list.yaml +0 -0
  200. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_app_worksheets_list.yaml +0 -0
  201. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_optionset_list.yaml +0 -0
  202. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_record_details.yaml +0 -0
  203. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_record_discussions.yaml +0 -0
  204. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_record_list.yaml +0 -0
  205. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_record_logs.yaml +0 -0
  206. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_record_pivot_data.yaml +0 -0
  207. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_record_relations.yaml +0 -0
  208. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_record_share_link.yaml +0 -0
  209. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_regions.yaml +0 -0
  210. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_role_details.yaml +0 -0
  211. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/get_role_list.yaml +0 -0
  212. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/knowledge_search.yaml +0 -0
  213. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/leave_all_roles.yaml +0 -0
  214. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/remove_member_from_role.yaml +0 -0
  215. {hap_cli-0.8.7 → hap_cli-0.8.8}/sources/v3-api-schema/update_optionset.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hap-cli
3
- Version: 0.8.7
3
+ Version: 0.8.8
4
4
  Summary: CLI harness for MingDAO HAP - Enterprise no-code platform
5
5
  Author: hap-cli
6
6
  License: Apache-2.0
@@ -1,3 +1,3 @@
1
1
  """CLI harness for MingDAO HAP (hap-cli)."""
2
2
 
3
- __version__ = "0.8.7"
3
+ __version__ = "0.8.8"
@@ -31,9 +31,10 @@ def _icon_table(rows):
31
31
  @click.option(
32
32
  "--limit",
33
33
  type=int,
34
- default=20,
35
- show_default=True,
36
- help="Maximum number of icons to return.",
34
+ default=None,
35
+ help="Maximum number of icons to return. Caps the result exactly — "
36
+ "--limit 5 returns at most 5. Defaults to 20 for a keyword search, "
37
+ "or the whole catalogue when browsing with no keyword.",
37
38
  )
38
39
  @pass_context
39
40
  def icon_search(ctx, query, limit):
@@ -41,19 +42,24 @@ def icon_search(ctx, query, limit):
41
42
 
42
43
  Pass one or more keywords; an icon must relate to every keyword to
43
44
  match. With no keyword, lists the whole catalogue. When fewer than
44
- 10 icons match, random suggestions top the list up to 10 so you
45
- always have something to pick from. Use the returned icon name with
46
- the --icon option of app/worksheet creation.
45
+ 10 icons match, random suggestions top the list up to 10 (never more
46
+ than --limit) so you always have something to pick from. Use the
47
+ returned icon name with the --icon option of app/worksheet creation.
47
48
  """
48
49
  try:
49
- # With no keyword the command acts as "browse all"; the limit
50
- # only narrows an actual keyword search.
51
- effective_limit = limit if query else None
52
- rows = ic_mod.search_icons(list(query), limit=effective_limit)
53
50
  if query:
51
+ # Keyword search: default to 20 matches; an explicit --limit
52
+ # is the exact upper bound, and the random-suggestion floor
53
+ # never exceeds it either.
54
+ effective_limit = limit if limit is not None else 20
55
+ rows = ic_mod.search_icons(list(query), limit=effective_limit)
54
56
  rows = ic_mod.pad_with_random_icons(
55
- rows, target=min(10, max(0, limit))
57
+ rows, target=min(10, max(0, effective_limit))
56
58
  )
59
+ else:
60
+ # Browse all by default; honor an explicit --limit if given.
61
+ # search_icons treats None as "no truncation".
62
+ rows = ic_mod.search_icons(list(query), limit=limit)
57
63
  ctx.output(rows, _icon_table)
58
64
  except Exception as e:
59
65
  ctx.handle_error(e)
@@ -407,8 +407,14 @@ def build_control(
407
407
  spec = dict(spec)
408
408
  child_type = spec.pop("type")
409
409
  child_name = spec.pop("name")
410
+ # row/col default to the child's position in the list, but a
411
+ # child spec may pin its own grid coordinates (the skill emits
412
+ # row/size per child). Seed defaults then let the spec win, so
413
+ # an explicit `row`/`col` in spec does not collide with a
414
+ # positional kwarg ("multiple values for 'row'").
415
+ child_kwargs = {"row": i, "col": 0, **spec}
410
416
  built.append(build_control(
411
- child_type, child_name, row=i, col=0, **spec,
417
+ child_type, child_name, **child_kwargs,
412
418
  ))
413
419
  relation_controls = built
414
420
 
@@ -6911,6 +6911,25 @@ class TestBuildControlAcceptsBuilderCode:
6911
6911
  )
6912
6912
  assert ctrl["type"] == 19 # AREA_PROVINCE
6913
6913
 
6914
+ def test_sublist_child_fields_carry_row_col_size(self):
6915
+ """A SUB_LIST child spec may carry its own grid keys (row/col/size).
6916
+ The inline-child loop pre-seeds row=i/col=0 as defaults, so passing
6917
+ a child whose spec also has `row` must NOT raise "multiple values
6918
+ for keyword argument 'row'" — the spec value wins."""
6919
+ from hap_cli.core import worksheet_templates as wt
6920
+ ctrl = wt.build_control(
6921
+ "SUB_LIST", "明细",
6922
+ child_fields=[
6923
+ {"type": "Text", "name": "产品名称", "row": 0, "size": 6},
6924
+ {"type": "Currency", "name": "单价",
6925
+ "row": 1, "col": 1, "size": 6, "extra": {"dot": 2}},
6926
+ ],
6927
+ )
6928
+ children = ctrl["relationControls"]
6929
+ assert [c["controlName"] for c in children] == ["产品名称", "单价"]
6930
+ # spec-provided row/col take precedence over the loop's defaults.
6931
+ assert (children[1]["row"], children[1]["col"]) == (1, 1)
6932
+
6914
6933
 
6915
6934
  class TestCreateWorksheetWithFields:
6916
6935
  """`worksheet create --fields JSON` aggregates AddWorkSheet +
@@ -9293,6 +9312,34 @@ class TestIconIndex:
9293
9312
  data = json.loads(result.output)
9294
9313
  assert len(data) == 3
9295
9314
 
9315
+ def test_cli_icon_search_small_limit_returns_exact_count(self):
9316
+ """An explicit --limit below the default returns exactly that many
9317
+ rows for a keyword with plenty of real matches."""
9318
+ runner = CliRunner()
9319
+ for limit in (1, 5):
9320
+ result = runner.invoke(
9321
+ cli, ["--json", "icon", "search", "统计", "--limit", str(limit)]
9322
+ )
9323
+ assert result.exit_code == 0, result.output
9324
+ data = json.loads(result.output)
9325
+ assert len(data) == limit
9326
+
9327
+ def test_cli_icon_search_no_keyword_honors_limit(self):
9328
+ """Browsing with no keyword still caps the result at --limit."""
9329
+ runner = CliRunner()
9330
+ result = runner.invoke(cli, ["--json", "icon", "search", "--limit", "5"])
9331
+ assert result.exit_code == 0, result.output
9332
+ data = json.loads(result.output)
9333
+ assert len(data) == 5
9334
+
9335
+ def test_cli_icon_search_no_keyword_no_limit_browses_all(self):
9336
+ """No keyword and no --limit still lists the whole catalogue."""
9337
+ runner = CliRunner()
9338
+ result = runner.invoke(cli, ["--json", "icon", "search"])
9339
+ assert result.exit_code == 0, result.output
9340
+ data = json.loads(result.output)
9341
+ assert len(data) >= 400
9342
+
9296
9343
  def test_cli_icon_list_default_page(self):
9297
9344
  runner = CliRunner()
9298
9345
  result = runner.invoke(cli, ["--json", "icon", "list"])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hap-cli
3
- Version: 0.8.7
3
+ Version: 0.8.8
4
4
  Summary: CLI harness for MingDAO HAP - Enterprise no-code platform
5
5
  Author: hap-cli
6
6
  License: Apache-2.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes