hap-cli 0.8.12__tar.gz → 0.8.14__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 (253) hide show
  1. {hap_cli-0.8.12 → hap_cli-0.8.14}/PKG-INFO +1 -1
  2. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/__init__.py +1 -1
  3. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/post_cmd.py +2 -2
  4. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/cli_access.py +36 -0
  5. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/post.py +24 -0
  6. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/session.py +8 -0
  7. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_cli_access.py +75 -0
  8. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_core.py +98 -0
  9. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli.egg-info/PKG-INFO +1 -1
  10. {hap_cli-0.8.12 → hap_cli-0.8.14}/MANIFEST.in +0 -0
  11. {hap_cli-0.8.12 → hap_cli-0.8.14}/README.md +0 -0
  12. {hap_cli-0.8.12 → hap_cli-0.8.14}/app_live_tests/__init__.py +0 -0
  13. {hap_cli-0.8.12 → hap_cli-0.8.14}/app_live_tests/__main__.py +0 -0
  14. {hap_cli-0.8.12 → hap_cli-0.8.14}/app_live_tests/config.py +0 -0
  15. {hap_cli-0.8.12 → hap_cli-0.8.14}/app_live_tests/harness.py +0 -0
  16. {hap_cli-0.8.12 → hap_cli-0.8.14}/app_live_tests/smoke.py +0 -0
  17. {hap_cli-0.8.12 → hap_cli-0.8.14}/app_live_tests/state.py +0 -0
  18. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/README.md +0 -0
  19. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/README_CN.md +0 -0
  20. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/__main__.py +0 -0
  21. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/__init__.py +0 -0
  22. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/app_cmd.py +0 -0
  23. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/app_creator_cmd.py +0 -0
  24. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/app_editor_cmd.py +0 -0
  25. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/auth_cmd.py +0 -0
  26. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/calendar_cmd.py +0 -0
  27. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/chart_cmd.py +0 -0
  28. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/chat_cmd.py +0 -0
  29. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/chatbot_cmd.py +0 -0
  30. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/config_cmd.py +0 -0
  31. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/contact_cmd.py +0 -0
  32. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/department_cmd.py +0 -0
  33. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/group_cmd.py +0 -0
  34. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/icon_cmd.py +0 -0
  35. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/instance_cmd.py +0 -0
  36. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/node_cmd.py +0 -0
  37. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/optionset_cmd.py +0 -0
  38. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/page_cmd.py +0 -0
  39. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/record_cmd.py +0 -0
  40. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/region_cmd.py +0 -0
  41. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/role_cmd.py +0 -0
  42. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/update_cmd.py +0 -0
  43. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/upload_cmd.py +0 -0
  44. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/v3_registry.py +0 -0
  45. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/workflow_cmd.py +0 -0
  46. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/commands/worksheet_cmd.py +0 -0
  47. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/context.py +0 -0
  48. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/__init__.py +0 -0
  49. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/action_spec_adapter.py +0 -0
  50. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app.py +0 -0
  51. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/__init__.py +0 -0
  52. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/_hapmeta/__init__.py +0 -0
  53. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/_hapmeta/control_type_codes.py +0 -0
  54. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/_hapmeta/worksheet_templates.py +0 -0
  55. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/charts.py +0 -0
  56. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/cleanup.py +0 -0
  57. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/compiler.py +0 -0
  58. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/config.py +0 -0
  59. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/design/design.schema.json +0 -0
  60. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/errors.py +0 -0
  61. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/examples/minimal.design.json +0 -0
  62. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/executor.py +0 -0
  63. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/fields.py +0 -0
  64. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/hap.py +0 -0
  65. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/merge.py +0 -0
  66. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/__init__.py +0 -0
  67. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/console.py +0 -0
  68. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/jsonl.py +0 -0
  69. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/mirror.py +0 -0
  70. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/recording/report.py +0 -0
  71. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/schema.py +0 -0
  72. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/INSTRUCTIONS.md +0 -0
  73. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/__init__.py +0 -0
  74. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/cli.py +0 -0
  75. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/executor.py +0 -0
  76. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/resources/attachments.json +0 -0
  77. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/resources/sample.docx +0 -0
  78. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/resources/sample.pdf +0 -0
  79. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/resources/sample_images.json +0 -0
  80. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/seed/template.py +0 -0
  81. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/selftest.py +0 -0
  82. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/smoke.py +0 -0
  83. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/steps.py +0 -0
  84. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/store.py +0 -0
  85. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/validate.py +0 -0
  86. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/app_creator/workflow_dsl.py +0 -0
  87. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/auth.py +0 -0
  88. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/calendar_mod.py +0 -0
  89. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/chart.py +0 -0
  90. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/chat.py +0 -0
  91. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/chatbot.py +0 -0
  92. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/contact.py +0 -0
  93. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/control_type_codes.py +0 -0
  94. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/department.py +0 -0
  95. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/__init__.py +0 -0
  96. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/_hapmeta/__init__.py +0 -0
  97. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/_hapmeta/control_type_codes.py +0 -0
  98. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/apply.py +0 -0
  99. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/componentlower.py +0 -0
  100. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/editspec.py +0 -0
  101. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/errors.py +0 -0
  102. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/fieldlower.py +0 -0
  103. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/jsonschema_mini.py +0 -0
  104. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/models.py +0 -0
  105. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/ops.py +0 -0
  106. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/planner.py +0 -0
  107. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/editor/reader.py +0 -0
  108. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/field_normalizer.py +0 -0
  109. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/field_spec_adapter.py +0 -0
  110. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/filter_translator.py +0 -0
  111. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/flow_node.py +0 -0
  112. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/global_meta.py +0 -0
  113. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/group.py +0 -0
  114. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/icon_index.py +0 -0
  115. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/instance.py +0 -0
  116. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/logger.py +0 -0
  117. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/optionset.py +0 -0
  118. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/page.py +0 -0
  119. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/record.py +0 -0
  120. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/response_crypto.py +0 -0
  121. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/role.py +0 -0
  122. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/role_perm_builder.py +0 -0
  123. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/token_crypto.py +0 -0
  124. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/update.py +0 -0
  125. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/upload.py +0 -0
  126. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/v3/__init__.py +0 -0
  127. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/v3/dispatcher.py +0 -0
  128. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/v3/render.py +0 -0
  129. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/v3/schema.py +0 -0
  130. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/view_spec_adapter.py +0 -0
  131. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/workflow.py +0 -0
  132. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/workflow_node_dsl.py +0 -0
  133. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/worksheet.py +0 -0
  134. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/core/worksheet_templates.py +0 -0
  135. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/hap_cli.py +0 -0
  136. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/i18n.py +0 -0
  137. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/locale/__init__.py +0 -0
  138. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/locale/messages.json +0 -0
  139. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/locale/messages.schema.json +0 -0
  140. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/__init__.py +0 -0
  141. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/conftest.py +0 -0
  142. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_app_creator.py +0 -0
  143. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_app_editor.py +0 -0
  144. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_app_export_usage.py +0 -0
  145. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_auth_prerelease.py +0 -0
  146. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_bug_036430.py +0 -0
  147. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_chart.py +0 -0
  148. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_config_cmd.py +0 -0
  149. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_destructive_confirm_cli.py +0 -0
  150. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_full_e2e.py +0 -0
  151. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_global_meta.py +0 -0
  152. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_i18n.py +0 -0
  153. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_instance_history_cli.py +0 -0
  154. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration.py +0 -0
  155. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_approval.py +0 -0
  156. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_approval_actions.py +0 -0
  157. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_calendar.py +0 -0
  158. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_destructive.py +0 -0
  159. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_misc.py +0 -0
  160. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_post.py +0 -0
  161. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_social.py +0 -0
  162. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_v3.py +0 -0
  163. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_workflow.py +0 -0
  164. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_integration_worksheet_extra.py +0 -0
  165. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_multi_profile.py +0 -0
  166. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_org_approval_v3_semantic_cli.py +0 -0
  167. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_org_id_cli.py +0 -0
  168. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_org_id_docs.py +0 -0
  169. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_parameter_conventions.py +0 -0
  170. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_parameter_mapping_registry.py +0 -0
  171. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_record_batch_v3_semantic_cli.py +0 -0
  172. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_record_field_alias.py +0 -0
  173. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_record_v3_semantic_cli.py +0 -0
  174. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_semantic_types_registry.py +0 -0
  175. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_update.py +0 -0
  176. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_v3_api_schema_loader.py +0 -0
  177. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_v3_dispatcher.py +0 -0
  178. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_v3_registry_coverage.py +0 -0
  179. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_v3_session.py +0 -0
  180. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_v3_yaml_translation.py +0 -0
  181. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_workflow_list_cli.py +0 -0
  182. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_workflow_v3_semantic_cli.py +0 -0
  183. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_worksheet_crud_cli.py +0 -0
  184. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/tests/test_worksheet_v3_semantic_cli.py +0 -0
  185. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/utils/__init__.py +0 -0
  186. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/utils/formatting.py +0 -0
  187. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/utils/options.py +0 -0
  188. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli/utils/parameter_mapping.py +0 -0
  189. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli.egg-info/SOURCES.txt +0 -0
  190. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli.egg-info/dependency_links.txt +0 -0
  191. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli.egg-info/entry_points.txt +0 -0
  192. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli.egg-info/requires.txt +0 -0
  193. {hap_cli-0.8.12 → hap_cli-0.8.14}/hap_cli.egg-info/top_level.txt +0 -0
  194. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/__init__.py +0 -0
  195. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/__main__.py +0 -0
  196. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/_wftest.py +0 -0
  197. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/charts.py +0 -0
  198. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/cleanup.py +0 -0
  199. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/compiler.py +0 -0
  200. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/config.py +0 -0
  201. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/errors.py +0 -0
  202. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/executor.py +0 -0
  203. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/fields.py +0 -0
  204. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/hap.py +0 -0
  205. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/recording/__init__.py +0 -0
  206. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/recording/console.py +0 -0
  207. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/recording/jsonl.py +0 -0
  208. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/recording/mirror.py +0 -0
  209. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/recording/report.py +0 -0
  210. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/schema.py +0 -0
  211. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/seed/__init__.py +0 -0
  212. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/seed/cli.py +0 -0
  213. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/seed/executor.py +0 -0
  214. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/seed/template.py +0 -0
  215. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/selftest.py +0 -0
  216. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/smoke.py +0 -0
  217. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/step.py +0 -0
  218. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/steps.py +0 -0
  219. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/store.py +0 -0
  220. {hap_cli-0.8.12 → hap_cli-0.8.14}/live_tests/workflow_dsl.py +0 -0
  221. {hap_cli-0.8.12 → hap_cli-0.8.14}/setup.cfg +0 -0
  222. {hap_cli-0.8.12 → hap_cli-0.8.14}/setup.py +0 -0
  223. {hap_cli-0.8.12 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/component.schema.json +0 -0
  224. {hap_cli-0.8.12 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/custom-action.schema.json +0 -0
  225. {hap_cli-0.8.12 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/envelope.schema.json +0 -0
  226. {hap_cli-0.8.12 → hap_cli-0.8.14}/skills/cli/hap-cli-app-editor/scripts/editspec/field.schema.json +0 -0
  227. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/INDEX.json +0 -0
  228. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/add_member_to_role.yaml +0 -0
  229. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/batch_delete_records.yaml +0 -0
  230. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/create_optionset.yaml +0 -0
  231. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/create_role.yaml +0 -0
  232. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/delete_optionset.yaml +0 -0
  233. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/delete_record.yaml +0 -0
  234. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/delete_role.yaml +0 -0
  235. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/delete_worksheet.yaml +0 -0
  236. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_app_info.yaml +0 -0
  237. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_app_knowledge_list.yaml +0 -0
  238. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_app_worksheets_list.yaml +0 -0
  239. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_optionset_list.yaml +0 -0
  240. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_details.yaml +0 -0
  241. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_discussions.yaml +0 -0
  242. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_list.yaml +0 -0
  243. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_logs.yaml +0 -0
  244. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_pivot_data.yaml +0 -0
  245. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_relations.yaml +0 -0
  246. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_record_share_link.yaml +0 -0
  247. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_regions.yaml +0 -0
  248. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_role_details.yaml +0 -0
  249. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/get_role_list.yaml +0 -0
  250. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/knowledge_search.yaml +0 -0
  251. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/leave_all_roles.yaml +0 -0
  252. {hap_cli-0.8.12 → hap_cli-0.8.14}/sources/v3-api-schema/remove_member_from_role.yaml +0 -0
  253. {hap_cli-0.8.12 → hap_cli-0.8.14}/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.12
3
+ Version: 0.8.14
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.12"
3
+ __version__ = "0.8.14"
@@ -425,8 +425,8 @@ def _normalize_scope(scope: str) -> str:
425
425
  "fav=your favorites, group=posts in a group (requires --group-id)."
426
426
  ),
427
427
  )
428
- @click.option("--account-id", default="", help="Member id (required when --scope=user)")
429
- @click.option("--group-id", default="", help="Group id (required when --scope=group)")
428
+ @click.option("--account-id", default="", help="Show only this member's posts")
429
+ @click.option("--group-id", default="", help="Show only this group's posts")
430
430
  @click.option("-k", "--keywords", default="", help="Keyword filter")
431
431
  @click.option("--start-date", default="", help="Only posts on or after this date (YYYY-MM-DD)")
432
432
  @click.option("--end-date", default="", help="Only posts on or before this date (YYYY-MM-DD)")
@@ -127,6 +127,42 @@ def _record(key: str, result: str, now: float) -> None:
127
127
  _memo[key] = now + _ttl_for(result)
128
128
 
129
129
 
130
+ def clear_cache(profile: str | None = None) -> None:
131
+ """Drop cached access verdicts so the next request re-checks live.
132
+
133
+ Called on logout: a previously cached "allowed" verdict must not
134
+ outlive the credentials it was granted under. Without that, logging
135
+ out and back in would keep running commands off the stale verdict
136
+ even after the org's CLI switch was turned off — the user would
137
+ expect the gate to re-evaluate on the fresh login.
138
+
139
+ With ``profile`` given, only that profile's entries (keys
140
+ ``"<profile>|<orgId>"``) are removed; with ``None``, every entry is
141
+ cleared. Both the in-process memo and the on-disk state file are
142
+ updated.
143
+ """
144
+ if profile is None:
145
+ _memo.clear()
146
+ try:
147
+ save_state({})
148
+ except Exception as e:
149
+ logger.warning("failed to clear cli-access cache: %s", e)
150
+ return
151
+
152
+ prefix = f"{profile}|"
153
+ for key in [k for k in _memo if k.startswith(prefix)]:
154
+ _memo.pop(key, None)
155
+ state = load_state()
156
+ remaining = {k: v for k, v in state.items() if not k.startswith(prefix)}
157
+ if remaining != state:
158
+ try:
159
+ save_state(remaining)
160
+ except Exception as e:
161
+ logger.warning(
162
+ "failed to clear cli-access cache for profile %s: %s", profile, e
163
+ )
164
+
165
+
130
166
  # Sentinel distinguishing "endpoint not deployed in this environment"
131
167
  # from other no-verdict outcomes (network error, unexpected payload).
132
168
  # 404 is environment-wide, not per-org, so batch callers can stop
@@ -72,7 +72,31 @@ def get_post_list(
72
72
  For ``lType == "project"`` (org-wide feed), ``range`` follows the
73
73
  frontend convention when not overridden: no projectId → 0
74
74
  (cross-network), concrete projectId → 2.
75
+
76
+ Effective-scope derivation (mirrors ``postActions.loadPosts``): the
77
+ server keys off ``lType`` to decide which feed to read, and silently
78
+ ignores ``aId`` / ``gID`` when they don't match the declared scope.
79
+ The frontend therefore derives the effective ``lType`` from the
80
+ presence of the ids — a group id forces ``group``, an account id
81
+ forces ``user`` — rather than trusting the nominal list type. We do
82
+ the same so that e.g. ``--account-id`` filters the author feed even
83
+ when the caller left the scope at its org-wide default.
84
+
85
+ ``myself`` is handled specially: the bare ``lType=myself`` scope
86
+ lists the caller's posts but the server drops keyword / date filters
87
+ on it. The product's "我的"(My) tab actually routes through
88
+ ``lType=user`` with the caller's own accountId, so we resolve
89
+ ``myself`` to that shape when the session knows the caller's id
90
+ (falling back to the raw scope otherwise).
75
91
  """
92
+ if list_type == "myself" and not account_id and not group_id and session.account_id:
93
+ account_id = session.account_id
94
+
95
+ if group_id:
96
+ list_type = "group"
97
+ elif account_id:
98
+ list_type = "user"
99
+
76
100
  data: dict[str, Any] = {
77
101
  "fType": source_type or "feed",
78
102
  "lType": list_type,
@@ -1145,6 +1145,14 @@ def delete_profile(name: str) -> None:
1145
1145
  doc["profiles"] = profiles
1146
1146
  _write_config(doc)
1147
1147
 
1148
+ # Logging out must drop any cached CLI-access verdict for this
1149
+ # profile: a stale "allowed" must not let commands keep running after
1150
+ # the org may have turned its CLI switch off. Imported lazily to
1151
+ # avoid a module-load cycle (cli_access imports this module).
1152
+ from hap_cli.core import cli_access
1153
+
1154
+ cli_access.clear_cache(name)
1155
+
1148
1156
 
1149
1157
  def resolve_profile_name(cli_opt: Optional[str] = None) -> str:
1150
1158
  """Resolve which profile to act on: --profile > $HAP_PROFILE > active."""
@@ -661,3 +661,78 @@ class TestAnnotateOrgs404ShortCircuit:
661
661
  s = self._session()
662
662
  with patch("requests.get", return_value=_resp({}, status=404)):
663
663
  assert cli_access.probe_cli_access_with_session(s, "org-1") is None
664
+
665
+
666
+ # ── clear_cache (logout must drop cached verdicts) ───────────────────────
667
+
668
+
669
+ class TestClearCache:
670
+ def test_clear_one_profile_only(self):
671
+ cli_access.save_state(
672
+ {
673
+ "prod|org-1": {"checked_at": time.time(), "result": "allowed"},
674
+ "prod|org-2": {"checked_at": time.time(), "result": "pass_404"},
675
+ "sandbox|org-9": {"checked_at": time.time(), "result": "allowed"},
676
+ }
677
+ )
678
+ cli_access._memo.update(
679
+ {
680
+ "prod|org-1": time.time() + 999,
681
+ "sandbox|org-9": time.time() + 999,
682
+ }
683
+ )
684
+ cli_access.clear_cache("prod")
685
+ state = _state()
686
+ assert "prod|org-1" not in state
687
+ assert "prod|org-2" not in state
688
+ assert "sandbox|org-9" in state # untouched
689
+ assert "prod|org-1" not in cli_access._memo
690
+ assert "sandbox|org-9" in cli_access._memo
691
+
692
+ def test_clear_does_not_match_prefix_siblings(self):
693
+ # "prod" must not wipe "prod2"'s entries.
694
+ cli_access.save_state(
695
+ {
696
+ "prod|org-1": {"checked_at": time.time(), "result": "allowed"},
697
+ "prod2|org-1": {"checked_at": time.time(), "result": "allowed"},
698
+ }
699
+ )
700
+ cli_access.clear_cache("prod")
701
+ state = _state()
702
+ assert "prod|org-1" not in state
703
+ assert "prod2|org-1" in state
704
+
705
+ def test_clear_all(self):
706
+ cli_access.save_state(
707
+ {
708
+ "prod|org-1": {"checked_at": time.time(), "result": "allowed"},
709
+ "sandbox|org-9": {"checked_at": time.time(), "result": "allowed"},
710
+ }
711
+ )
712
+ cli_access._memo["prod|org-1"] = time.time() + 999
713
+ cli_access.clear_cache()
714
+ assert _state() == {}
715
+ assert cli_access._memo == {}
716
+
717
+ def test_clear_missing_profile_is_noop(self):
718
+ cli_access.save_state(
719
+ {"prod|org-1": {"checked_at": time.time(), "result": "allowed"}}
720
+ )
721
+ cli_access.clear_cache("ghost") # no such profile -> no error
722
+ assert "prod|org-1" in _state()
723
+
724
+ def test_logout_clears_cached_verdict(self, org_session):
725
+ # End to end: an allowed verdict is cached, then logging out the
726
+ # profile drops it so a fresh login re-probes (and can now be
727
+ # denied if the org's CLI switch was turned off meanwhile).
728
+ from hap_cli.core.session import delete_profile, save_profile
729
+
730
+ save_profile("prod", {"login_url": "https://www.mingdao.com"})
731
+ with patch("requests.get", return_value=_resp(_status_payload(True))) as mock_get:
732
+ ensure_cli_access(org_session)
733
+ assert mock_get.call_count == 1
734
+ assert "prod|org-1" in _state()
735
+
736
+ delete_profile("prod")
737
+ assert "prod|org-1" not in _state()
738
+ assert "prod|org-1" not in cli_access._memo
@@ -3232,6 +3232,104 @@ class TestPost:
3232
3232
  # project scope with no projectId → cross-network range.
3233
3233
  assert body["range"] == 0
3234
3234
 
3235
+ # ---- Effective-scope derivation (pd-openweb postActions.loadPosts) ----
3236
+ # The feed derives the effective lType from the presence of an account
3237
+ # id / group id, not just the nominal list_type: an account id forces
3238
+ # the member feed, a group id forces the group feed. Without that
3239
+ # derivation an `aId` sent under lType=project is silently ignored by
3240
+ # the server.
3241
+
3242
+ @patch("hap_cli.core.session.requests.post")
3243
+ def test_account_id_forces_user_scope(self, mock_post, mock_session):
3244
+ """An account id under the org scope must promote lType to user."""
3245
+ mock_post.return_value = _mock_response({"postList": []})
3246
+ from hap_cli.core import post as post_mod
3247
+ post_mod.get_post_list(
3248
+ mock_session,
3249
+ list_type="project",
3250
+ account_id="u-1",
3251
+ )
3252
+ body = mock_post.call_args[1]["json"]
3253
+ assert body["lType"] == "user"
3254
+ assert body["aId"] == "u-1"
3255
+ # User scope is cross-network — no range constraint.
3256
+ assert "range" not in body
3257
+
3258
+ @patch("hap_cli.core.session.requests.post")
3259
+ def test_group_id_forces_group_scope(self, mock_post, mock_session):
3260
+ """A group id under the org scope must promote lType to group."""
3261
+ mock_post.return_value = _mock_response({"postList": []})
3262
+ from hap_cli.core import post as post_mod
3263
+ post_mod.get_post_list(
3264
+ mock_session,
3265
+ list_type="project",
3266
+ group_id="g-1",
3267
+ )
3268
+ body = mock_post.call_args[1]["json"]
3269
+ assert body["lType"] == "group"
3270
+ assert body["gID"] == "g-1"
3271
+ assert "range" not in body
3272
+
3273
+ @patch("hap_cli.core.session.requests.post")
3274
+ def test_group_id_wins_over_account_id(self, mock_post, mock_session):
3275
+ """When both ids are present the group feed wins (frontend order)."""
3276
+ mock_post.return_value = _mock_response({"postList": []})
3277
+ from hap_cli.core import post as post_mod
3278
+ post_mod.get_post_list(
3279
+ mock_session,
3280
+ list_type="project",
3281
+ account_id="u-1",
3282
+ group_id="g-1",
3283
+ )
3284
+ body = mock_post.call_args[1]["json"]
3285
+ assert body["lType"] == "group"
3286
+
3287
+ @patch("hap_cli.core.session.requests.post")
3288
+ def test_myself_resolves_to_current_user_feed(self, mock_post, mock_session):
3289
+ """`myself` routes through the caller's user feed so keyword/date
3290
+ filters actually apply (the bare lType=myself scope ignores them)."""
3291
+ mock_session.account_id = "me-1"
3292
+ mock_post.return_value = _mock_response({"postList": []})
3293
+ from hap_cli.core import post as post_mod
3294
+ post_mod.get_post_list(
3295
+ mock_session,
3296
+ list_type="myself",
3297
+ keywords="report",
3298
+ )
3299
+ body = mock_post.call_args[1]["json"]
3300
+ assert body["lType"] == "user"
3301
+ assert body["aId"] == "me-1"
3302
+ assert body["keywords"] == "report"
3303
+
3304
+ @patch("hap_cli.core.session.requests.post")
3305
+ def test_myself_without_resolved_account_falls_back(self, mock_post, mock_session):
3306
+ """If the caller's account id is unknown, `myself` passes through
3307
+ unchanged rather than silently becoming an empty user feed."""
3308
+ mock_session.account_id = ""
3309
+ mock_post.return_value = _mock_response({"postList": []})
3310
+ from hap_cli.core import post as post_mod
3311
+ post_mod.get_post_list(mock_session, list_type="myself")
3312
+ body = mock_post.call_args[1]["json"]
3313
+ assert body["lType"] == "myself"
3314
+ assert "aId" not in body
3315
+
3316
+ @patch("hap_cli.core.session.requests.post")
3317
+ def test_search_account_id_forces_user_scope(self, mock_post, mock_session):
3318
+ """search_posts shares the derivation — an author filter promotes
3319
+ the request to the member feed."""
3320
+ mock_post.return_value = _mock_response({"postList": []})
3321
+ from hap_cli.core import post as post_mod
3322
+ post_mod.search_posts(
3323
+ mock_session,
3324
+ keywords="launch",
3325
+ list_type="project",
3326
+ account_id="u-1",
3327
+ )
3328
+ body = mock_post.call_args[1]["json"]
3329
+ assert body["lType"] == "user"
3330
+ assert body["aId"] == "u-1"
3331
+ assert body["keywords"] == "launch"
3332
+
3235
3333
  # ---- Wave 2: search_posts (GetPostListByLegacyPara) ----
3236
3334
 
3237
3335
  @patch("hap_cli.core.session.requests.post")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hap-cli
3
- Version: 0.8.12
3
+ Version: 0.8.14
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