hap-cli 0.9.3__tar.gz → 0.9.4__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 (413) hide show
  1. {hap_cli-0.9.3 → hap_cli-0.9.4}/PKG-INFO +1 -1
  2. {hap_cli-0.9.3 → hap_cli-0.9.4}/app_live_tests/smoke.py +27 -0
  3. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/__init__.py +1 -1
  4. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/worksheet.py +16 -2
  5. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_core.py +72 -0
  6. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli.egg-info/PKG-INFO +1 -1
  7. {hap_cli-0.9.3 → hap_cli-0.9.4}/MANIFEST.in +0 -0
  8. {hap_cli-0.9.3 → hap_cli-0.9.4}/README.md +0 -0
  9. {hap_cli-0.9.3 → hap_cli-0.9.4}/app_live_tests/__init__.py +0 -0
  10. {hap_cli-0.9.3 → hap_cli-0.9.4}/app_live_tests/__main__.py +0 -0
  11. {hap_cli-0.9.3 → hap_cli-0.9.4}/app_live_tests/config.py +0 -0
  12. {hap_cli-0.9.3 → hap_cli-0.9.4}/app_live_tests/fixtures/__init__.py +0 -0
  13. {hap_cli-0.9.3 → hap_cli-0.9.4}/app_live_tests/fixtures/feedback_scenario.py +0 -0
  14. {hap_cli-0.9.3 → hap_cli-0.9.4}/app_live_tests/harness.py +0 -0
  15. {hap_cli-0.9.3 → hap_cli-0.9.4}/app_live_tests/state.py +0 -0
  16. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/README.md +0 -0
  17. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/README_CN.md +0 -0
  18. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/__main__.py +0 -0
  19. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/_entry.py +0 -0
  20. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/__init__.py +0 -0
  21. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/app_cmd.py +0 -0
  22. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/app_creator_cmd.py +0 -0
  23. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/app_editor_cmd.py +0 -0
  24. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/attachment_cmd.py +0 -0
  25. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/auth_cmd.py +0 -0
  26. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/calendar_cmd.py +0 -0
  27. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/chart_cmd.py +0 -0
  28. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/chat_cmd.py +0 -0
  29. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/chatbot_cmd.py +0 -0
  30. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/config_cmd.py +0 -0
  31. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/contact_cmd.py +0 -0
  32. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/department_cmd.py +0 -0
  33. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/group_cmd.py +0 -0
  34. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/guide_cmd.py +0 -0
  35. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/icon_cmd.py +0 -0
  36. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/instance_cmd.py +0 -0
  37. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/node_cmd.py +0 -0
  38. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/optionset_cmd.py +0 -0
  39. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/page_cmd.py +0 -0
  40. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/post_cmd.py +0 -0
  41. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/record_cmd.py +0 -0
  42. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/region_cmd.py +0 -0
  43. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/role_cmd.py +0 -0
  44. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/update_cmd.py +0 -0
  45. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/upload_cmd.py +0 -0
  46. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/v3_registry.py +0 -0
  47. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/workflow_cmd.py +0 -0
  48. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/commands/worksheet_cmd.py +0 -0
  49. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/context.py +0 -0
  50. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/__init__.py +0 -0
  51. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/action_spec_adapter.py +0 -0
  52. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app.py +0 -0
  53. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/__init__.py +0 -0
  54. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/_hapmeta/__init__.py +0 -0
  55. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/_hapmeta/control_type_codes.py +0 -0
  56. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/_hapmeta/worksheet_templates.py +0 -0
  57. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/charts.py +0 -0
  58. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/cleanup.py +0 -0
  59. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/compiler.py +0 -0
  60. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/config.py +0 -0
  61. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/design/design.schema.json +0 -0
  62. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/errors.py +0 -0
  63. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/examples/minimal.design.json +0 -0
  64. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/executor.py +0 -0
  65. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/fields.py +0 -0
  66. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/hap.py +0 -0
  67. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/merge.py +0 -0
  68. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/recording/__init__.py +0 -0
  69. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/recording/console.py +0 -0
  70. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/recording/jsonl.py +0 -0
  71. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/recording/mirror.py +0 -0
  72. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/recording/report.py +0 -0
  73. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/schema.py +0 -0
  74. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/INSTRUCTIONS.md +0 -0
  75. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/__init__.py +0 -0
  76. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/cli.py +0 -0
  77. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/executor.py +0 -0
  78. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/resources/attachments.json +0 -0
  79. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/resources/sample.docx +0 -0
  80. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/resources/sample.pdf +0 -0
  81. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/resources/sample_images.json +0 -0
  82. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/seed/template.py +0 -0
  83. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/selftest.py +0 -0
  84. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/smoke.py +0 -0
  85. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/steps.py +0 -0
  86. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/store.py +0 -0
  87. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/validate.py +0 -0
  88. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/app_creator/workflow_dsl.py +0 -0
  89. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/attachment.py +0 -0
  90. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/auth.py +0 -0
  91. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/calendar_mod.py +0 -0
  92. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/chart.py +0 -0
  93. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/chat.py +0 -0
  94. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/chatbot.py +0 -0
  95. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/cli_access.py +0 -0
  96. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/condition_dsl.py +0 -0
  97. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/contact.py +0 -0
  98. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/control_type_codes.py +0 -0
  99. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/department.py +0 -0
  100. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/__init__.py +0 -0
  101. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/_hapmeta/__init__.py +0 -0
  102. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/_hapmeta/control_type_codes.py +0 -0
  103. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/apply.py +0 -0
  104. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/componentlower.py +0 -0
  105. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/editspec/component.schema.json +0 -0
  106. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/editspec/custom-action.schema.json +0 -0
  107. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/editspec/envelope.schema.json +0 -0
  108. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/editspec/field.schema.json +0 -0
  109. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/editspec.py +0 -0
  110. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/errors.py +0 -0
  111. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/fieldlower.py +0 -0
  112. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/jsonschema_mini.py +0 -0
  113. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/models.py +0 -0
  114. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/ops.py +0 -0
  115. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/planner.py +0 -0
  116. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/editor/reader.py +0 -0
  117. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/field_normalizer.py +0 -0
  118. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/field_spec_adapter.py +0 -0
  119. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/filter_translator.py +0 -0
  120. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/filter_v3.py +0 -0
  121. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/flow_node.py +0 -0
  122. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/global_meta.py +0 -0
  123. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/group.py +0 -0
  124. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/guide.py +0 -0
  125. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/icon_index.py +0 -0
  126. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/instance.py +0 -0
  127. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/layout_check.py +0 -0
  128. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/logger.py +0 -0
  129. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/optionset.py +0 -0
  130. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/page.py +0 -0
  131. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/post.py +0 -0
  132. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/record.py +0 -0
  133. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/record_defaults.py +0 -0
  134. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/record_form_checks.py +0 -0
  135. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/record_lookups.py +0 -0
  136. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/record_rules.py +0 -0
  137. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/relation_scope.py +0 -0
  138. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/response_crypto.py +0 -0
  139. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/role.py +0 -0
  140. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/role_perm_builder.py +0 -0
  141. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/rule_spec_adapter.py +0 -0
  142. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/session.py +0 -0
  143. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/token_crypto.py +0 -0
  144. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/update.py +0 -0
  145. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/upload.py +0 -0
  146. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/v3/__init__.py +0 -0
  147. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/v3/dispatcher.py +0 -0
  148. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/v3/render.py +0 -0
  149. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/v3/schema.py +0 -0
  150. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/view_spec_adapter.py +0 -0
  151. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/workflow.py +0 -0
  152. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/workflow_node_dsl.py +0 -0
  153. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/worksheet_form.py +0 -0
  154. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/worksheet_reference.py +0 -0
  155. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/core/worksheet_templates.py +0 -0
  156. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/approval.md +0 -0
  157. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/chart.md +0 -0
  158. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/messages.md +0 -0
  159. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/overview.md +0 -0
  160. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/post.md +0 -0
  161. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/record.md +0 -0
  162. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/setup.md +0 -0
  163. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/skills.md +0 -0
  164. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/workflow.md +0 -0
  165. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/en/worksheet.md +0 -0
  166. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/index.json +0 -0
  167. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/approval.md +0 -0
  168. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/chart.md +0 -0
  169. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/messages.md +0 -0
  170. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/overview.md +0 -0
  171. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/post.md +0 -0
  172. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/record.md +0 -0
  173. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/setup.md +0 -0
  174. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/skills.md +0 -0
  175. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/workflow.md +0 -0
  176. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/guide/zh-Hans/worksheet.md +0 -0
  177. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/i18n.py +0 -0
  178. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/locale/__init__.py +0 -0
  179. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/locale/messages.json +0 -0
  180. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/locale/messages.schema.json +0 -0
  181. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/__init__.py +0 -0
  182. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/conftest.py +0 -0
  183. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_action_mdpublic_parity.py +0 -0
  184. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_advanced_setting_guard.py +0 -0
  185. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_app_creator.py +0 -0
  186. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_app_editor.py +0 -0
  187. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_app_export_usage.py +0 -0
  188. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_app_light_color.py +0 -0
  189. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_app_section_name.py +0 -0
  190. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_approval_submit_fill_cli.py +0 -0
  191. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_approval_wire.py +0 -0
  192. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_atomic_write.py +0 -0
  193. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_attachment_share.py +0 -0
  194. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_auth_prerelease.py +0 -0
  195. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_batch_add_atomic.py +0 -0
  196. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_bug_036430.py +0 -0
  197. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_bug_036750.py +0 -0
  198. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_calendar_date_range.py +0 -0
  199. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_calendar_discussion_cli.py +0 -0
  200. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_chart.py +0 -0
  201. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_chart_filter_merge.py +0 -0
  202. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_chat_attachment_send.py +0 -0
  203. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_chat_messages_cli.py +0 -0
  204. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_chat_recall_cli.py +0 -0
  205. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_chat_send_socket.py +0 -0
  206. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_cli_access.py +0 -0
  207. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_coded_responses.py +0 -0
  208. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_condition_dsl.py +0 -0
  209. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_condition_dsl_entries.py +0 -0
  210. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_condition_dsl_readback.py +0 -0
  211. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_config_cmd.py +0 -0
  212. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_content_language.py +0 -0
  213. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_control_lookup_guard.py +0 -0
  214. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_create_worksheet_partial.py +0 -0
  215. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_destructive_confirm_cli.py +0 -0
  216. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_dsl_existing_node_refs.py +0 -0
  217. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_dsl_multi_record_guard.py +0 -0
  218. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_editor_inline_subtable.py +0 -0
  219. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_engine_core_parity.py +0 -0
  220. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_arg_consistency.py +0 -0
  221. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_bidirectional.py +0 -0
  222. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_discussion_mentions.py +0 -0
  223. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_entry_module.py +0 -0
  224. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_field_record_ref.py +0 -0
  225. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_http_error_body.py +0 -0
  226. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_json_anywhere.py +0 -0
  227. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_json_file_arg.py +0 -0
  228. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_layout_check.py +0 -0
  229. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_node_get_detail.py +0 -0
  230. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_node_summary.py +0 -0
  231. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_post_cursor.py +0 -0
  232. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_publish_reasons.py +0 -0
  233. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_replicate_workflow.py +0 -0
  234. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_save_fields_shape.py +0 -0
  235. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_subgroups.py +0 -0
  236. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_subtable_read.py +0 -0
  237. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_worksheet_references.py +0 -0
  238. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_worksheet_visibility.py +0 -0
  239. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fb_worksheet_workflows.py +0 -0
  240. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_fields_mdpublic_parity.py +0 -0
  241. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_full_e2e.py +0 -0
  242. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g1_chart_parity.py +0 -0
  243. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g1_record_parity.py +0 -0
  244. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g1_upload_parity.py +0 -0
  245. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g1_worksheet_parity.py +0 -0
  246. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g2_coverage_parity.py +0 -0
  247. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g3_workflow_parity.py +0 -0
  248. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g4_approval_parity.py +0 -0
  249. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g5_low_frequency_parity.py +0 -0
  250. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g6_advanced_fields.py +0 -0
  251. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g6_fields_roundtrip.py +0 -0
  252. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g7_misc_gaps.py +0 -0
  253. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g7b_permanent_delete.py +0 -0
  254. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g8_filter_operator.py +0 -0
  255. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g8b_pivot_operators.py +0 -0
  256. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g8c_empty_filter_and_help_truth.py +0 -0
  257. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_g9_appid_resolve.py +0 -0
  258. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_global_meta.py +0 -0
  259. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_guide.py +0 -0
  260. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_guide_sections.py +0 -0
  261. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_i18n.py +0 -0
  262. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_inner_flow_batch_add.py +0 -0
  263. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_instance_envelope.py +0 -0
  264. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_instance_history_cli.py +0 -0
  265. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration.py +0 -0
  266. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_approval.py +0 -0
  267. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_approval_actions.py +0 -0
  268. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_calendar.py +0 -0
  269. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_destructive.py +0 -0
  270. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_misc.py +0 -0
  271. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_post.py +0 -0
  272. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_social.py +0 -0
  273. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_v3.py +0 -0
  274. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_workflow.py +0 -0
  275. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_integration_worksheet_extra.py +0 -0
  276. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_jsonschema_mini_copy.py +0 -0
  277. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_member_relation_array_wrap.py +0 -0
  278. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_multi_profile.py +0 -0
  279. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_no_workflow_unsupported.py +0 -0
  280. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_noninteractive_confirm.py +0 -0
  281. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_org_approval_v3_semantic_cli.py +0 -0
  282. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_org_id_cli.py +0 -0
  283. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_org_id_docs.py +0 -0
  284. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_page_filters_group_read.py +0 -0
  285. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_page_filters_group_update.py +0 -0
  286. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_page_save_page_id.py +0 -0
  287. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_parameter_conventions.py +0 -0
  288. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_parameter_mapping_registry.py +0 -0
  289. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_post_scope_cli.py +0 -0
  290. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_batch_v3_semantic_cli.py +0 -0
  291. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_business_rules.py +0 -0
  292. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_defaults.py +0 -0
  293. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_doc_id_hidden.py +0 -0
  294. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_field_alias.py +0 -0
  295. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_form_checks.py +0 -0
  296. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_run_action.py +0 -0
  297. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_v3_semantic_cli.py +0 -0
  298. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_record_write_fixes.py +0 -0
  299. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_relation_scope.py +0 -0
  300. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_rmw_mdpublic_parity.py +0 -0
  301. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_role_app_scope.py +0 -0
  302. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_rule_filters_and_field_warning.py +0 -0
  303. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_save_action_silent_drop.py +0 -0
  304. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_save_rule_spec.py +0 -0
  305. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_select_add_option.py +0 -0
  306. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_select_rejects_relation_value.py +0 -0
  307. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_semantic_types_registry.py +0 -0
  308. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_subtable_mdpublic_parity.py +0 -0
  309. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_update.py +0 -0
  310. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_update_mode.py +0 -0
  311. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_upload_allow_down.py +0 -0
  312. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_upload_host_resolution.py +0 -0
  313. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_upload_mdpublic_parity.py +0 -0
  314. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_v3_api_schema_loader.py +0 -0
  315. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_v3_bool_flags.py +0 -0
  316. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_v3_dispatcher.py +0 -0
  317. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_v3_registry_coverage.py +0 -0
  318. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_v3_response_format_json.py +0 -0
  319. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_v3_session.py +0 -0
  320. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_v3_yaml_translation.py +0 -0
  321. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_view_mdpublic_parity.py +0 -0
  322. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wf_config_keys.py +0 -0
  323. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wf_inner_scope.py +0 -0
  324. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wf_json_file_arg.py +0 -0
  325. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wf_node_delete_missing.py +0 -0
  326. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wf_save_action_dsl_fields.py +0 -0
  327. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wf_structure_listing.py +0 -0
  328. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wf_trigger_outcome.py +0 -0
  329. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wf_trigger_preserve.py +0 -0
  330. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_wo4_result_handling.py +0 -0
  331. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_code_node.py +0 -0
  332. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_condition_field_types.py +0 -0
  333. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_condition_slots.py +0 -0
  334. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_delete_cascade.py +0 -0
  335. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_envelope_errors.py +0 -0
  336. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_lifecycle_wire.py +0 -0
  337. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_list_cli.py +0 -0
  338. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_node_wire.py +0 -0
  339. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_publish_inner.py +0 -0
  340. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_read_write_keys.py +0 -0
  341. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_workflow_v3_semantic_cli.py +0 -0
  342. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_worksheet_create_section.py +0 -0
  343. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_worksheet_crud_cli.py +0 -0
  344. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_worksheet_filter_read.py +0 -0
  345. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_worksheet_switch.py +0 -0
  346. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/tests/test_worksheet_v3_semantic_cli.py +0 -0
  347. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/utils/__init__.py +0 -0
  348. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/utils/atomic_write.py +0 -0
  349. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/utils/confirm.py +0 -0
  350. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/utils/formatting.py +0 -0
  351. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/utils/options.py +0 -0
  352. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli/utils/parameter_mapping.py +0 -0
  353. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli.egg-info/SOURCES.txt +0 -0
  354. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli.egg-info/dependency_links.txt +0 -0
  355. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli.egg-info/entry_points.txt +0 -0
  356. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli.egg-info/requires.txt +0 -0
  357. {hap_cli-0.9.3 → hap_cli-0.9.4}/hap_cli.egg-info/top_level.txt +0 -0
  358. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/__init__.py +0 -0
  359. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/__main__.py +0 -0
  360. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/_wftest.py +0 -0
  361. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/charts.py +0 -0
  362. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/cleanup.py +0 -0
  363. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/compiler.py +0 -0
  364. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/config.py +0 -0
  365. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/errors.py +0 -0
  366. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/executor.py +0 -0
  367. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/fields.py +0 -0
  368. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/hap.py +0 -0
  369. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/recording/__init__.py +0 -0
  370. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/recording/console.py +0 -0
  371. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/recording/jsonl.py +0 -0
  372. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/recording/mirror.py +0 -0
  373. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/recording/report.py +0 -0
  374. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/schema.py +0 -0
  375. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/seed/__init__.py +0 -0
  376. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/seed/cli.py +0 -0
  377. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/seed/executor.py +0 -0
  378. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/seed/template.py +0 -0
  379. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/selftest.py +0 -0
  380. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/smoke.py +0 -0
  381. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/step.py +0 -0
  382. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/steps.py +0 -0
  383. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/store.py +0 -0
  384. {hap_cli-0.9.3 → hap_cli-0.9.4}/live_tests/workflow_dsl.py +0 -0
  385. {hap_cli-0.9.3 → hap_cli-0.9.4}/setup.cfg +0 -0
  386. {hap_cli-0.9.3 → hap_cli-0.9.4}/setup.py +0 -0
  387. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/INDEX.json +0 -0
  388. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/add_member_to_role.yaml +0 -0
  389. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/batch_delete_records.yaml +0 -0
  390. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/create_optionset.yaml +0 -0
  391. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/create_role.yaml +0 -0
  392. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/delete_optionset.yaml +0 -0
  393. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/delete_record.yaml +0 -0
  394. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/delete_role.yaml +0 -0
  395. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/delete_worksheet.yaml +0 -0
  396. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_app_info.yaml +0 -0
  397. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_app_knowledge_list.yaml +0 -0
  398. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_app_worksheets_list.yaml +0 -0
  399. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_optionset_list.yaml +0 -0
  400. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_record_details.yaml +0 -0
  401. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_record_discussions.yaml +0 -0
  402. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_record_list.yaml +0 -0
  403. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_record_logs.yaml +0 -0
  404. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_record_pivot_data.yaml +0 -0
  405. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_record_relations.yaml +0 -0
  406. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_record_share_link.yaml +0 -0
  407. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_regions.yaml +0 -0
  408. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_role_details.yaml +0 -0
  409. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/get_role_list.yaml +0 -0
  410. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/knowledge_search.yaml +0 -0
  411. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/leave_all_roles.yaml +0 -0
  412. {hap_cli-0.9.3 → hap_cli-0.9.4}/sources/v3-api-schema/remove_member_from_role.yaml +0 -0
  413. {hap_cli-0.9.3 → hap_cli-0.9.4}/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.9.3
3
+ Version: 0.9.4
4
4
  Summary: CLI harness for Mingdao HAP - Enterprise no-code platform
5
5
  Author: hap-cli
6
6
  License: Apache-2.0
@@ -155,6 +155,32 @@ def case_view(app_id: str, section_id: str) -> None:
155
155
  hap(["worksheet", "delete", ws_id, "-a", app_id, "-y"], check=False)
156
156
 
157
157
 
158
+ def case_view_spec_partial(app_id: str, section_id: str) -> None:
159
+ """Bug #455744: a --view-spec naming only the card title must leave the
160
+ calendar's name, type and start-date field alone."""
161
+ print("scenario: view update --view-spec keeps unexpressed settings")
162
+ ws_id = _make_worksheet(app_id, section_id, "LT-view-spec-partial")
163
+ title_id = next((c["controlId"] for c in _fields(ws_id)
164
+ if c.get("attribute") == 1), "")
165
+ res = hap(["worksheet", "view", "create", ws_id, "日历",
166
+ "--view-type", "calendar", "--begin-date", "ctime",
167
+ "-a", app_id])
168
+ vid = res.get("viewId") if isinstance(res, dict) else ""
169
+ check("calendar view created", bool(vid), str(res))
170
+ ok, res = _try(["worksheet", "view", "update", ws_id, vid, "-a", app_id,
171
+ "--view-spec",
172
+ json.dumps({"card": {"titleField": title_id}})])
173
+ check("title-only view-spec update succeeds", ok, str(res))
174
+ view = hap(["worksheet", "view", "info", ws_id, vid]) or {}
175
+ adv = view.get("advancedSetting") or {}
176
+ check("name kept", view.get("name") == "日历", str(view.get("name")))
177
+ check("still a calendar", view.get("viewType") == 4,
178
+ str(view.get("viewType")))
179
+ check("start date kept", adv.get("begindate") == "ctime", str(adv))
180
+ check("title field written", adv.get("viewtitle") == title_id, str(adv))
181
+ hap(["worksheet", "delete", ws_id, "-a", app_id, "-y"], check=False)
182
+
183
+
158
184
  def _roles(app_id: str) -> dict[str, str]:
159
185
  data = hap(["app", "role", "list", "-a", app_id], check=False)
160
186
  roles = data.get("roles", []) if isinstance(data, dict) else []
@@ -4832,6 +4858,7 @@ _CASES = {
4832
4858
  "rs-business-rules": case_rs_business_rules,
4833
4859
  "field": case_field,
4834
4860
  "view": case_view,
4861
+ "view-spec-partial": case_view_spec_partial,
4835
4862
  "role": case_role,
4836
4863
  "custom-action": case_custom_action,
4837
4864
  "custom-action-update": case_custom_action_update,
@@ -3,7 +3,7 @@
3
3
  import sys as _sys
4
4
  import types as _types
5
5
 
6
- __version__ = "0.9.3"
6
+ __version__ = "0.9.4"
7
7
 
8
8
  # The command tree used to live in hap_cli/hap_cli.py. A module named
9
9
  # after the package it sits in shadows that package: run python with the
@@ -2222,20 +2222,34 @@ def update_view_spec(
2222
2222
  from hap_cli.core import view_spec_adapter as _vsa
2223
2223
  field_resolver, control_types = _view_field_maps(
2224
2224
  session, worksheet_id, app_id)
2225
+ current = get_view_detail(
2226
+ session, worksheet_id, view_id, app_id=app_id) or {}
2227
+ # The adapter is built for create, where a missing type means a table
2228
+ # view and a missing name means "". On an update the spec only says
2229
+ # what changes, so an absent type is the view's current type (it also
2230
+ # drives type-specific translation such as card/cover defaults) and an
2231
+ # absent name must not be written at all — otherwise a title-only spec
2232
+ # turns a calendar into a nameless table view (bug #455744).
2233
+ spec = dict(spec)
2234
+ if "viewType" not in spec and "type" not in spec \
2235
+ and current.get("viewType") is not None:
2236
+ spec["viewType"] = current["viewType"]
2225
2237
  payload = _vsa.build_view_payload(
2226
2238
  spec, worksheet_id=worksheet_id, app_id=app_id, view_id=view_id,
2227
2239
  field_resolver=field_resolver or None,
2228
2240
  control_types=control_types or None,
2229
2241
  )
2242
+ if "name" not in spec:
2243
+ payload.pop("name", None)
2230
2244
  # Changing the view TYPE is not a partial edit. The product handles it
2231
2245
  # by posting the whole view object — read back, merged, re-defaulted for
2232
2246
  # the new type — with no editAttrs (ViewControl.jsx:256-259). Naming
2233
2247
  # viewType in editAttrs is a path the product never takes.
2234
2248
  new_type = payload.get("viewType")
2235
2249
  if new_type is not None:
2236
- current = get_view_detail(
2237
- session, worksheet_id, view_id, app_id=app_id) or {}
2238
2250
  if current and current.get("viewType") != new_type:
2251
+ logger.info("view spec: view %s type %s -> %s, saving whole view",
2252
+ view_id, current.get("viewType"), new_type)
2239
2253
  merged = {**current, **payload}
2240
2254
  merged.pop("editAttrs", None)
2241
2255
  merged.pop("editAdKeys", None)
@@ -10566,6 +10566,78 @@ class TestUpdateViewSpec:
10566
10566
  assert identity not in body["editAttrs"]
10567
10567
  assert "navshow" in body["editAdKeys"]
10568
10568
 
10569
+ @staticmethod
10570
+ def _route_current(mock_post, current):
10571
+ def _route(url, json=None, **kw):
10572
+ if url.endswith("/Worksheet/GetWorksheetControls"):
10573
+ return _mock_response({"controls": [
10574
+ {"controlId": "c1", "controlName": "标题", "type": 2},
10575
+ ]})
10576
+ if url.endswith("/Worksheet/GetWorksheetViewById"):
10577
+ return _mock_response(current)
10578
+ return _mock_response({"viewId": "vw1"})
10579
+ mock_post.side_effect = _route
10580
+
10581
+ @staticmethod
10582
+ def _save_body(mock_post):
10583
+ saves = [c for c in mock_post.call_args_list
10584
+ if c.args[0].endswith("/Worksheet/SaveWorksheetView")]
10585
+ assert len(saves) == 1
10586
+ return saves[0].kwargs["json"]
10587
+
10588
+ @patch("hap_cli.core.session.requests.post")
10589
+ def test_title_only_spec_keeps_calendar_type_and_name(
10590
+ self, mock_post, mock_session):
10591
+ """Bug #455744: a spec naming only card.titleField must not turn a
10592
+ calendar into a table view or blank its name — the spec says
10593
+ nothing about either, so both are left as they are."""
10594
+ self._route_current(mock_post, {
10595
+ "viewId": "vw1", "viewType": 4, "name": "QA Calendar",
10596
+ "advancedSetting": {"begindate": "cd1"},
10597
+ })
10598
+ ws_mod.update_view_spec(
10599
+ mock_session, "ws1", "vw1", {"card": {"titleField": "c1"}},
10600
+ app_id="app1",
10601
+ )
10602
+ body = self._save_body(mock_post)
10603
+ # Still a partial edit — not the whole-object type-change save.
10604
+ assert "editAttrs" in body
10605
+ assert body.get("viewType", 4) == 4
10606
+ assert "name" not in body
10607
+ assert "name" not in body["editAttrs"]
10608
+ assert "viewType" not in body["editAttrs"]
10609
+ assert body["advancedSetting"]["viewtitle"] == "c1"
10610
+ assert "begindate" not in body["editAdKeys"]
10611
+ assert body["editAdKeys"] == list(body["advancedSetting"])
10612
+
10613
+ @patch("hap_cli.core.session.requests.post")
10614
+ def test_spec_without_name_keeps_table_view_name(
10615
+ self, mock_post, mock_session):
10616
+ self._route_current(mock_post, {
10617
+ "viewId": "vw1", "viewType": 0, "name": "全部"})
10618
+ ws_mod.update_view_spec(
10619
+ mock_session, "ws1", "vw1", {"card": {"titleField": "c1"}},
10620
+ app_id="app1",
10621
+ )
10622
+ body = self._save_body(mock_post)
10623
+ assert "name" not in body
10624
+ assert "name" not in body["editAttrs"]
10625
+
10626
+ @patch("hap_cli.core.session.requests.post")
10627
+ def test_explicit_type_change_still_saves_whole_view(
10628
+ self, mock_post, mock_session):
10629
+ self._route_current(mock_post, {
10630
+ "viewId": "vw1", "viewType": 0, "name": "全部"})
10631
+ ws_mod.update_view_spec(
10632
+ mock_session, "ws1", "vw1", {"viewType": "gallery"},
10633
+ app_id="app1",
10634
+ )
10635
+ body = self._save_body(mock_post)
10636
+ assert body["viewType"] == 3
10637
+ assert "editAttrs" not in body
10638
+ # The spec did not rename it, so the current name rides along.
10639
+ assert body["name"] == "全部"
10640
+
10569
10641
 
10570
10642
  class TestFieldNormalizerFixtureCoverage:
10571
10643
  """Loads the user's captured get_worksheet_structure fixtures from
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hap-cli
3
- Version: 0.9.3
3
+ Version: 0.9.4
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